#!/bin/bash # pr-create.sh - Create pull requests on Gitea or GitHub # Usage: pr-create.sh -t "Title" [-b "Body"] [-B base] [-H head] [-l "labels"] [-m "milestone"] set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/detect-platform.sh" # Default values TITLE="" BODY="" BASE_BRANCH="" HEAD_BRANCH="" LABELS="" MILESTONE="" DRAFT=false ISSUE="" usage() { cat <&2 usage ;; esac done # If no title but issue provided, generate title if [[ -z "$TITLE" ]] && [[ -n "$ISSUE" ]]; then TITLE="Fixes #$ISSUE" fi if [[ -z "$TITLE" ]]; then echo "Error: Title is required (-t) or provide an issue (-i)" >&2 usage fi # Default head branch to current branch if [[ -z "$HEAD_BRANCH" ]]; then HEAD_BRANCH=$(git branch --show-current) fi # Add issue reference to body if provided if [[ -n "$ISSUE" ]]; then if [[ -n "$BODY" ]]; then BODY="$BODY Fixes #$ISSUE" else BODY="Fixes #$ISSUE" fi fi PLATFORM=$(detect_platform) case "$PLATFORM" in github) CMD="gh pr create --title \"$TITLE\"" [[ -n "$BODY" ]] && CMD="$CMD --body \"$BODY\"" [[ -n "$BASE_BRANCH" ]] && CMD="$CMD --base \"$BASE_BRANCH\"" [[ -n "$HEAD_BRANCH" ]] && CMD="$CMD --head \"$HEAD_BRANCH\"" [[ -n "$LABELS" ]] && CMD="$CMD --label \"$LABELS\"" [[ -n "$MILESTONE" ]] && CMD="$CMD --milestone \"$MILESTONE\"" [[ "$DRAFT" == true ]] && CMD="$CMD --draft" eval "$CMD" ;; gitea) # tea pull create syntax CMD="tea pr create --title \"$TITLE\"" [[ -n "$BODY" ]] && CMD="$CMD --description \"$BODY\"" [[ -n "$BASE_BRANCH" ]] && CMD="$CMD --base \"$BASE_BRANCH\"" [[ -n "$HEAD_BRANCH" ]] && CMD="$CMD --head \"$HEAD_BRANCH\"" # Handle labels for tea if [[ -n "$LABELS" ]]; then # tea may use --labels flag CMD="$CMD --labels \"$LABELS\"" fi # Handle milestone for tea if [[ -n "$MILESTONE" ]]; then MILESTONE_ID=$(tea milestones list 2>/dev/null | grep -E "^\s*[0-9]+" | grep "$MILESTONE" | awk '{print $1}' | head -1) if [[ -n "$MILESTONE_ID" ]]; then CMD="$CMD --milestone $MILESTONE_ID" else echo "Warning: Could not find milestone '$MILESTONE', creating without milestone" >&2 fi fi # Note: tea may not support --draft flag in all versions if [[ "$DRAFT" == true ]]; then echo "Note: Draft PR may not be supported by your tea version" >&2 fi eval "$CMD" ;; *) echo "Error: Could not detect git platform" >&2 exit 1 ;; esac