API returns { "resources": [...] } not bare arrays, so .[].name
produced no output. Use .[][].name to unwrap the outer object first.
Also auto-load .env in pr.sh.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
56 lines
1.4 KiB
Bash
Executable File
56 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Usage: bash pr.sh "PR title" "PR body"
|
|
# Loads GITEA_TOKEN from .env automatically
|
|
|
|
set -euo pipefail
|
|
|
|
# Load .env if GITEA_TOKEN not already exported
|
|
if [ -z "${GITEA_TOKEN:-}" ] && [ -f .env ]; then
|
|
set -a
|
|
source .env
|
|
set +a
|
|
fi
|
|
|
|
GITEA_URL="${GITEA_URL:-http://10.0.0.194:3012}"
|
|
REPO="${GITEA_OWNER:-michal}/mcpctl"
|
|
|
|
TITLE="${1:?Usage: pr.sh <title> [body]}"
|
|
BODY="${2:-}"
|
|
BASE="${3:-main}"
|
|
HEAD=$(git rev-parse --abbrev-ref HEAD)
|
|
|
|
if [ "$HEAD" = "$BASE" ]; then
|
|
echo "Error: already on $BASE, switch to a feature branch first" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${GITEA_TOKEN:-}" ]; then
|
|
echo "Error: GITEA_TOKEN not set and .env not found" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Push if needed
|
|
if ! git rev-parse --verify "origin/$HEAD" &>/dev/null; then
|
|
git push -u origin "$HEAD"
|
|
else
|
|
git push
|
|
fi
|
|
|
|
# Create PR
|
|
RESPONSE=$(curl -s -X POST "$GITEA_URL/api/v1/repos/$REPO/pulls" \
|
|
-H "Authorization: token $GITEA_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d "$(jq -n --arg t "$TITLE" --arg b "$BODY" --arg h "$HEAD" --arg base "$BASE" \
|
|
'{title: $t, body: $b, head: $h, base: $base}')")
|
|
|
|
PR_NUM=$(echo "$RESPONSE" | jq -r '.number // empty')
|
|
PR_URL=$(echo "$RESPONSE" | jq -r '.html_url // empty')
|
|
|
|
if [ -z "$PR_NUM" ]; then
|
|
echo "Error creating PR:" >&2
|
|
echo "$RESPONSE" | jq . 2>/dev/null || echo "$RESPONSE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "PR #$PR_NUM: https://mysources.co.uk/$REPO/pulls/$PR_NUM"
|