From a6de1c7e7ddc73824c472a2cff64871d7d1e6c53 Mon Sep 17 00:00:00 2001 From: Gabriel Taveira Date: Mon, 27 Jul 2026 18:30:53 -0300 Subject: [PATCH] ci(e2e): give the iOS build room to finish a cold build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The push-to-main run for #105 came back `cancelled` with no error in the log. It was not concurrency — cancel-in-progress is scoped to pull_request — and not a lost runner. `Build iOS (required)` simply ran out its `timeout-minutes: 45`, and Actions reports a timed-out job as cancelled. The margin was never there to begin with. The last green run on main took 44m50s for the same job: ten seconds of slack. A cold .app cache makes the job pay for a full Xcode release build (31m) plus the simulator boot, so whether main goes green came down to how fast a given macOS runner felt that morning. The cancel also skipped every cache-save post step, so the next run starts cold again and re-rolls the same dice. Raise both iOS build jobs to 75 minutes. A warm fingerprint hit still finishes in minutes; this only buys the cold path enough room to land. Claude-Session: https://claude.ai/code/session_01Fe92vvdc4R3F4BDBFoLcw1 --- .github/workflows/e2e-mobile.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-mobile.yml b/.github/workflows/e2e-mobile.yml index 3671d07..56e0b55 100644 --- a/.github/workflows/e2e-mobile.yml +++ b/.github/workflows/e2e-mobile.yml @@ -314,7 +314,12 @@ jobs: if: github.event_name != 'pull_request' || github.event.pull_request.draft == false needs: quarantine-lint runs-on: macos-latest - timeout-minutes: 45 + # A cold .app cache means a full Xcode release build plus a simulator + # boot, which measured 44m50s on main — ten seconds under the old + # 45-minute budget, so any slower runner killed the job and Actions + # reported it as `cancelled`, not `timed out`. 75 leaves real headroom + # for a cold build; a warm fingerprint hit still finishes in minutes. + timeout-minutes: 75 outputs: app-artifact: ${{ steps.vars.outputs.app-artifact }} env: @@ -981,7 +986,9 @@ jobs: if: github.event_name != 'pull_request' || github.event.pull_request.draft == false needs: quarantine-lint runs-on: macos-latest - timeout-minutes: 45 + # Same cold-cache build as the required variant, so it carries the same + # budget. Keeping the two in step stops one from timing out alone. + timeout-minutes: 75 outputs: app-artifact: ${{ steps.vars.outputs.app-artifact }} skip: ${{ steps.preflight.outputs.skip }}