#!/usr/bin/env bash # # 为 refining/secrets 仓库配置 v3 CI 所需的 Variables # 参考: .gitea/workflows/secrets.yml # # 所需配置: # - vars.WEBHOOK_URL (可选) 飞书通知 # # 注意: # - Variables 的 value 字段为原始字符串,不要 base64。 # # 用法: # 1. 从 ~/.config/gitea/config.env 读取 GITEA_URL, GITEA_TOKEN, GITEA_WEBHOOK_URL # 2. 或通过环境变量覆盖: GITEA_TOKEN, WEBHOOK_URL # set -e OWNER="refining" REPO="secrets" # 解析参数 while [[ $# -gt 0 ]]; do case $1 in --from-secrets) echo "❌ --from-secrets 尚未实现,请使用 ~/.config/gitea/config.env 或环境变量" >&2 exit 1 ;; -h|--help) echo "用法: $0" echo "" echo "从 ~/.config/gitea/config.env 读取,或由环境变量覆盖。" echo "" echo "环境变量:" echo " GITEA_URL Gitea 实例根地址(可误带尾部 /api/v1,脚本会规范化后拼接)" echo " GITEA_TOKEN Gitea PAT" echo " WEBHOOK_URL 或 GITEA_WEBHOOK_URL → vars.WEBHOOK_URL(可选)" exit 0 ;; *) echo "❌ 未知参数: $1" >&2 echo " 使用 $0 --help 查看用法" >&2 exit 1 ;; esac done for cmd in curl jq; do if ! command -v "$cmd" &>/dev/null; then echo "❌ 未找到命令: $cmd(本脚本依赖 curl 与 jq)" >&2 exit 1 fi done # 加载配置 load_config() { local config="$HOME/.config/gitea/config.env" if [[ -f "$config" ]]; then # shellcheck source=/dev/null source "$config" fi } load_config # 优先使用环境变量 if [[ -n "$GITEA_TOKEN" && -z "$GITEA_URL" ]]; then echo "❌ 请设置 GITEA_URL (或确保 config.env 中有)" >&2 exit 1 fi if [[ -z "$GITEA_URL" ]]; then echo "❌ GITEA_URL 未配置" echo " 请创建 ~/.config/gitea/config.env 或设置环境变量" >&2 exit 1 fi # 规范为实例根 URL:去尾部斜杠,并去掉重复的 .../api/v1 后缀(避免拼成 .../api/v1/api/v1) GITEA_URL="${GITEA_URL%/}" while [[ "$GITEA_URL" == */api/v1 ]]; do GITEA_URL="${GITEA_URL%/api/v1}" GITEA_URL="${GITEA_URL%/}" done API_BASE="${GITEA_URL}/api/v1" if [[ -z "$GITEA_TOKEN" ]]; then echo "❌ GITEA_TOKEN 未配置" echo " 在 ~/.config/gitea/config.env 中设置,或 export GITEA_TOKEN=xxx" >&2 echo " Token 需具备 repo 写权限" >&2 exit 1 fi echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "配置 Gitea Actions: $OWNER/$REPO" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" echo "1. 创建/更新 Variable: WEBHOOK_URL(可选)" WEBHOOK_VALUE="${WEBHOOK_URL:-$GITEA_WEBHOOK_URL}" if [[ -n "$WEBHOOK_VALUE" ]]; then var_payload=$(jq -n --arg v "$WEBHOOK_VALUE" '{value: $v}') resp=$(curl -s -w "\n%{http_code}" -X POST \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "$var_payload" \ "${API_BASE}/repos/${OWNER}/${REPO}/actions/variables/WEBHOOK_URL") http_code=$(echo "$resp" | tail -n1) body=$(echo "$resp" | sed '$d') if [[ "$http_code" == "200" || "$http_code" == "201" || "$http_code" == "204" ]]; then echo " ✓ WEBHOOK_URL 已创建/更新" elif [[ "$http_code" == "409" ]]; then # 变量已存在,用 PUT 更新 resp=$(curl -s -w "\n%{http_code}" -X PUT \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "$var_payload" \ "${API_BASE}/repos/${OWNER}/${REPO}/actions/variables/WEBHOOK_URL") http_code=$(echo "$resp" | tail -n1) if [[ "$http_code" == "200" || "$http_code" == "204" ]]; then echo " ✓ WEBHOOK_URL 已更新" else echo " ⚠ 更新失败 (HTTP $http_code)" >&2 fi else echo " ⚠ 失败 (HTTP $http_code),飞书通知将不可用" >&2 fi else echo " 跳过 WEBHOOK_URL(未配置 GITEA_WEBHOOK_URL 或 WEBHOOK_URL)" echo " 飞书通知将不可用;如需可后续在仓库 Settings → Variables 中添加" fi echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "✓ 配置完成" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" echo "Workflow 将使用:" echo " - vars.WEBHOOK_URL 发送飞书通知(如已配置)" echo "" echo "推送代码触发构建:" echo " git push origin main" echo ""