Skip to content

ci(config): smoke test installed wheels-module against clean filesystem (#2208)#2217

Merged
bpamiri merged 2 commits into
developfrom
claude/modest-kirch-68cb10
Apr 22, 2026
Merged

ci(config): smoke test installed wheels-module against clean filesystem (#2208)#2217
bpamiri merged 2 commits into
developfrom
claude/modest-kirch-68cb10

Conversation

@bpamiri

@bpamiri bpamiri commented Apr 22, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a CI smoke test that installs the just-built wheels-module-*.tar.gz into a clean filesystem location and exercises every template-driven generator against a scratch project. Closes #2208.

Would have caught #1944 same-day instead of weeks later. The existing test suite runs in monorepo mode where Templates.cfc::resolveTemplateDir() falls back to source paths that don't exist in installed distributions, masking packaging regressions.

What changed

  • tools/ci/smoke-test-module.sh — new bash smoke test, runnable locally:
    bash tools/ci/smoke-test-module.sh <module-tar> <core-zip>
    
  • .github/workflows/release.yml — new smoke-test-distribution job, needs: build. Runs on every develop push (via snapshot.ymlrelease.yml workflow_call) and every main push. Uses isolated LUCLI_HOME so nothing pollutes the runner's home dir.

What the smoke test checks

  1. templates/codegen/ + 4 key codegen templates (HelperContent.txt, ModelContent.txt, ControllerContent.txt, ApiControllerContent.txt) are bundled — direct LuCLI: release.yml drops codegen templates — all template-driven generators emit empty output in installed module #1944 assertion
  2. lucli modules list sees the installed module
  3. wheels new smoke scaffolds a working project (with wheels-core as WHEELS_FRAMEWORK_PATH)
  4. Each generator produces non-empty, grep-verifiable output:
    • model User name:string email:string — extends Model, has config()
    • controller Users index show — has function index
    • api-resource Product name price:decimal — controller at app/controllers/api/Products.cfc with renderWith, model at app/models/Product.cfc
    • helper formatting truncateText — creates app/helpers/FormattingHelper.cfc
    • scaffold Post title:string body:text — creates model + controller + views + migration
    • snippets auth — creates app/controllers/Sessions.cfc

Deviations from the issue text

  • Asserted extends=\"Model\" + function config on generated model instead of validatesPresenceOf. The current ModelContent.txt template doesn't emit validations from typed attrs. Worth a separate issue — the generator behavior is a gap, not a packaging bug.
  • api-resource namespaces its controller under app/controllers/api/ (not app/controllers/).
  • Skipped wheels dbmigrate latest — LuCLI only registers wheels migrate, and running migrations requires SQLite JDBC + Lucee server setup duplicating snapshot.yml's fast-test. Migration template path is covered because scaffold and api-resource create migrations and we assert their presence.

Verification (local)

Used a recent snapshot (wheels-module-4.0.0-SNAPSHOT+1550.tar.gz) + a fake core zip built from vendor/wheels/:

Scenario Result
Current snapshot tar 29/29 pass, exit 0
Simulated #1944 regression (codegen/ stripped) 22/29, 7 fail, exit 1 — pinpoints missing templates and downstream empty generator output

Placement rationale

Placed in release.yml (not snapshot.yml as the issue suggested) because release.yml is called by snapshot.yml and triggered directly on main push — one job, both paths. Runs post-hoc to the existing publish step: if a regression ships to snapshot-artifacts, the next develop push's required check fails. A true gate (splitting build into build → smoke → publish) is a bigger refactor worth doing separately.

Test plan

  • PR CI runs the smoke-test-distribution job green against this branch's own build
  • Spot-check the uploaded smoke-test-logs artifact on a failing scenario (would need a follow-up regression test to validate)
  • Merge → watch first real develop push exercise it

bpamiri added 2 commits April 22, 2026 11:48
…em (#2208)

Adds a post-build job to release.yml that installs the just-built
wheels-module-*.tar.gz into an isolated LUCLI_HOME, extracts
wheels-core-*.zip for WHEELS_FRAMEWORK_PATH, and exercises every
template-driven generator against a scratch project. Runs on every
develop push (via snapshot.yml -> release.yml) and every main push.

Would have caught #1944 (codegen templates unbundled) same-day
instead of weeks later. The existing test suite can't surface these
regressions because it runs in monorepo mode where
Templates.cfc::resolveTemplateDir() falls back to source paths that
don't exist in installed distributions.

The bash script is runnable locally:
  bash tools/ci/smoke-test-module.sh <module-tar> <core-zip>

Verified locally: 29/29 pass on current snapshot tar; 22/29 fail
(exit 1) on a tar with templates/codegen/ stripped, pinpointing the
regression.
LuCLI only registers 'wheels migrate' (Module.cfc:222); there is no
dbmigrate alias. The MCP tool name (wheels_migrate) was already
correct — just the CLI column was wrong.

Auto-Migration section (lines 644-648) still references
'wheels dbmigrate diff' which doesn't exist in LuCLI either; that
command wiring is a separate investigation, not folded in here.
@github-actions github-actions Bot added the docs label Apr 22, 2026
@bpamiri
bpamiri merged commit c08ce5f into develop Apr 22, 2026
3 checks passed
@bpamiri
bpamiri deleted the claude/modest-kirch-68cb10 branch April 22, 2026 18:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CI: no smoke test against built wheels-module tar — packaging regressions ship undetected

1 participant