maestro/scripts/setup-repo.sh
2026-06-03 05:08:00 +00:00

114 lines
3.5 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
#
# Gitea adapter を使う場合に Webhook を登録するスクリプト
#
# 使い方:
# ./scripts/setup-repo.sh owner/repo
# ./scripts/setup-repo.sh owner/repo http://orchestrator-host:9877
#
# 環境変数:
# GITEA_URL Gitea の URLデフォルト: config.yaml から取得)
# GITEA_API_TOKEN Gitea API トークン(必須)
# GITEA_WEBHOOK_SECRET Webhook シークレット(必須)
# ORCHESTRATOR_URL Orchestrator の URL引数でも指定可
#
set -euo pipefail
REPO="${1:-}"
ORCHESTRATOR_URL="${2:-${ORCHESTRATOR_URL:-}}"
if [ -z "$REPO" ]; then
echo "Usage: $0 <owner/repo> [orchestrator-url]"
echo ""
echo "Examples:"
echo " $0 myorg/myrepo"
echo " $0 myorg/myrepo http://10.0.0.10:9877"
echo ""
echo "Environment variables:"
echo " GITEA_API_TOKEN (required) Gitea API token"
echo " GITEA_WEBHOOK_SECRET (required) Webhook secret"
echo " GITEA_URL Gitea URL (default: from config.yaml)"
echo " ORCHESTRATOR_URL Orchestrator URL (default: http://localhost:9876)"
exit 1
fi
# config.yaml から GITEA_URL を取得(未設定の場合)
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
if [ -z "${GITEA_URL:-}" ] && [ -f "$PROJECT_DIR/config.yaml" ]; then
GITEA_URL=$(grep -E '^\s*url:' "$PROJECT_DIR/config.yaml" | head -1 | sed 's/.*url:\s*//' | tr -d '"' | tr -d "'")
fi
GITEA_URL="${GITEA_URL:-https://localhost:3000}"
if [ -z "${GITEA_API_TOKEN:-}" ]; then
echo "Error: GITEA_API_TOKEN is not set"
exit 1
fi
if [ -z "${GITEA_WEBHOOK_SECRET:-}" ]; then
echo "Error: GITEA_WEBHOOK_SECRET is not set"
exit 1
fi
ORCHESTRATOR_URL="${ORCHESTRATOR_URL:-http://localhost:9876}"
WEBHOOK_URL="${ORCHESTRATOR_URL}/webhook"
echo "Setting up MAESTRO Gitea webhook..."
echo " Gitea: $GITEA_URL"
echo " Repository: $REPO"
echo " Webhook URL: $WEBHOOK_URL"
echo ""
# 既存の webhook を確認
EXISTING=$(curl -sf \
-H "Authorization: token ${GITEA_API_TOKEN}" \
"${GITEA_URL}/api/v1/repos/${REPO}/hooks" 2>/dev/null || echo "[]")
# 同じ URL の webhook が既にあるかチェック
if echo "$EXISTING" | python3 -c "
import sys, json
hooks = json.load(sys.stdin)
for h in hooks:
if h.get('config', {}).get('url', '') == '${WEBHOOK_URL}':
print(h['id'])
sys.exit(0)
sys.exit(1)
" 2>/dev/null; then
echo "Webhook already exists for this URL. Skipping creation."
exit 0
fi
# Webhook 作成
RESPONSE=$(curl -sf -X POST \
-H "Authorization: token ${GITEA_API_TOKEN}" \
-H "Content-Type: application/json" \
"${GITEA_URL}/api/v1/repos/${REPO}/hooks" \
-d "{
\"type\": \"gitea\",
\"active\": true,
\"events\": [\"issues\", \"issue_comment\"],
\"config\": {
\"url\": \"${WEBHOOK_URL}\",
\"content_type\": \"json\",
\"secret\": \"${GITEA_WEBHOOK_SECRET}\"
}
}")
HOOK_ID=$(echo "$RESPONSE" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])" 2>/dev/null || echo "unknown")
echo "Webhook created (ID: ${HOOK_ID})"
# ヘルスチェック
echo ""
echo -n "Checking orchestrator health... "
if curl -sf "${ORCHESTRATOR_URL}/health" > /dev/null 2>&1; then
echo "OK"
else
echo "WARN: orchestrator not reachable at ${ORCHESTRATOR_URL}"
echo " Make sure the orchestrator is running and accessible from Gitea."
fi
echo ""
echo "Done! Create an issue on ${GITEA_URL}/${REPO} to test."
echo "If you run in local mode, this script is not needed."