From 47106ff281801b40937f2e72e809d14edf5c8987 Mon Sep 17 00:00:00 2001 From: millianlmx Date: Mon, 20 Jul 2026 09:21:28 +0200 Subject: [PATCH] fix(ci): indent python3 -c body so YAML block scalar parses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The python3 inline script in wait-approval was written at column 0 (lines 257-283), but YAML block scalars require content to be more indented than the parent key. YAML exited the run: | block at the first column-0 line ("import json, re, sys") and tried to parse the python as YAML, failing with "could not find expected :" at line 257 — which prevented pr-iphone-deploy.yml from running at all (no run was ever created for PRs that touched only the workflow file). Fix: switch to python3 -c with the body indented to sit inside the run: | block scalar. Verified locally: - yaml.safe_load parses the workflow cleanly (jobs: changes, build-deploy, wait-approval). - The extracted python, run exactly as act will execute it, returns: bot-only -> PENDING (was self-merging before) bot + reviewer LGTM -> LGTM (squash-merge still fires) bot + reviewer KO -> KO (block still fires) --- .github/workflows/pr-iphone-deploy.yml | 55 +++++++++++++------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/.github/workflows/pr-iphone-deploy.yml b/.github/workflows/pr-iphone-deploy.yml index 65f4802..ce991bc 100644 --- a/.github/workflows/pr-iphone-deploy.yml +++ b/.github/workflows/pr-iphone-deploy.yml @@ -253,34 +253,33 @@ jobs: COMMENTS=$(curl -s -H "Authorization: token ${GT_TOKEN}" \ "${API}/issues/${PR}/comments?limit=50&page=1") - DECISION=$(python3 - "$COMMENTS" <<'PY' -import json, re, sys -MARKER = "" -try: - comments = json.loads(sys.argv[1] or "[]") -except Exception: - comments = [] -lgtm = re.compile(r"\bLGTM\b", re.IGNORECASE) -ko = re.compile(r"\bKO\b", re.IGNORECASE) -hit_lgtm = hit_ko = False -for c in comments: - body = c.get("body") or "" - if MARKER in body: - # Skip the bot's own "Ready to test" comment — its body mentions - # LGTM/KO as instructions and would otherwise self-trigger. - continue - if ko.search(body): - hit_ko = True - if lgtm.search(body): - hit_lgtm = True -if hit_ko: - print("KO") -elif hit_lgtm: - print("LGTM") -else: - print("PENDING") -PY -) + DECISION=$(python3 -c ' + import json, re, sys + MARKER = "" + try: + comments = json.loads(sys.argv[1] or "[]") + except Exception: + comments = [] + lgtm = re.compile(r"\bLGTM\b", re.IGNORECASE) + ko = re.compile(r"\bKO\b", re.IGNORECASE) + hit_lgtm = hit_ko = False + for c in comments: + body = c.get("body") or "" + if MARKER in body: + # Skip bot comments — their body contains LGTM/KO as reviewer + # instructions and would otherwise self-trigger a merge. + continue + if ko.search(body): + hit_ko = True + if lgtm.search(body): + hit_lgtm = True + if hit_ko: + print("KO") + elif hit_lgtm: + print("LGTM") + else: + print("PENDING") + ' "$COMMENTS") case "$DECISION" in LGTM)