ci: fix recurring Verify Examples workflow failures#745
Merged
Conversation
The "Verify Examples" workflow had been failing on every run. Log analysis across many runs surfaced three independent root causes: 1. validate job: nextjs-zip and remix-zip pinned the EOL runtime nodejs20.x (deprecated 2026-04-30), so `sam validate --lint` matched cfn-lint rule W2531 and failed every run. Bumped both to nodejs22.x. EOL deprecations are intentionally left to fail CI so example runtimes get updated promptly when they age out. 2. test-image(fasthtml) / test-zip(fasthtml-zip): requirements.txt left python-fasthtml unpinned. Newer releases (>=0.14.0) dropped `Card` from fasthtml.common, so the app raised `NameError: name 'Card' is not defined` and returned HTTP 500. Pinned to ==0.13.4 (latest release that still exports Card and installs cleanly on python:3.12-slim). Verified end-to-end: the real app's index route now returns HTTP 200. 3. test-image/test-zip build steps: intermittent `toomanyrequests: Rate exceeded` while sam build pulled base images from public.ecr.aws. Wrapped both `sam build` invocations in a 3-attempt retry loop. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
Author
✅ Verified on a fork via
|
| Job | Before | After |
|---|---|---|
validate |
❌ every run (W2531: nodejs20.x EOL on nextjs-zip/remix-zip) |
✅ pass (nodejs22.x) |
test-image (fasthtml) |
❌ every run (NameError: name 'Card' is not defined → HTTP 500) |
✅ pass (python-fasthtml==0.13.4) |
test-zip (fasthtml-zip) |
❌ every run (same Card error) |
✅ pass |
build-layer + remaining 14 matrix jobs |
— | ✅ all pass |
Run: https://github.com/JamBalaya56562/aws-lambda-web-adapter/actions/runs/26710902404 (conclusion: success)
Notes:
python-fasthtml==0.13.4is the latest release that still exportsCardfromfasthtml.commonand installs cleanly onpython:3.12-slim; verified locally that the example app's index route returns HTTP 200.- No lint suppression was added — EOL runtimes are intentionally left to fail CI so example runtimes get bumped promptly when they age out.
- The
sam buildretry uses exponential backoff + jitter so the matrix jobs (which share runner egress IPs) don't re-collide onpublic.ecr.aws's ~1 req/s unauthenticated pull limit.
Contributor
|
Thanks for the help! |
bnusunny
approved these changes
Jun 1, 2026
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.
Summary
The Verify Examples workflow (
.github/workflows/examples.yaml) has been failing on essentially every run (push and Dependabot PRs alike). Analysis across many recent runs showed the failures are not a single flake but three independent root causes, addressed here:1.
validatejob — EOL runtime lint failure (deterministic)examples/nextjs-zipandexamples/remix-zippinnedRuntime: nodejs20.x, which reached end-of-life on 2026-04-30.sam validate --linttherefore matched cfn-lint rule W2531 and failed on every run.nodejs22.x.2.
test-image(fasthtml)/test-zip(fasthtml-zip)—NameError: Card(deterministic)examples/fasthtml/app/requirements.txtandexamples/fasthtml-zip/app/requirements.txtleftpython-fasthtmlunpinned. Releases>=0.14.0droppedCardfromfasthtml.common, so the app raisedNameError: name 'Card' is not definedand returned HTTP 500, failing the verify step.python-fasthtml==0.13.4— the latest release that still exportsCardand installs cleanly onpython:3.12-slim.0.13.4.3.
test-image/test-zipbuild steps —toomanyrequests: Rate exceeded(intermittent)sam buildpulls base images frompublic.ecr.aws, which throttles unauthenticated pulls at ~1 req/s per source IP. The matrix runs many jobs from shared runner IPs, so concurrent pulls burst past the limit and 429.sam buildinvocations in a retry loop with exponential backoff and random jitter (~10/20/40/80s + 0–15s), so retries across jobs desynchronize and avoid a thundering herd re-colliding on the same boundary.Verification
python-fasthtml==0.13.4: clean install onpython:3.12-slim; the actualfasthtmlapp returns HTTP 200 (Card renders as<article>).nodejs22.x: no other example template currently triggers W2531, sovalidategoes green.🤖 Generated with Claude Code