cast gets the family's release flow (box#83's shape), plus the piece unique to cast: because cast compiles, the source tarball is not the package — so release.yml builds ONCE in CI and attaches cast-X.Y.Z.tgz, and the installer's default channel extracts that asset instead of running npm ci + tsc on the operator's machine. - cast --version: package.json is the single source of truth (no VERSION file); prints the install root too, rig-style. - CHANGELOG.md with Unreleased; release notes are the curated section (scripts/changelog-section.sh), never the auto-generated PR list. - release.yml on a bare X.Y.Z tag: assert tag == package.json version, check + build + test, prune, tar the runnable tree, gh release create. - install.sh channels: unset → latest release asset (resolved via the releases/latest redirect — no API, no token); CAST_REF=X.Y.Z → that tag's asset; CAST_REF=<branch> → build-from-source, the old path. - Tests drive the REAL install.sh offline via curl/npm PATH shims (all three channels, plus the broken-asset and no-release refusals), and the real changelog-section.sh against fixture changelogs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
25 lines
1.2 KiB
Markdown
25 lines
1.2 KiB
Markdown
# Changelog
|
|
|
|
History before versioning lives in git. Feature PRs land their entry in
|
|
`## 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
|
|
heavy-duty/box#83).
|
|
|
|
## Unreleased
|
|
|
|
### Added
|
|
|
|
- **Versioned installs: tagged releases with a prebuilt dist asset** (#96) —
|
|
cast now has a release surface. `cast --version` prints the version from
|
|
`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
|
|
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
|
|
`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
|
|
defaults to the **latest release asset** — resolved via the
|
|
`releases/latest` redirect, no API, no token — so a default install
|
|
compiles nothing on the operator's machine and answers "what cast is
|
|
this?" with a version. `CAST_REF=X.Y.Z` pins (uses that tag's asset when
|
|
it exists), `CAST_REF=main` stays the dev channel: build-from-source,
|
|
exactly the old path.
|