49 lines
1.4 KiB
Bash
49 lines
1.4 KiB
Bash
#!/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
|