IW-346: Update release packaging for built artifacts #373

Merged
mprihoda merged 17 commits from IW-346 into main 2026-04-28 14:54:27 +00:00
mprihoda commented 2026-04-28 14:29:46 +00:00 (Migrated from github.com)

Summary

  • Release tarballs now ship pre-built jars (build/iw-core.jar, build/iw-dashboard.jar) instead of core/**/*.scala source files. Installed users no longer need Mill or any build infrastructure on their machine.
  • Launcher resolution (iw-run) gets a documented three-tier order: $IW_*_JAR env override → $INSTALL_DIR/build/*.jar → Mill (dev fallback). --bootstrap becomes verify-only when bundled jars are present.
  • CI release workflow moves to the self-hosted runner + iw-cli-ci container, with WEBAWESOME_NPM_TOKEN wired through to drive Vite during dashboard packaging.
  • Audit-gate finding fixed mid-Phase-1: commands/review-state.scala was walking core/**/*.scala at runtime; consolidated the dispatcher and three subscripts into one file that uses the standard --jar "$CORE_JAR" path. Net −70 lines, no more runtime source walk, faster dispatch.
  • BATS regression test added: launches the installed tarball with a fail-loudly mill stub on PATH and asserts the launcher never invokes Mill when bundled jars are present.

Phases

  • Phase 1 (PR #371, merged): Packaging + Launcher + Bootstrap
  • Phase 2 (PR #372, merged): CI + Tests + Docs

Review materials

Test plan

  • Phase 1: 4 manual tarball flows verified (build, contents, no-Mill-on-PATH run, dev-checkout regression, env override)
  • Phase 2: All 5 BATS tests pass against release/iw-cli-0.5.0.tar.gz
  • Code review: 2 iterations across both phases, all warnings addressed, 0 critical issues
  • Pending merge gate: RC tag dry run (v0.5.X-rc1 or workflow_dispatch) before any production release tag — required by Risk 1 mitigation in analysis.md

🤖 Generated with Claude Code

## Summary - **Release tarballs now ship pre-built jars** (`build/iw-core.jar`, `build/iw-dashboard.jar`) instead of `core/**/*.scala` source files. Installed users no longer need Mill or any build infrastructure on their machine. - **Launcher resolution** (`iw-run`) gets a documented three-tier order: `$IW_*_JAR` env override → `$INSTALL_DIR/build/*.jar` → Mill (dev fallback). `--bootstrap` becomes verify-only when bundled jars are present. - **CI release workflow** moves to the self-hosted runner + `iw-cli-ci` container, with `WEBAWESOME_NPM_TOKEN` wired through to drive Vite during dashboard packaging. - **Audit-gate finding fixed mid-Phase-1**: `commands/review-state.scala` was walking `core/**/*.scala` at runtime; consolidated the dispatcher and three subscripts into one file that uses the standard `--jar "$CORE_JAR"` path. Net `−70` lines, no more runtime source walk, faster dispatch. - BATS regression test added: launches the installed tarball with a fail-loudly `mill` stub on `PATH` and asserts the launcher never invokes Mill when bundled jars are present. ## Phases - Phase 1 (PR #371, merged): Packaging + Launcher + Bootstrap - Phase 2 (PR #372, merged): CI + Tests + Docs ## Review materials - [Analysis](project-management/issues/IW-346/analysis.md) - [Review packet](project-management/issues/IW-346/review-packet.md) — entry points, scenarios, diagrams, test summary - [Implementation log](project-management/issues/IW-346/implementation-log.md) — per-phase decisions and verification - [Release notes](project-management/issues/IW-346/release-notes.md) — Czech, user-facing ## Test plan - [x] Phase 1: 4 manual tarball flows verified (build, contents, no-Mill-on-PATH run, dev-checkout regression, env override) - [x] Phase 2: All 5 BATS tests pass against `release/iw-cli-0.5.0.tar.gz` - [x] Code review: 2 iterations across both phases, all warnings addressed, 0 critical issues - [ ] **Pending merge gate**: RC tag dry run (`v0.5.X-rc1` or `workflow_dispatch`) before any production release tag — required by Risk 1 mitigation in `analysis.md` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No description provided.