#!/usr/bin/env bash set -euo pipefail # Create a PR via Gitea API using body from a file (default pr/phase0.md) # Env: GITEA_BASE_URL, GITEA_TOKEN, OWNER, REPO # Args: [HEAD_BRANCH] [BASE_BRANCH=main] [BODY_FILE=pr/phase0.md] HEAD_BRANCH="${1:-$(git symbolic-ref --short -q HEAD || echo '')}" BASE_BRANCH="${2:-main}" BODY_FILE="${3:-pr/phase0.md}" need () { for v in GITEA_BASE_URL GITEA_TOKEN OWNER REPO; do if [[ -z "${!v:-}" ]]; then echo "ERROR: Missing $v" >&2; exit 1; fi done [[ -f "$BODY_FILE" ]] || { echo "Body file not found: $BODY_FILE" >&2; exit 1; } if [[ -z "$HEAD_BRANCH" ]]; then echo "ERROR: Not on a named branch (detached HEAD). Pass HEAD_BRANCH explicitly." >&2 exit 1 fi } main () { need TITLE="$(head -n1 "$BODY_FILE" | sed 's/^# *//')" BODY="$(sed '1d' "$BODY_FILE")" PAYLOAD="$(jq -n --arg title "$TITLE" --arg head "$HEAD_BRANCH" --arg base "$BASE_BRANCH" --arg body "$BODY" '{title:$title, head:$head, base:$base, body:$body}')" RESP="$(curl -sS -X POST -H "Authorization: token ${GITEA_TOKEN}" -H "Content-Type: application/json" "${GITEA_BASE_URL}/api/v1/repos/${OWNER}/${REPO}/pulls" --data "$PAYLOAD")" echo "$RESP" | jq '{number, state, html_url, title}' if [[ "$(echo "$RESP" | jq -r '.number')" == "null" ]]; then echo "ERROR: PR not created. Full response:" >&2 echo "$RESP" >&2 exit 1 fi } main "$@"