#!/bin/bash # Gitea PR 操作脚本 # 用法: # ./gitea-pr.sh list # 列出 PR # ./gitea-pr.sh create <head> # 创建 PR # ./gitea-pr.sh merge <pr-number> # 合并 PR set -e # 加载凭据 source ~/.config/devops/credentials.env REPO="Tools/new-ai-proj" ACTION="${1:-list}" case "$ACTION" in list) echo "=== 当前 Pull Requests ===" curl -s "$GITEA_URL/api/v1/repos/$REPO/pulls?state=open" \ -H "Authorization: token $GITEA_TOKEN" | \ python3 -c " import sys, json prs = json.load(sys.stdin) if not prs: print('没有开放的 PR') else: for pr in prs: print(f\"#{pr['number']} [{pr['state']}] {pr['title']}\") print(f\" {pr['head']['ref']} -> {pr['base']['ref']}\") print(f\" 作者: {pr['user']['login']}\") print() " ;; create) TITLE="$2" HEAD="$3" BASE="${4:-main}" if [ -z "$TITLE" ] || [ -z "$HEAD" ]; then echo "用法: $0 create <title> <head-branch> [base-branch]" exit 1 fi echo "创建 PR: $TITLE" echo "分支: $HEAD -> $BASE" curl -s -X POST "$GITEA_URL/api/v1/repos/$REPO/pulls" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"title\":\"$TITLE\",\"head\":\"$HEAD\",\"base\":\"$BASE\"}" | \ python3 -c " import sys, json pr = json.load(sys.stdin) if 'number' in pr: print(f\"PR 创建成功! #{pr['number']}\") print(f\"URL: {pr['html_url']}\") else: print(f\"创建失败: {pr.get('message', '未知错误')}\") " ;; merge) PR_NUM="$2" if [ -z "$PR_NUM" ]; then echo "用法: $0 merge <pr-number>" exit 1 fi echo "合并 PR #$PR_NUM..." curl -s -X POST "$GITEA_URL/api/v1/repos/$REPO/pulls/$PR_NUM/merge" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"Do":"merge"}' | \ python3 -c " import sys, json try: result = json.load(sys.stdin) if result: print(f\"结果: {result}\") else: print('PR 合并成功!') except: print('PR 合并成功!') " ;; *) echo "用法: $0 {list|create|merge}" echo " list - 列出所有开放的 PR" echo " create <title> <head> - 创建新 PR" echo " merge <pr-number> - 合并 PR" exit 1 ;; esac