ci(build): add CommandBox install->serve smoke leg for the ForgeBox path#3202
Merged
Conversation
Durability net for the ForgeBox/CommandBox install path. The channel was
published but broke end to end, undetected for weeks, because nothing in CI
exercises the *built* packages the way a CommandBox user installs them.
This leg builds the base + core packages FROM THE TREE (prepare-base.sh +
prepare-core.sh), stages them as `box install wheels-base-template` lands them
(base at the app root, wheels-core at vendor/wheels/ per box.json installPaths),
boots under the ortussolutions/commandbox image, and asserts the install->serve
journey with ZERO manual edits:
- dev: server binds no-edit, GET / 200 (welcome), /wheels/info 200 (dev
whitelist, #2988), clean URL /main/index 200, db/ ships, no
placeholders survive into the artifact.
- prod: tools/ci/smoke-env.sh passes all six reload-gate / no-trace probes.
Pre-boot structural guards name the three packaging defects the campaign
repaired (#3173 placeholders, #3174 db/, plus the root-view generation) so a
regression is reported precisely instead of as an opaque boot failure.
Gated on tools/build/**, cli/lucli/templates/app/**, tools/ci/smoke-env.sh, and
the workflow file itself.
This leg tests the FIXED pipeline: the template keystone (#3176) is a sibling
PR not yet on develop, so the leg goes green once #3176 merges. The wheels-core
fixes (#3177/#3178/#3179) are already on develop. Verified locally (CommandBox
6.3.3): keystone-composed tree passes all probes; unfixed develop artifact
exits 1 with "Invalid slug detected" — the gate is real, the probes are not
weakened.
Refs #3173, #3174, #3176, #3177
Closes #3201
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Peter Amiri <petera@pai.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.
What
Adds a CI leg (
.github/workflows/commandbox-install-smoke.yml) that exercises the built ForgeBox/CommandBox install→serve journey on every PR that touches the build pipeline — the durability net for the path-repair campaign.The ForgeBox channel was published but broke end to end and stayed broken undetected for weeks, because nothing in CI installs the built packages the way a CommandBox user does. ForgeBox publishing is stable-only and asynchronous, so a packaging regression only surfaces in production long after the offending commit lands. This leg closes that gap.
How
tools/build/scripts/prepare-base.sh+prepare-core.sh) — the artifact this PR would publish, not the lagging ForgeBox copy.box install wheels-base-templatelands them: base scaffold at the app root,wheels-coreatvendor/wheels/per thebox.jsoninstallPaths(satisfying the dependency from the local core build).ortussolutions/commandboximage (CommandBox is the runtime on this path, not LuCLI — same image/source asrelease.yml's ForgeBox publish) and asserts:GET /200 (welcome),/wheels/info200 (dev whitelist fix(public): whitelist /wheels/info JSON metadata and validate core.cfm format include #2988), clean URL/main/index200,db/ships, no|placeholder|/{{token}}survives.tools/ci/smoke-env.shpasses all six reload-gate / no-trace probes (same harness theSmokeworkflow drives).Pre-boot structural guards name the campaign's packaging defects (#3173 placeholders, #3174
db/, root-view generation) so a regression is reported precisely instead of as an opaque boot failure.Gated on:
tools/build/**,cli/lucli/templates/app/**,tools/ci/smoke-env.sh, and the workflow file.Ordering — this leg gates on two sibling PRs merging
This leg tests the FIXED pipeline:
wheels newtemplate (single source of truth) #3176 (build base template from cli/lucli/templates/app, sibling PR build(forgebox): rebuild base template from LuCLI template so box install boots clean #3196) — is not yet on develop. Until it merges, develop'sprepare-base.shstill copies the repo-root demo app and shipscfengine:"|cfmlEngine|", sobox server starthard-errors ("Invalid slug detected") and the connectivity probe fails. That is the defect this leg catches; the probes are deliberately not weakened to pass on the unfixed tree.box install wheels-corein awheels newapp lands in vendor/wheels/vendor/wheels and never upgrades the running framework #3177/Release stamping clobbers PackageLoader's "@build.version@" sentinel — wheelsVersion constraint enforcement silently disabled on every released build #3178/ForgeBox wheels-core artifact ships internal docs/superpowers planning files (specs, PR drafts, patches) #3179) are already on develop (PR build(core): land wheels-core flat, protect version sentinel, drop internal docs #3194), so the core leg of the dependency is green now.Once #3196 lands on develop, this job goes green.
Verification (local, CommandBox 6.3.3 /
ortussolutions/commandbox:latest)smoke-env.shprobes PASS in production (failures=0); dev journey passes (GET /200,/wheels/info200,/main/index200,db/present) with no edits. Validated inside a long-lived container mimicking the GHAcontainer:—box server startdaemonizes and persists across steps.Invalid slug detected. Slugs can only contain letters, numbers, underscores, and hyphens— boot status 000. The gate is real.The PR contains only the workflow file; the sibling-branch changes were composed locally for verification and then reset.
Refs #3173, #3174, #3176, #3177 (durability net)
Closes #3201
🤖 Generated with Claude Code