From 459bf195d81df5d51ea641502d696452d8e6b20d Mon Sep 17 00:00:00 2001 From: Archicratia Date: Tue, 3 Mar 2026 11:58:43 +0100 Subject: [PATCH] ci: fix proposer workflow (auto APP_DIR + guards) --- .gitea/workflows/proposer-apply-pr.yml | 64 +++++++++++++++----------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/.gitea/workflows/proposer-apply-pr.yml b/.gitea/workflows/proposer-apply-pr.yml index 6ba1693..8609ab1 100644 --- a/.gitea/workflows/proposer-apply-pr.yml +++ b/.gitea/workflows/proposer-apply-pr.yml @@ -33,7 +33,6 @@ jobs: git --version node --version npm --version - python3 --version || true - name: Derive context (event.json / workflow_dispatch) env: @@ -46,6 +45,7 @@ jobs: node --input-type=module - <<'NODE' > /tmp/proposer.env import fs from "node:fs"; + const ev = JSON.parse(fs.readFileSync(process.env.EVENT_JSON, "utf8")); const repoObj = ev?.repository || {}; @@ -108,6 +108,22 @@ jobs: echo "✅ context:" sed -n '1,120p' /tmp/proposer.env + - name: Detect app dir (repo-root vs ./site) + run: | + set -euo pipefail + source /tmp/proposer.env + + APP_DIR="." + if [[ -d "site" && -f "site/package.json" ]]; then + APP_DIR="site" + fi + + echo "APP_DIR=$APP_DIR" >> /tmp/proposer.env + echo "✅ APP_DIR=$APP_DIR" + ls -la "$APP_DIR" | sed -n '1,80p' + test -f "$APP_DIR/package.json" || { echo "❌ package.json missing in APP_DIR=$APP_DIR"; exit 1; } + test -d "$APP_DIR/scripts" || { echo "❌ scripts/ missing in APP_DIR=$APP_DIR"; exit 1; } + - name: Gate on label state/approved run: | set -euo pipefail @@ -218,20 +234,31 @@ jobs: git -c advice.detachedHead=false checkout -q FETCH_HEAD git log -1 --oneline - - name: Install deps (site/) + - name: NPM harden (reduce flakiness) + run: | + set -euo pipefail + source /tmp/proposer.env + [[ "${SKIP:-0}" != "1" ]] || exit 0 + cd "$APP_DIR" + npm config set fetch-retries 5 + npm config set fetch-retry-mintimeout 20000 + npm config set fetch-retry-maxtimeout 120000 + npm config set registry https://registry.npmjs.org + + - name: Install deps (APP_DIR) run: | set -euo pipefail source /tmp/proposer.env [[ "${SKIP:-0}" != "1" ]] || { echo "ℹ️ skipped"; exit 0; } - cd site + cd "$APP_DIR" npm ci --no-audit --no-fund - - name: Build dist baseline (site/) + - name: Build dist baseline (APP_DIR) run: | set -euo pipefail source /tmp/proposer.env [[ "${SKIP:-0}" != "1" ]] || { echo "ℹ️ skipped"; exit 0; } - cd site + cd "$APP_DIR" npm run build - name: Apply ticket (alias + commit) on bot branch @@ -257,10 +284,11 @@ jobs: export GITEA_OWNER="$OWNER" export GITEA_REPO="$REPO" + export FORGE_BASE="$API_BASE" # fallback utile pour apply-ticket si FORGE_API absent LOG="/tmp/proposer-apply.log" set +e - (cd site && node scripts/apply-ticket.mjs "$ISSUE_NUMBER" --alias --commit) >"$LOG" 2>&1 + (cd "$APP_DIR" && node scripts/apply-ticket.mjs "$ISSUE_NUMBER" --alias --commit) >"$LOG" 2>&1 RC=$? set -e @@ -308,26 +336,6 @@ jobs: "$API_BASE/api/v1/repos/$OWNER/$REPO/issues/$ISSUE_NUMBER/comments" \ --data-binary "$PAYLOAD" - - name: Comment issue if no-op - if: ${{ always() }} - env: - FORGE_TOKEN: ${{ secrets.FORGE_TOKEN }} - run: | - set -euo pipefail - source /tmp/proposer.env || true - [[ "${SKIP:-0}" != "1" ]] || exit 0 - [[ "${APPLY_RC:-0}" == "0" ]] || exit 0 - [[ "${NOOP:-0}" == "1" ]] || exit 0 - - MSG="ℹ️ Proposer Apply: rien à appliquer (déjà présent / dédupliqué)." - PAYLOAD="$(node --input-type=module -e 'console.log(JSON.stringify({body: process.argv[1]||""}))' "$MSG")" - - curl -fsS -X POST \ - -H "Authorization: token $FORGE_TOKEN" \ - -H "Content-Type: application/json" \ - "$API_BASE/api/v1/repos/$OWNER/$REPO/issues/$ISSUE_NUMBER/comments" \ - --data-binary "$PAYLOAD" - - name: Push bot branch if: ${{ always() }} env: @@ -339,6 +347,7 @@ jobs: [[ "${APPLY_RC:-0}" == "0" ]] || { echo "ℹ️ apply failed -> skip push"; exit 0; } [[ "${NOOP:-0}" == "0" ]] || { echo "ℹ️ no-op -> skip push"; exit 0; } + [[ -n "${BRANCH:-}" ]] || { echo "ℹ️ BRANCH unset -> skip push"; exit 0; } AUTH_URL="$(node --input-type=module -e ' const [clone, tok] = process.argv.slice(1); @@ -362,9 +371,10 @@ jobs: [[ "${APPLY_RC:-0}" == "0" ]] || exit 0 [[ "${NOOP:-0}" == "0" ]] || exit 0 + [[ -n "${BRANCH:-}" ]] || { echo "ℹ️ BRANCH unset -> skip PR"; exit 0; } PR_TITLE="proposer: apply ticket #${ISSUE_NUMBER}" - PR_BODY="PR auto depuis ticket #${ISSUE_NUMBER} (state/approved).\n\n- Branche: ${BRANCH}\n- Commit: ${END_SHA}\n\nMerge si CI OK." + PR_BODY="PR auto depuis ticket #${ISSUE_NUMBER} (state/approved).\n\n- Branche: ${BRANCH}\n- Commit: ${END_SHA:-unknown}\n\nMerge si CI OK." PR_PAYLOAD="$(node --input-type=module -e ' const [title, body, base, head] = process.argv.slice(1); -- 2.49.1