fix(ci): pr-iphone-deploy — cache, secrets, LGTM regex, concurrency, watch build, scope #12

Merged
millianlmx merged 6 commits from fix/ci-pr-iphone-deploy into main 2026-07-19 20:59:33 +02:00
Owner

Fix pr-iphone-deploy.yml — cache, secrets, LGTM handling, watch build, scope

Review of the existing pr-iphone-deploy.yml surfaced a number of bugs and doc/code mismatches. This PR fixes them and aligns AGENTS.md §5/§7/§8 with the real behaviour.

⚠️ Do NOT auto-merge this PR via the workflow

This PR changes the merge logic itself (squash-merge, LGTM regex, concurrency). A bug here could block all future merges. Merge this PR manually from the Gitea UI, then validate the new flow on a throwaway follow-up PR before relying on auto-merge.


Summary of changes

File Change
.github/workflows/pr-iphone-deploy.yml 10 workflow fixes + path filter (+66 / −20)
tabatago-swift/project.yml Add TabataGoWatch + TabataGoWatchWidget to the scheme (+2)
AGENTS.md Rewrite §5/§7/§8 to match reality (+29 / −15)

Commits

  1. fix(ci): pr-iphone-deploy — cache, secrets, LGTM regex, concurrency, squash — all 10 CI fixes
  2. fix(project.yml): build watch targets in TabataGo scheme
  3. docs(agents): align CI docs (§5/§7/§8) with real workflow behavior
  4. fix(ci): only run pr-iphone-deploy when tabatago-swift or the workflow changes

The 10 workflow fixes

Cache & build hygiene

1. Stop deleting the SPM cache we claim to keep
The clean step ran rm -rf build/, which wiped build/spm-cache — exactly the RevenueCat cache (≈1.1 GiB) the comments and AGENTS.md §5/§8 claimed was preserved. Every CI run re-cloned RevenueCat (5+ min, random sandbox failures). Now only build/derived is deleted; the cache is finally actually preserved.

2. Stop nuking the global Xcode cache
rm -rf ~/Library/Caches/com.apple.dt.Xcode slowed every subsequent build. Removed. DerivedData/* and ModuleCache.noindex deletion stay (per-build hygiene + stale .pcm fix).

3. Drop || true on brew install
If brew was down, the install "succeeded" silently and later steps failed with confusing "command not found". Now it fails loudly at the source.

4. Bump build-deploy timeout 20m → 30m
Cold builds (first run after this change, or after cache eviction) need to re-clone RevenueCat. 30m gives room without being excessive.

Secrets

5. Write Config/Secrets.xcconfig from Gitea secrets
New step before xcodegen generate materializes the xcconfig file from the SUPABASE_URL, SUPABASE_ANON_KEY, REVENUECAT_API_KEY, POSTHOG_API_KEY secrets. Preflight fails loudly if a required secret is missing (so we never ship an .app that silently can't reach Supabase/RevenueCat). Info.plist already reads the values via $(VAR) and project.yml wires the xcconfig to Debug+Release — no other build change needed.

Heredoc body is at column 0 (verified with od -c) — xcconfig keys are whitespace-sensitive.

LGTM / KO handling

6. Match LGTM/KO anywhere in the comment body
Old grep '"body": *"LGTM"' only matched when LGTM was the first token, so "Tested, LGTM!" was silently ignored. New regex:

grep -qiE '"body":[[:space:]]*"[^"]*\bLGTM\b'
grep -qiE '"body":[[:space:]]*"[^"]*\bKO\b'

Word boundaries prevent false positives — verified that KOM, LGTMX, OK do not match.

7. Re-fetch all comments each poll (not since_id)
since_id filtering made edits invisible (a reviewer changing "KO" → "LGTM" wouldn't be seen). Now re-fetches all comments every 30s cycle. Negligible cost for PRs with <50 comments.

8. Squash-merge instead of merge commit
{"Do":"merge"}{"Do":"squash"}. Matches the clean linear history already on main (e.g. 32ccbcc chore(release): 1.0.0).

Workflow structure

9. Add concurrency: block (per-PR, cancel-in-progress)
Every push to a PR previously started a fresh build-deploy + wait-approval pipeline with nothing cancelling the previous one → stacked pipelines, wasted runner time, double-merge risk. Now group: pr-iphone-deploy-<PR#> with cancel-in-progress: true cancels superseded runs. Different PRs still run in parallel.

10. Remove the no-op permissions: block
All mutations (comments, merge) go through the Gitea API with PR_API_TOKEN, never the runner's native GITHUB_TOKEN. The permissions: contents: write / pull-requests: write block only scoped the native token, so it had no effect here. Removed with an explanatory comment.


Path filter (scope the trigger)

on:
  pull_request:
    branches: [main]
    types: [opened, synchronize, reopened]
    paths:
      - 'tabatago-swift/**'
      - '.github/workflows/pr-iphone-deploy.yml'

The workflow now only runs when the PR touches the Swift app (tabatago-swift/**) or the workflow itself. Docs-only / admin-web/ / youtube-worker/ / supabase/ / AGENTS.md / root-config PRs skip the macOS runner entirely — no point rebuilding and deploying an unchanged .app.

The workflow file is included in paths: so a PR that only edits the workflow logic still triggers it (which is why this branch's own PR runs).


Scheme: build watch targets in CI

The TabataGo scheme previously listed only TabataGo + TabataGoWidget (iOS), so xcodebuild -scheme TabataGo never compiled the watchOS app in CI. Added TabataGoWatch + TabataGoWatchWidget to the build targets.

Verified locally with xcodegen generate — the generated TabataGo.xcscheme now lists all 4 BlueprintNames: TabataGo, TabataGoWatch, TabataGoWatchWidget, TabataGoWidget.

⚠️ Risk: if the watch target has latent build issues (never compiled in CI before), this will surface them on the next PR that touches tabatago-swift/. That's desirable — catch before merge, not in the field — but the first such PR may need watch-side fixes.

Note: TabataGoWidget is a real iOS widget target (defined at project.yml:165, app-extension/iOS), not a phantom — the initial review that flagged it as non-existent was wrong on that point. The actual gap was the missing watchOS targets. This is documented in the commit message and AGENTS.md so future agents don't reintroduce the confusion.


Docs: AGENTS.md §5 / §7 / §8

Brought the canon doc in line with the corrected workflow:

  • §5 Clean step: "GARDE build/spm-cache" (was ../build/spm-cache), explicit warning never to rm -rf build/, note that the global Xcode cache is spared.
  • §5 new step: Document the Secrets.xcconfig write-from-secrets step.
  • §5 scheme: Lists all 4 targets; clarifies TabataGoWidget (iOS) vs TabataGoWatchWidget (watchOS).
  • §5 wait-approval: Re-fetches all comments, \bLGTM\b/\bKO\b regex, squash-merge.
  • §5 Secrets table: Replace the false "Injectés via Config/Secrets.xcconfig → Info.plist" with the real flow. Add a historical-exposure warning (Secrets.xcconfig was committed before the gitignore rule; key rotation recommended).
  • §5 Pitfalls + §8 anti-patterns: Added rows for concurrency block, LGTM regex, squash-merge, comment edits, no-op permissions: block, Xcode global cache.
  • §7 rule #9: Expanded with the CI-writes-file flow.

Verification done locally

  • python3 -c "import yaml; yaml.safe_load(...)" parses both .github/workflows/pr-iphone-deploy.yml and tabatago-swift/project.yml.
  • paths: correctly nested under pull_request: (same level as branches/types).
  • xcodegen generate produces a scheme with all 4 BlueprintNames.
  • LGTM/KO regex: 9/9 realistic payloads pass (bare LGTM, "Tested, LGTM!", lgtm, KOM✗, OK✗, LGTMX✗). The one "failure" was an artificial "body" : "..." spacing that Gitea's Go JSON serializer never produces.
  • Heredoc output at column 0 (verified with od -c) — xcconfig-safe.
  • Preflight correctly catches a missing required secret; allows POSTHOG_API_KEY empty.

Out of scope

  • No change to Config/Secrets.xcconfig contents — it stays on disk for local dev; CI overwrites it at build time.
  • Historical secret exposure in git history (commit 89cca25) is documented but not addressed here. Rotating the Supabase anon key and RevenueCat key is a separate ops task only the owner can do.
  • No watch-source code changes — if the watch target fails to build after the scheme fix, that's a follow-up, not part of this PR.
  • TabataGo.xcodeproj is not committed (not git-tracked; XcodeGen regenerates it locally per AGENTS.md rule #8).

Reviewer checklist

  • Confirm the 4 Gitea secrets exist: SUPABASE_URL, SUPABASE_ANON_KEY, REVENUECAT_API_KEY, POSTHOG_API_KEY (POSTHOG can be empty).
  • Sanity-check the LGTM regex against a sample Gitea comment payload.
  • Acknowledge the watch-build risk (first tabatago-swift/ PR after merge may surface watch issues).
  • Merge manually from the Gitea UI — do not LGTM-merge via the workflow.
# Fix `pr-iphone-deploy.yml` — cache, secrets, LGTM handling, watch build, scope Review of the existing `pr-iphone-deploy.yml` surfaced a number of bugs and doc/code mismatches. This PR fixes them and aligns `AGENTS.md` §5/§7/§8 with the real behaviour. ## ⚠️ Do NOT auto-merge this PR via the workflow **This PR changes the merge logic itself** (squash-merge, LGTM regex, concurrency). A bug here could block all future merges. **Merge this PR manually from the Gitea UI**, then validate the new flow on a throwaway follow-up PR before relying on auto-merge. --- ## Summary of changes | File | Change | |---|---| | `.github/workflows/pr-iphone-deploy.yml` | 10 workflow fixes + path filter (+66 / −20) | | `tabatago-swift/project.yml` | Add `TabataGoWatch` + `TabataGoWatchWidget` to the scheme (+2) | | `AGENTS.md` | Rewrite §5/§7/§8 to match reality (+29 / −15) | ## Commits 1. `fix(ci): pr-iphone-deploy — cache, secrets, LGTM regex, concurrency, squash` — all 10 CI fixes 2. `fix(project.yml): build watch targets in TabataGo scheme` 3. `docs(agents): align CI docs (§5/§7/§8) with real workflow behavior` 4. `fix(ci): only run pr-iphone-deploy when tabatago-swift or the workflow changes` --- ## The 10 workflow fixes ### Cache & build hygiene **1. Stop deleting the SPM cache we claim to keep** The clean step ran `rm -rf build/`, which wiped `build/spm-cache` — exactly the RevenueCat cache (≈1.1 GiB) the comments and AGENTS.md §5/§8 claimed was preserved. Every CI run re-cloned RevenueCat (5+ min, random sandbox failures). Now only `build/derived` is deleted; the cache is finally actually preserved. **2. Stop nuking the global Xcode cache** `rm -rf ~/Library/Caches/com.apple.dt.Xcode` slowed every subsequent build. Removed. `DerivedData/*` and `ModuleCache.noindex` deletion stay (per-build hygiene + stale `.pcm` fix). **3. Drop `|| true` on `brew install`** If brew was down, the install "succeeded" silently and later steps failed with confusing "command not found". Now it fails loudly at the source. **4. Bump build-deploy timeout 20m → 30m** Cold builds (first run after this change, or after cache eviction) need to re-clone RevenueCat. 30m gives room without being excessive. ### Secrets **5. Write `Config/Secrets.xcconfig` from Gitea secrets** New step before `xcodegen generate` materializes the xcconfig file from the `SUPABASE_URL`, `SUPABASE_ANON_KEY`, `REVENUECAT_API_KEY`, `POSTHOG_API_KEY` secrets. Preflight fails loudly if a required secret is missing (so we never ship an `.app` that silently can't reach Supabase/RevenueCat). `Info.plist` already reads the values via `$(VAR)` and `project.yml` wires the xcconfig to Debug+Release — no other build change needed. Heredoc body is at column 0 (verified with `od -c`) — xcconfig keys are whitespace-sensitive. ### LGTM / KO handling **6. Match LGTM/KO anywhere in the comment body** Old grep `'"body": *"LGTM"'` only matched when LGTM was the first token, so "Tested, LGTM!" was silently ignored. New regex: ```bash grep -qiE '"body":[[:space:]]*"[^"]*\bLGTM\b' grep -qiE '"body":[[:space:]]*"[^"]*\bKO\b' ``` Word boundaries prevent false positives — verified that `KOM`, `LGTMX`, `OK` do **not** match. **7. Re-fetch all comments each poll (not `since_id`)** `since_id` filtering made edits invisible (a reviewer changing "KO" → "LGTM" wouldn't be seen). Now re-fetches all comments every 30s cycle. Negligible cost for PRs with <50 comments. **8. Squash-merge instead of merge commit** `{"Do":"merge"}` → `{"Do":"squash"}`. Matches the clean linear history already on `main` (e.g. `32ccbcc chore(release): 1.0.0`). ### Workflow structure **9. Add `concurrency:` block (per-PR, cancel-in-progress)** Every push to a PR previously started a fresh `build-deploy` + `wait-approval` pipeline with nothing cancelling the previous one → stacked pipelines, wasted runner time, double-merge risk. Now `group: pr-iphone-deploy-<PR#>` with `cancel-in-progress: true` cancels superseded runs. Different PRs still run in parallel. **10. Remove the no-op `permissions:` block** All mutations (comments, merge) go through the Gitea API with `PR_API_TOKEN`, never the runner's native `GITHUB_TOKEN`. The `permissions: contents: write / pull-requests: write` block only scoped the native token, so it had no effect here. Removed with an explanatory comment. --- ## Path filter (scope the trigger) ```yaml on: pull_request: branches: [main] types: [opened, synchronize, reopened] paths: - 'tabatago-swift/**' - '.github/workflows/pr-iphone-deploy.yml' ``` The workflow now only runs when the PR touches the Swift app (`tabatago-swift/**`) or the workflow itself. Docs-only / `admin-web/` / `youtube-worker/` / `supabase/` / `AGENTS.md` / root-config PRs skip the macOS runner entirely — no point rebuilding and deploying an unchanged `.app`. The workflow file is included in `paths:` so a PR that *only* edits the workflow logic still triggers it (which is why this branch's own PR runs). --- ## Scheme: build watch targets in CI The `TabataGo` scheme previously listed only `TabataGo` + `TabataGoWidget` (iOS), so `xcodebuild -scheme TabataGo` never compiled the watchOS app in CI. Added `TabataGoWatch` + `TabataGoWatchWidget` to the build targets. Verified locally with `xcodegen generate` — the generated `TabataGo.xcscheme` now lists all 4 `BlueprintName`s: `TabataGo`, `TabataGoWatch`, `TabataGoWatchWidget`, `TabataGoWidget`. > ⚠️ **Risk:** if the watch target has latent build issues (never compiled in CI before), this will surface them on the next PR that touches `tabatago-swift/`. That's desirable — catch before merge, not in the field — but the first such PR may need watch-side fixes. > Note: `TabataGoWidget` is a **real iOS widget target** (defined at `project.yml:165`, `app-extension`/`iOS`), not a phantom — the initial review that flagged it as non-existent was wrong on that point. The actual gap was the missing watchOS targets. This is documented in the commit message and AGENTS.md so future agents don't reintroduce the confusion. --- ## Docs: AGENTS.md §5 / §7 / §8 Brought the canon doc in line with the corrected workflow: - **§5 Clean step:** "`GARDE build/spm-cache`" (was `../build/spm-cache`), explicit warning never to `rm -rf build/`, note that the global Xcode cache is spared. - **§5 new step:** Document the `Secrets.xcconfig` write-from-secrets step. - **§5 scheme:** Lists all 4 targets; clarifies `TabataGoWidget` (iOS) vs `TabataGoWatchWidget` (watchOS). - **§5 wait-approval:** Re-fetches all comments, `\bLGTM\b`/`\bKO\b` regex, squash-merge. - **§5 Secrets table:** Replace the false "Injectés via `Config/Secrets.xcconfig` → Info.plist" with the real flow. Add a historical-exposure warning (`Secrets.xcconfig` was committed before the gitignore rule; **key rotation recommended**). - **§5 Pitfalls + §8 anti-patterns:** Added rows for concurrency block, LGTM regex, squash-merge, comment edits, no-op `permissions:` block, Xcode global cache. - **§7 rule #9:** Expanded with the CI-writes-file flow. --- ## Verification done locally - ✅ `python3 -c "import yaml; yaml.safe_load(...)"` parses both `.github/workflows/pr-iphone-deploy.yml` and `tabatago-swift/project.yml`. - ✅ `paths:` correctly nested under `pull_request:` (same level as `branches`/`types`). - ✅ `xcodegen generate` produces a scheme with all 4 `BlueprintName`s. - ✅ LGTM/KO regex: 9/9 realistic payloads pass (bare LGTM, "Tested, LGTM!", `lgtm`, KOM✗, OK✗, LGTMX✗). The one "failure" was an artificial `"body" : "..."` spacing that Gitea's Go JSON serializer never produces. - ✅ Heredoc output at column 0 (verified with `od -c`) — xcconfig-safe. - ✅ Preflight correctly catches a missing required secret; allows `POSTHOG_API_KEY` empty. --- ## Out of scope - **No change to `Config/Secrets.xcconfig` contents** — it stays on disk for local dev; CI overwrites it at build time. - **Historical secret exposure** in git history (commit `89cca25`) is documented but **not** addressed here. Rotating the Supabase anon key and RevenueCat key is a separate ops task only the owner can do. - **No watch-source code changes** — if the watch target fails to build after the scheme fix, that's a follow-up, not part of this PR. - **`TabataGo.xcodeproj` is not committed** (not git-tracked; XcodeGen regenerates it locally per AGENTS.md rule #8). ## Reviewer checklist - [x] Confirm the 4 Gitea secrets exist: `SUPABASE_URL`, `SUPABASE_ANON_KEY`, `REVENUECAT_API_KEY`, `POSTHOG_API_KEY` (POSTHOG can be empty). - [x] Sanity-check the LGTM regex against a sample Gitea comment payload. - [x] Acknowledge the watch-build risk (first `tabatago-swift/` PR after merge may surface watch issues). - [ ] **Merge manually from the Gitea UI** — do not LGTM-merge via the workflow.
millianlmx added 4 commits 2026-07-19 20:34:49 +02:00
10 fixes to .github/workflows/pr-iphone-deploy.yml:

Cache & build hygiene:
- Stop deleting build/spm-cache (was wiped by 'rm -rf build/'); clean only
  build/derived. RevenueCat (~1.1 GiB) is finally actually preserved.
- Stop nuking ~/Library/Caches/com.apple.dt.Xcode (slows every next build).
- Drop '|| true' on brew install — fail loudly if brew is down.
- Bump build-deploy timeout 20m → 30m for cold builds.

Secrets:
- New step writes Config/Secrets.xcconfig from Gitea secrets (SUPABASE_URL,
  SUPABASE_ANON_KEY, REVENUECAT_API_KEY, POSTHOG_API_KEY) before xcodegen.
  Preflight fails loud if a required secret is missing. Heredoc body at
  column 0 (xcconfig keys are whitespace-sensitive).

LGTM/KO handling:
- Regex now matches anywhere in body with word boundary: \bLGTM\b / \bKO\b.
  'Tested, LGTM!' counts; 'KOM' / 'LGTMX' / 'OK' do not.
- Re-fetch ALL comments each poll (not since_id) to catch edits.
- Squash-merge ({"Do":"squash"}) instead of merge commit.

Workflow structure:
- Add concurrency block (per-PR, cancel-in-progress) — prevents double-merge
  and stacked pipelines on successive pushes.
- Remove no-op 'permissions:' block (all mutations go via Gitea API with
  PR_API_TOKEN, native GITHUB_TOKEN is never used).
The TabataGo scheme only listed TabataGo + TabataGoWidget (iOS), so
xcodebuild -scheme TabataGo never compiled the watchOS app in CI. Add
TabataGoWatch + TabataGoWatchWidget to the build targets so watch-side
breakage is caught before deploy.

Note: TabataGoWidget is a real iOS widget target (defined at project.yml
line 165, app-extension/iOS), NOT a phantom — the prior review was wrong
on that point. The real gap was the missing watch targets.

Embed deps were already correct (TabataGo embeds TabataGoWatch, which
embeds TabataGoWatchWidget). Verified locally with xcodegen 2.45.4:
the generated xcscheme now lists all 4 BlueprintNames.

⚠️ Risk: if the watch target has latent build issues (never compiled in
CI before), this will surface them on the next PR. Desirable — catch
before merge, not in the field.
Rewrite AGENTS.md to match the corrected pr-iphone-deploy.yml:

§5 Workflow:
- Clean step: 'GARDE build/spm-cache' (not ../build/spm-cache), explicit
  warning never to 'rm -rf build/', note that Xcode global cache is spared.
- New step 5: write Secrets.xcconfig from Gitea secrets before xcodegen.
- Scheme lists 4 targets (TabataGo, TabataGoWidget, TabataGoWatch,
  TabataGoWatchWidget) — clarify TabataGoWidget is iOS, not watchOS.
- wait-approval: re-fetches all comments each cycle, regex \bLGTM\b/\bKO\b
  anywhere in body, squash-merge.
- Document concurrency block and timeouts.

§5 Secrets table:
- Replace false 'Injectés via Config/Secrets.xcconfig → Info.plist' with
  the real flow (CI writes file from secrets, Info.plist reads $(VAR)).
- Add historical-exposure warning: Secrets.xcconfig was committed before
  the gitignore rule; key rotation recommended.

§5 Pitfalls + §8 anti-patterns:
- 'rm -rf build/' (not just 'rm -rf cache SPM').
- Don't nuke ~/Library/Caches/com.apple.dt.Xcode.
- permissions: block is intentionally absent (no-op under Gitea API).
- Don't remove concurrency block.
- Don't anchor LGTM grep to body start.
- {"Do":"squash"} not {"Do":"merge"}.
- Scheme must list all 4 targets.

§7 rule #9: expanded with the CI-writes-file flow.
fix(ci): only run pr-iphone-deploy when tabatago-swift or the workflow changes
Some checks failed
CI / Detect Changes (pull_request) Successful in 3s
CI / YouTube Worker (pull_request) Has been skipped
CI / Deploy (pull_request) Has been skipped
PR → Build → WiFi/USB Deploy → LGTM / Build & Deploy to iPhone (WiFi/USB) (pull_request) Failing after 14s
PR → Build → WiFi/USB Deploy → LGTM / Wait for LGTM comment (pull_request) Has been skipped
244270488a
Add a paths: filter to the pull_request trigger so the iOS build+deploy
only fires when the PR actually touches:
  - tabatago-swift/**   (the iOS/watchOS app source)
  - .github/workflows/pr-iphone-deploy.yml  (this workflow itself)

PRs touching only AGENTS.md, admin-web/, youtube-worker/, supabase/,
docs/, or root config no longer spin up the macOS runner — no point
rebuilding and deploying an unchanged .app.

Including the workflow file itself in paths: ensures a PR that only
edits the workflow logic still triggers it (so this branch's own PR
will run to validate the changes).
millianlmx added 1 commit 2026-07-19 20:49:41 +02:00
fix(ci): run brew under ARM + drop ios-deploy, use devicectl only
Some checks failed
CI / Detect Changes (pull_request) Successful in 4s
CI / YouTube Worker (pull_request) Has been skipped
CI / Deploy (pull_request) Has been skipped
PR → Build → devicectl Deploy → LGTM / Build & Deploy to iPhone (devicectl) (pull_request) Failing after 30s
PR → Build → devicectl Deploy → LGTM / Wait for LGTM comment (pull_request) Has been skipped
437ec130fe
Two related fixes to the Install tools / Deploy steps:

1. Rosetta/ARM-prefix conflict (unblocks run #142 failure)
   Run #142 failed at 'brew install':
     Cannot install under Rosetta 2 in ARM default prefix (/opt/homebrew)!
   The act_runner shell runs under Rosetta 2 on Apple Silicon, but Homebrew
   is installed natively in /opt/homebrew (ARM prefix). Brew refuses to mix
   architectures and exits 1 — surfaced now because xcodegen/node registered
   as outdated and brew tried to upgrade them.
   Prefix the brew call with 'arch -arm64' (brew's own suggested workaround)
   so the subprocess runs natively regardless of the parent shell's arch.

2. Drop ios-deploy, use xcrun devicectl only
   The deploy step previously tried devicectl (WiFi) first, then fell back
   to ios-deploy (USB). devicectl handles both network and wired discovery
   natively, so the separate USB-fallback tool is unnecessary — removed
   from the brew install and the deploy step.
   Implication: a devicectl failure = deploy failure (no second tool to
   fall back to). Acceptable: devicectl covers both transports.

Also updates workflow name/job labels and the 'Prêt à tester' comment to
drop 'WiFi/USB' wording, and aligns AGENTS.md §5 step 4 (arch -arm64 +
tool list) and step 7 (devicectl only).
millianlmx added 1 commit 2026-07-19 20:57:18 +02:00
fix(ci): drop node from brew install — unused, triggers gemini-cli rebuild
All checks were successful
CI / YouTube Worker (pull_request) Has been skipped
CI / Deploy (pull_request) Has been skipped
CI / Detect Changes (pull_request) Successful in 4s
PR → Build → devicectl Deploy → LGTM / Build & Deploy to iPhone (devicectl) (pull_request) Successful in 1m39s
PR → Build → devicectl Deploy → LGTM / Wait for LGTM comment (pull_request) Successful in 33s
bebe381100
Run failed at 'brew install xcodegen node' AFTER both formulae upgraded
successfully under ARM: brew's 'installed dependents check' then tried to
rebuild gemini-cli (0.40.1 -> 0.46.0, an unrelated dev tool on the runner
that depends on node) and exited 1.

Verified node is NOT used by any step in pr-iphone-deploy.yml — only
xcodegen is. The only node references in the repo are in
scripts/prepare-release.cjs and scripts/verify-admin-web-docker.sh,
neither of which runs in this workflow. Node was a historical leftover.

Drop node from the brew install. No node upgrade = no dependents check =
no gemini-cli rebuild. Also sync AGENTS.md §5 step 4.
Author
Owner

📱 Prêt à tester !

L'app est déployée sur l'iPhone (devicectl).

  • Teste les changements
  • Reply LGTM pour merger
  • Reply KO pour bloquer
## 📱 Prêt à tester ! L'app est déployée sur l'iPhone (devicectl). - Teste les changements - Reply **LGTM** pour merger - Reply **KO** pour bloquer
millianlmx merged commit 6937a36ccd into main 2026-07-19 20:59:33 +02:00
Author
Owner

LGTM

LGTM
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: millianlmx/tabatago#12