Files
2025-08-16 22:15:29 -04:00

37 lines
1.4 KiB
Bash
Executable File

#!/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 "$@"