feat: versioned installations — the box#79 layout, ported the way rig#36 ported it #100

Merged
dan-claude-bot merged 4 commits from feat/versioned-installs into main 2026-07-18 22:14:54 +00:00
2 changed files with 6 additions and 6 deletions
Showing only changes of commit 0a03fc592b - Show all commits

View file

@ -45,16 +45,16 @@ jobs:
run: bash scripts/changelog-section.sh "$GITHUB_REF_NAME" CHANGELOG.md > /tmp/release-notes.md run: bash scripts/changelog-section.sh "$GITHUB_REF_NAME" CHANGELOG.md > /tmp/release-notes.md
- name: build the package, once - name: build the package, once
# Just the build — check and tests already gated the merge commit
# this tag points at (ci.yml, with its age dependency); the release
# job's whole job is packaging that green tree.
run: | run: |
npm ci npm ci
npm run check
npm run build npm run build
npm test
- name: assemble cast-${{ github.ref_name }}.tgz - name: assemble cast-${{ github.ref_name }}.tgz
# The runnable tree and nothing else: bin/, dist/, production # The runnable tree and nothing else: bin/, dist/, production
# node_modules/, package.json. Pruned AFTER the tests so what ships # node_modules/, package.json. Top-level dir named like a GitHub
# is the tree that passed. Top-level dir named like a GitHub
# archive's, so the installer handles both shapes identically. # archive's, so the installer handles both shapes identically.
run: | run: |
npm prune --omit=dev npm prune --omit=dev

View file

@ -1,6 +1,6 @@
# Changelog # Changelog
History before versioning lives in git. Feature PRs land their entry in History before 0.1.0 lives in git. Feature PRs land their entry in
`## Unreleased` as part of the PR; a release PR stamps that section with `## Unreleased` as part of the PR; a release PR stamps that section with
the version and date (see cast#96 — the release flow shared with the version and date (see cast#96 — the release flow shared with
heavy-duty/box#83). heavy-duty/box#83).
@ -14,7 +14,7 @@ heavy-duty/box#83).
`package.json` (the single source of truth — no separate `VERSION` file) `package.json` (the single source of truth — no separate `VERSION` file)
plus the install root. On a bare `X.Y.Z` tag push, `release.yml` asserts plus the install root. On a bare `X.Y.Z` tag push, `release.yml` asserts
the tag matches `package.json`, builds once in CI (`npm ci`, `npm run the tag matches `package.json`, builds once in CI (`npm ci`, `npm run
build`, `npm test`, `npm prune --omit=dev`), tars the runnable tree into build`, `npm prune --omit=dev`), tars the runnable tree into
`cast-X.Y.Z.tgz`, and creates the GitHub release with that version's `cast-X.Y.Z.tgz`, and creates the GitHub release with that version's
changelog section as the body and the tarball attached. The installer now changelog section as the body and the tarball attached. The installer now
defaults to the **latest release asset** — resolved via the defaults to the **latest release asset** — resolved via the