#!/usr/bin/env bash set -euo pipefail : "${GITEA_API:?GITEA_API is required}" : "${GITEA_TOKEN:?GITEA_TOKEN is required}" : "${BRANCH:?BRANCH is required}" : "${TITLE:?TITLE is required}" : "${BODY:?BODY is required}" owner_prefix="${HEAD_OWNER_PREFIX:-thomas}" existing=$(curl -fsS \ -H "Authorization: token ${GITEA_TOKEN}" \ "${GITEA_API}/pulls?state=open" \ | python -c 'import json,sys,os; d=json.load(sys.stdin); b=os.environ["BRANCH"]; print(next((str(pr["number"]) for pr in d if isinstance(pr,dict) and pr.get("head",{}).get("ref")==b), ""))') if [ -n "$existing" ]; then echo "PR already exists: #$existing" exit 0 fi echo "Creating PR..." created="false" for head in "${BRANCH}" "${owner_prefix}:${BRANCH}"; do echo "Trying head=${head}" payload=$(HEAD_REF="$head" TITLE="$TITLE" BODY="$BODY" python -c 'import json,os; print(json.dumps({"title": os.environ["TITLE"], "head": os.environ["HEAD_REF"], "base": "main", "body": os.environ["BODY"]}))') response=$(curl -sS -w '\n%{http_code}' -X POST \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ "${GITEA_API}/pulls" \ -d "$payload") body=$(printf '%s\n' "$response" | sed '$d') code=$(printf '%s\n' "$response" | tail -n1) echo "Create PR status: $code" echo "$body" if [ "$code" -ge 200 ] && [ "$code" -lt 300 ]; then created="true" break fi done if [ "$created" != "true" ]; then echo "PR creation failed" exit 1 fi