diff --git a/.gitea/workflows/trigger-superpowers-sync.yml b/.gitea/workflows/trigger-superpowers-sync.yml index 572e1de..89cb308 100644 --- a/.gitea/workflows/trigger-superpowers-sync.yml +++ b/.gitea/workflows/trigger-superpowers-sync.yml @@ -10,70 +10,71 @@ concurrency: group: superpowers-trigger-${{ github.repository }}-${{ github.ref }} cancel-in-progress: true +env: + WORKSPACE_DIR: "/home/workspace" + SUPERPOWERS_BRANCH: "thirdparty/skill" + SUPERPOWERS_DIR: "superpowers" + SUPERPOWERS_LIST: "codex/skills/.sources/superpowers.list" + TARGET_BRANCH: "main" + jobs: trigger: - name: Dispatch main workflow + name: Run main sync script runs-on: ubuntu-22.04 steps: - - name: Dispatch sync workflow on main + - name: Prepare repo + run: | + echo "========================================" + echo "Prepare repo to WORKSPACE_DIR" + echo "========================================" + + REPO_NAME="${{ github.event.repository.name }}" + REPO_DIR="${{ env.WORKSPACE_DIR }}/$REPO_NAME" + TOKEN="${{ secrets.WORKFLOW }}" + if [ -n "$TOKEN" ]; then + REPO_URL="https://oauth2:${TOKEN}@${GITHUB_SERVER_URL#https://}/${{ github.repository }}.git" + else + REPO_URL="${GITHUB_SERVER_URL}/${{ github.repository }}.git" + fi + + if [ -d "$REPO_DIR" ]; then + if [ -d "$REPO_DIR/.git" ]; then + cd "$REPO_DIR" + git clean -fdx + git reset --hard + git fetch --all --tags --force --prune --prune-tags + else + rm -rf "$REPO_DIR" + fi + fi + + if [ ! -d "$REPO_DIR/.git" ]; then + mkdir -p "${{ env.WORKSPACE_DIR }}" + git clone "$REPO_URL" "$REPO_DIR" + cd "$REPO_DIR" + fi + + TARGET_SHA="${{ github.sha }}" + TARGET_REF="${{ github.ref }}" + if git cat-file -e "$TARGET_SHA^{commit}" 2>/dev/null; then + git checkout -f "$TARGET_SHA" + else + if [ -n "$TARGET_REF" ]; then + git fetch origin "$TARGET_REF" + git checkout -f FETCH_HEAD + else + git checkout -f "${{ github.ref_name }}" + fi + fi + + git config --global --add safe.directory "$REPO_DIR" + echo "REPO_DIR=$REPO_DIR" >> $GITHUB_ENV + + - name: Run main sync script shell: bash run: | set -euo pipefail - - TOKEN="${{ secrets.WORKFLOW }}" - if [ -z "$TOKEN" ]; then - echo "ERROR: WORKFLOW secret is required" >&2 - exit 1 - fi - - REPO_FULL="${{ github.repository }}" - WORKFLOW_FILE="sync-superpowers.yml" - WORKFLOW_PATH=".gitea/workflows/${WORKFLOW_FILE}" - - if [ -n "${GITHUB_API_URL:-}" ]; then - API_BASE="$GITHUB_API_URL" - elif [ -n "${GITEA_API_URL:-}" ]; then - API_BASE="$GITEA_API_URL" - else - API_BASE="${GITHUB_SERVER_URL}/api/v1" - fi - - payload='{"ref":"main"}' - tmp_resp="$(mktemp)" - - try_dispatch() { - local url="$1" - local code - code=$(curl -sS -o "$tmp_resp" -w "%{http_code}" -X POST \ - -H "Authorization: token ${TOKEN}" \ - -H "Content-Type: application/json" \ - -d "$payload" \ - "$url" || true) - - if [ "$code" -ge 200 ] && [ "$code" -lt 300 ]; then - echo "Dispatched: $url" - rm -f "$tmp_resp" - return 0 - fi - - return 1 - } - - urls=( - "${API_BASE}/repos/${REPO_FULL}/actions/workflows/${WORKFLOW_FILE}/dispatches" - "${API_BASE}/repos/${REPO_FULL}/actions/workflows/${WORKFLOW_PATH}/dispatches" - "${API_BASE}/repos/${REPO_FULL}/actions/workflows/${WORKFLOW_FILE}/dispatch" - "${API_BASE}/repos/${REPO_FULL}/actions/workflows/${WORKFLOW_PATH}/dispatch" - ) - - for url in "${urls[@]}"; do - if try_dispatch "$url"; then - exit 0 - fi - done - - echo "ERROR: failed to dispatch workflow" >&2 - cat "$tmp_resp" >&2 - rm -f "$tmp_resp" - exit 1 + cd "$REPO_DIR" + git checkout -f "$TARGET_BRANCH" + bash .gitea/ci/sync_superpowers.sh