Skip to content

ci(android): wait for the producer's platform job and keep the fallback build alive - #2261

Merged
thymikee merged 1 commit into
mainfrom
claude/ci-fixture-producer-wait-policy
Sep 3, 2026
Merged

thymikee merged 1 commit into
mainfrom
claude/ci-fixture-producer-wait-policy

Conversation

@thymikee

@thymikee thymikee commented Sep 3, 2026

Copy link
Copy Markdown
Member

Summary

The Android fixture lookup classified producer readiness by the whole workflow run's aggregate status, which flickers to queued between the fingerprint job finishing and the Android Release job starting — the consumer treated queued as "give up" and bailed into an inline Gradle build almost instantly (run 33550746596).

  • trusted-artifact.mjs's producer-state now classifies by the producer's own platform job (Android Release / iOS Release, via actions/runs/{id}/jobs), not the run's aggregate status, and takes an explicit platform argument.
  • fetch-artifact.sh treats queued like in_progress (keep polling) instead of bailing.
  • android.yml's wait-for-artifact-seconds rises 600s → 1800s, matching ios.yml.
  • The producer's Android build and the inline fallback both set org.gradle.jvmargs=-Xmx4g: the producer OOM'd in :app:compileReleaseArtProfile (run 33728318738), prior fallbacks OOM'd in :app:mergeDexRelease.

Trust rule (exact head SHA or default-branch push) unchanged.

Validation

  • trusted-fixture-artifact node:test file and pnpm test:fixture-fallback — pass.
  • pnpm check:quick, pnpm check:fallow, pnpm check:gate-manifest, pnpm format:check — clean.
  • Planted red: reverting classification to run-status gave AssertionError: expected 'queued' to equal 'in_progress'; reverting the queued/in_progress merge gave FAIL: ios queued producer state bailed instead of waiting out its budget. Both restored green.
  • Wait-budget/Gradle-heap YAML edits: no planted red — configuration, not gated logic.
  • Full affected gate: pending (serialized gate stage will append the result).

Tradeoffs / follow-ups

Left the shared action's wait-for-artifact-seconds default at 0: replays-manual.yml's manual-android job relies on it with require-artifact: true under a 15-minute timeout; a global bump would turn a fast failure into a confusing timeout.

…ck build alive

Classify the fixture producer by its platform job (Android Release / iOS
Release) instead of the run's aggregate status: the run flickers to
"queued" in the gap between its fingerprint job and its platform job,
which made the Android consumer bail into an inline build almost
instantly (run 33550746596). Both queued and in_progress on the
platform job now mean keep waiting.

Raise android.yml's wait-for-artifact-seconds to 1800s (matching the
iOS workflow's own budget) so a real wait can play out now that the
premature "queued" bail is gone.

Raise the Android Gradle daemon heap (org.gradle.jvmargs=-Xmx4g) for
both the producer build and the inline fallback build: the producer's
own Android Release job OOM'd in :app:compileReleaseArtProfile (run
33728318738), and both prior inline fallbacks OOM'd in
:app:mergeDexRelease.
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Size Report

Metric Base Current Diff
JS raw 2.58 MB 2.58 MB 0 B
JS gzip 869.6 kB 869.6 kB 0 B
npm bundled raw 2.58 MB 2.58 MB 0 B
npm bundled gzip 869.6 kB 869.6 kB 0 B
npm tarball 1.02 MB 1.02 MB +3 B
npm unpacked 3.46 MB 3.46 MB 0 B
npm clean-installed 3.46 MB 3.46 MB 0 B

npm unpacked components

Component Base Current Diff
JS / dist source 2.74 MB 2.74 MB 0 B
Apple runner source/project 544.4 kB 544.4 kB 0 B
Apple snapshot presentation source 33.8 kB 33.8 kB 0 B
macOS helper source 54.8 kB 54.8 kB 0 B
Android helper artifacts 43.3 kB 43.3 kB 0 B
Other package files 46.3 kB 46.3 kB 0 B

Startup median (7 runs, lower is better):

Scenario Base Current Diff
CLI --version 24.3 ms 24.1 ms -0.2 ms
CLI --help 62.9 ms 60.7 ms -2.2 ms

Top changed chunks: no changes in the largest emitted chunks.

Top changed packed files

No changed packed files.

@thymikee

thymikee commented Sep 3, 2026

Copy link
Copy Markdown
Member Author

READY at e8dc57b22348f979b0d06971a322d7416eb7ff52.

Clean exact-head CI. Producer state is keyed to the exact run plus platform job; the queued path exhausts its bounded wait then falls back, unknown platforms fail closed, and targeted regressions cover the change. The 30-minute Android wait is an accepted operational tradeoff, not a blocker.

@thymikee thymikee added the ready-for-human Valid work that needs human implementation, judgment, or maintainer merge label Sep 3, 2026
@thymikee
thymikee merged commit 4e9820e into main Sep 3, 2026
18 checks passed
@thymikee
thymikee deleted the claude/ci-fixture-producer-wait-policy branch September 3, 2026 12:31
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-09-03 12:31 UTC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-human Valid work that needs human implementation, judgment, or maintainer merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant