62 lines
1.9 KiB
Bash
62 lines
1.9 KiB
Bash
#!/usr/bin/env bash
|
||
# git-pr.sh – Pull-Request via Gitea API erstellen und optional mergen
|
||
#
|
||
# Verwendung:
|
||
# bash .claude/scripts/git-pr.sh create <head> <base> "<title>" ["<body>"]
|
||
# bash .claude/scripts/git-pr.sh merge <pr_number> [squash|merge|rebase]
|
||
# bash .claude/scripts/git-pr.sh list [open|closed]
|
||
|
||
set -euo pipefail
|
||
|
||
REPO="Admin/gartenmanager"
|
||
API="https://tea.jr-family.de/api/v1"
|
||
|
||
get_token() {
|
||
git credential fill <<'EOF' | grep "^password=" | cut -d= -f2-
|
||
protocol=https
|
||
host=tea.jr-family.de
|
||
EOF
|
||
}
|
||
|
||
CMD="${1:-}"
|
||
|
||
case "$CMD" in
|
||
create)
|
||
HEAD="${2:?'head branch fehlt'}"
|
||
BASE="${3:?'base branch fehlt'}"
|
||
TITLE="${4:?'titel fehlt'}"
|
||
BODY="${5:-}"
|
||
TOKEN=$(get_token)
|
||
RESULT=$(curl -s -X POST "$API/repos/$REPO/pulls" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "Content-Type: application/json" \
|
||
-d "{\"head\":\"$HEAD\",\"base\":\"$BASE\",\"title\":\"$TITLE\",\"body\":\"$BODY\"}")
|
||
PR_NUM=$(echo "$RESULT" | python3 -c "import sys,json; r=json.load(sys.stdin); print(r.get('number','ERR: '+str(r.get('message',''))))")
|
||
echo "PR #$PR_NUM erstellt: $TITLE ($HEAD → $BASE)"
|
||
;;
|
||
|
||
merge)
|
||
PR_NUM="${2:?'PR-Nummer fehlt'}"
|
||
STYLE="${3:-squash}"
|
||
TOKEN=$(get_token)
|
||
curl -s -X POST "$API/repos/$REPO/pulls/$PR_NUM/merge" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "Content-Type: application/json" \
|
||
-d "{\"Do\":\"$STYLE\"}"
|
||
echo "PR #$PR_NUM gemergt ($STYLE)"
|
||
;;
|
||
|
||
list)
|
||
STATE="${2:-open}"
|
||
TOKEN=$(get_token)
|
||
curl -s "$API/repos/$REPO/pulls?state=$STATE&limit=20" \
|
||
-H "Authorization: Bearer $TOKEN" | \
|
||
python3 -c "import sys,json; [print(f\"#{r['number']} [{r['state']}] {r['title']} ({r['head']['label']} → {r['base']['label']})\") for r in json.load(sys.stdin)]"
|
||
;;
|
||
|
||
*)
|
||
echo "Verwendung: bash .claude/scripts/git-pr.sh [create|merge|list] ..."
|
||
exit 1
|
||
;;
|
||
esac
|