@@ -60,18 +60,24 @@ Use `CODER_STUDIO_HOME` to override the state directory for tests or isolated en
6060## Build Commands
6161
6262``` bash
63+ pnpm version:check
6364pnpm build:web
6465pnpm build:runtime
6566pnpm build:packages
6667pnpm pack:local
68+ pnpm release:verify
69+ pnpm release:verify:full
6770```
6871
6972What they do:
7073
74+ - ` version:check ` : verifies the root package, main package, platform packages, ` Cargo.toml ` , and ` tauri.conf.json ` all share the same version
7175- ` build:web ` : builds the frontend into ` dist/ `
7276- ` build:runtime ` : builds the Rust/Tauri release binary
7377- ` build:packages ` : assembles the current platform runtime package
74- - ` pack:local ` : emits local tarballs into ` .artifacts/ `
78+ - ` pack:local ` : runs the release build and emits local tarballs into ` .artifacts/ `
79+ - ` release:verify ` : runs version checks, CLI tests, Rust tests, local packaging, and smoke validation
80+ - ` release:verify:full ` : adds release E2E on top of ` release:verify `
7581
7682## Versioning
7783
@@ -84,20 +90,97 @@ pnpm changeset
8490pnpm changeset:version
8591```
8692
93+ A recommended local flow:
94+
95+ ``` bash
96+ pnpm changeset
97+ pnpm changeset:version
98+ git add .
99+ git commit -m " chore(release): version packages"
100+ ```
101+
87102The version sync step updates:
88103
89104- ` packages/*/package.json `
90105- ` src-tauri/Cargo.toml `
91106- ` src-tauri/tauri.conf.json `
92107- the root ` package.json `
93108
109+ ` changeset:version ` now runs ` pnpm version:check ` after syncing so version drift fails immediately.
110+
111+ ## Local Pre-Release Validation
112+
113+ Minimum validation:
114+
115+ ``` bash
116+ pnpm release:verify
117+ ```
118+
119+ Full validation:
120+
121+ ``` bash
122+ pnpm release:verify:full
123+ ```
124+
125+ Local artifacts:
126+
127+ ``` bash
128+ pnpm pack:local
129+ ls .artifacts
130+ ```
131+
132+ ` .artifacts/ ` now includes:
133+
134+ - the main package tarball
135+ - the current platform tarball
136+ - ` release-manifest.json `
137+ - ` SHA256SUMS.txt `
138+
94139## GitHub Actions
95140
96141The automation is split into three workflows:
97142
98- - ` ci.yml ` : PR/main validation for CLI tests, Rust verification, builds, smoke tests, and release E2E
99- - ` changesets.yml ` : creates version PRs from pending changesets on ` main `
100- - ` release.yml ` : publishes platform packages, publishes the main package, and creates a GitHub Release from ` v* ` tags
143+ - ` ci.yml `
144+ - adds a ` version-consistency ` gate
145+ - runs cross-platform CLI unit tests
146+ - runs Rust fmt/clippy/check/test on Linux
147+ - runs ` pnpm pack:local `
148+ - runs smoke and release E2E
149+ - uploads Linux release artifacts
150+ - ` changesets.yml `
151+ - runs only on ` main `
152+ - creates or updates the version PR
153+ - now has explicit ` contents ` / ` pull-requests ` write permissions
154+ - ` release.yml `
155+ - starts with a ` preflight ` job that validates the tag and runs ` pnpm version:check `
156+ - publishes the 4 platform runtime packages
157+ - publishes the main ` @spencer-kit/coder-studio ` package
158+ - aggregates tarballs and attaches ` release-manifest.json ` plus ` SHA256SUMS.txt ` to the GitHub Release
159+
160+ ## Release Trigger
161+
162+ After the version PR is merged, push a tag that matches the package version:
163+
164+ ``` bash
165+ git tag v0.1.0
166+ git push origin v0.1.0
167+ ```
168+
169+ The workflow then:
170+
171+ 1 . checks that the tag matches ` packages/coder-studio/package.json `
172+ 2 . publishes platform packages
173+ 3 . publishes the main package
174+ 4 . creates the GitHub Release assets
175+
176+ ## GitHub / npm Requirements
177+
178+ The current release workflow expects:
179+
180+ - the default GitHub ` GITHUB_TOKEN `
181+ - a repository secret named ` NPM_TOKEN `
182+
183+ ` NPM_TOKEN ` must be allowed to publish the ` @spencer-kit/* ` packages on npm.
101184
102185## Local Test Matrix
103186
@@ -111,6 +194,7 @@ pnpm test:e2e:release
111194Coverage:
112195
113196- ` test:cli ` : configuration, platform resolution, and state handling
197+ - ` test:cli ` now also covers release version consistency and release manifest generation
114198- ` test:smoke ` : installs local tarballs and runs ` start/status/restart/stop `
115199- ` test:e2e ` : development-mode frontend/backend integration
116200- ` test:e2e:release ` : browser E2E against the built release runtime
0 commit comments