ci: diagnose the launch-smoke flake, pin artifact retention, gate demo GIFs (#247, #258) - #277
Merged
Conversation
…o GIFs (#247, #258) ## launch-smoke: not the flake it was filed as The failure on the run that prompted this was not `Broken pipe`, which is what #262 recorded. It was: Performing Streamed Install Success Starting: Intent { cmp=com.markleaf.notes/.MainActivity } Error type 3 Error: Activity class {...MainActivity} does not exist. `adb install` returns when the install session commits, which is before the package manager has the app indexed. Starting the activity in that window fails as though the build were broken. On a slow CI emulator the window is seconds wide; locally it is nothing, which is why this reads as random. The script now waits for `pm path` to answer before starting the activity, up to a minute, and fails with a distinct message if it never does. That is a real wait on the real signal rather than a sleep. The job stays `continue-on-error` -- one green run is not evidence -- but the flake now has a diagnosis instead of a reputation (#247, #252, #262). ## Artifact retention The three artifacts still on the 90-day default now carry explicit values and the reasoning sits next to them: 7 days for the two failure-only reports (Roborazzi diffs, lint HTML), which are read while the failure is fresh or not at all; 30 for the recorded goldens, which are downloaded and committed by hand and have to survive the gap between dispatching the run and getting round to it. ## Demo GIFs `verify-landing-versions.ps1` now asserts that each of the twelve public surfaces references its own `markleaf-tablet-<lang>.gif` and that the file exists. `README.ko.md` pointing at the English clip renders fine and would have shipped silently -- the same gap this script already closes for version strings. It runs in the required `build` check, so it covers the READMEs too, which the docs-only landing-check workflow does not. `docs/assets/README.md` records what the other two items asked for: the version each clip was recorded on, and why `markleaf-preview-720/1280.webp` are kept despite being referenced nowhere (their Pages URLs may be linked from outside the repository; ~93 KB total). Verified: bash -n on the script, YAML parse on the workflow, and the new check exercised both ways -- 12/12 pass as the tree stands, and pointing README.ko.md at the English clip fails it with the expected message. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three items from #247 and two from #258, picked up during a sweep over the open issue backlog.
launch-smokeis not the flake it was filed asThree issues describe this job as an unexamined flake. The failure on PR #274 gave it a name, and it is not
Broken pipe:adb installreturns when the install session commits — which is before the package manager has the app indexed. Starting the activity in that window fails exactly as though the build were broken. On a slow CI emulator that window is seconds wide; locally it is nothing, which is why the job reads as random.The script now waits for
pm pathto answer before starting the activity (up to a minute) and fails with a distinct message if it never does. That is a wait on the real signal rather than a sleep.The job stays
continue-on-error— one green run is not evidence, and #252 already asked for a few more data points before promoting it. But the flake now has a diagnosis instead of a reputation.Artifact retention
roborazzi-diff-images,lint-report-releaseandroborazzi-goldens-linuxwere the three still on the 90-day default. They now carry explicit values with the reasoning next to them:Demo GIFs
verify-landing-versions.ps1now asserts each of the twelve public surfaces references its ownmarkleaf-tablet-<lang>.gif, and that the file exists.README.ko.mdpointing at the English clip renders fine and would have shipped silently — the same class of gap this script already closes for version strings.It lives here rather than in
landing-check.ymlon purpose: this script runs in the requiredbuildcheck, so it covers the six READMEs too, which the docs-only workflow does not.docs/assets/README.mdrecords the two remaining #258 items — which version each clip was recorded on, and whymarkleaf-preview-720/1280.webpare kept despite being referenced nowhere (their GitHub Pages URLs may be linked from outside the repository; ~93 KB total, deleting them breaks those links for no benefit).Verification
bash -non the script, YAML parse on the workflow, and the new check exercised both ways: 12/12 surfaces pass as the tree stands, and pointingREADME.ko.mdat the English clip fails it with기대 markleaf-tablet-ko.gif, 실제 -> markleaf-tablet-en.gifand exit 2.The install-window fix itself can only be confirmed by the job running on this PR.
Still open on #247: the Release asset list has no CI gate, and
gh release createarguments are still only exercised on a tag push.🤖 Generated with Claude Code