Repository navigation
ci(module-pack): container entries run the tester image against the platform image's /app - #2907
Merged
Merged
Conversation
…e PLATFORM image's /app Measured before any entry flipped: memex-portal-ai@7e8c0b20 ships no /app/mw-plugin-test (331 files, none the tester), so #2854's container path — the tester run from the platform image — fails at docker run for every entry that declares it. The two images cannot swap roles either: the tester's own /app lacks the Blazor/Hosting.AspNetCore half of the reference surface (the platform-image input already documents this). So the lane now takes tester-image/tester-image-digest, extracts the platform /app once (docker create + cp — the portal's entrypoint never starts), and runs the tester image's builder with --app /platform-app. Both pins are published by one CD wave and move together. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Updates the reusable node-repo-module-pack workflow so "build":"container" module entries run the mw-plugin-test builder from a dedicated tester image while compiling against the pinned platform image’s extracted /app, avoiding “executable not found” failures when the portal image doesn’t ship /app/mw-plugin-test.
Changes:
- Adds
tester-image/tester-image-digestworkflow inputs and wires them into the pack job environment. - For
build=container, pulls both pinned images, extracts the platform/appviadocker create+docker cp, and runs the tester image’s/app/mw-plugin-test build-projectagainst that extracted app.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+619
to
+623
| platform_app="$RUNNER_TEMP/platform-app" | ||
| rm -rf "$platform_app" | ||
| pcid=$(docker create --platform linux/amd64 "$pinned") | ||
| docker cp -q "$pcid:/app" "$platform_app" | ||
| docker rm "$pcid" >/dev/null |
Comment on lines
606
to
+616
| case "${IMAGE##*/}" in *:*) IMAGE_NOTAG="${IMAGE%:*}" ;; *) IMAGE_NOTAG="$IMAGE" ;; esac | ||
| pinned="${IMAGE_NOTAG}@${DIGEST}" | ||
| case "${TESTER_IMAGE##*/}" in *:*) TESTER_NOTAG="${TESTER_IMAGE%:*}" ;; *) TESTER_NOTAG="$TESTER_IMAGE" ;; esac | ||
| tester_pinned="${TESTER_NOTAG}@${TESTER_DIGEST}" | ||
| echo "$ACR_PASSWORD" | docker login "${IMAGE%%/*}" -u "$ACR_USERNAME" --password-stdin | ||
| # 🚨 --platform linux/amd64 ALWAYS, for the same reason the refs extraction pins it: | ||
| # framework identities are per-architecture and the bundles are sealed under the x64 | ||
| # identity the portals run. Pulled here rather than relying on the refs step above, | ||
| # which does not run on a platform-refs cache HIT. | ||
| docker pull --platform linux/amd64 "$pinned" | ||
| docker pull --platform linux/amd64 "$tester_pinned" |
Contributor
Contributor
Contributor
Contributor
Contributor
Contributor
Contributor
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.
Follow-up to #2854, found by measurement before any satellite flipped an entry: the platform image (
memex-portal-ai@7e8c0b20…) carries no/app/mw-plugin-test— the tester ships in its ownmw-plugin-testimage, tag-matched to the portal images by construction. As merged, every"build":"container"entry would die atdocker runwith executable-not-found.The two images deliberately keep their roles:
/appIS what the bundle loads into; the tester image's/applacks the Blazor/Hosting.AspNetCore surface, as the input doc already records);razor-generators/, andsdk-generators/once feat(build-project): ship the SDK's built-in generators in the image — [GeneratedRegex] modules compile with no flag #2905 lands).So the lane gains
tester-image+tester-image-digest(required for container entries, checked loudly with the existing no-fallback stance), extracts the platform/apponce per job (docker create+cp— the portal entrypoint never starts), and runs the tester image's builder with--app /platform-app. This is byte-for-byte the shape the 18-green measurement used natively (builder-adjacent generators + portal/apprefs).Callers pass both pins from the same CD wave (satellites already carry
MW_TEST_IMAGE/digest conventions). The Plugins flip PR pins this lane's SHA.🤖 Generated with Claude Code