Releasing TestChimp Studio
In brief: Publish dogfood with
npm run publish:npm:beta(no version bump). For stable, bumppackage.jsonthennpm run publish:npm; optionally tag for certified installers.
This is the operator runbook for shipping TestChimp Studio. End-user install steps live in Install and Updates.
Channels
| Channel | Package / feed | Who | Versioning |
|---|---|---|---|
| Beta (dogfood) | @testchimp/studio-beta | Internal dogfood + early testers | Auto-stamped; do not bump package.json |
| Stable npm | @testchimp/studio | Developers (npx) | Exact desktop/package.json "version" — bump before publish |
| Certified installer | studio-releases | Most users (DMG / EXE / AppImage) | Same package.json version; tag desktop-vX.Y.Z |
All three share ~/.testchimp and Electron userData. Typical flow: beta → verify → stable npm (+ optional installer tag).
Versioning rules
Canonical version
desktop/package.json "version" (e.g. 0.1.0) is the stable semver. It appears in Diagnostics for installer and stable npm builds, and must match the Git tag for certified releases (desktop-v0.1.0).
Beta — no bump
npm run publish:npm:beta does not change package.json. The publish script stages a separate package named @testchimp/studio-beta and sets:
<baseVersion>-beta.<UTC stamp>
Example: if package.json is 0.1.0, a beta publish becomes 0.1.0-beta.20260909061259.
- Publish as often as you want; each stamp is unique on npm.
<baseVersion>is the part before any-inpackage.json(so0.1.0stays the lineage label).- Testers always take newest with
npx @testchimp/studio-beta@latest.
Stable — bump, then publish
- Bump
"version"indesktop/package.json(semver: patch / minor / major as appropriate). - Commit that bump (and any release notes / compat changes).
- Run
npm run publish:npm(alias ofpublish:npm:stable).
Stable publish uses the exact package.json version. npm rejects republishing the same version — bump every stable ship.
Optional: keep resources/compatibility.json in sync when you raise minimum-compat floors.
Publish beta (dogfood)
Prereqs: logged into npm with publish rights on @testchimp/* (or NPM_TOKEN in CI).
cd desktop
npm run publish:npm:beta
Testers:
npx @testchimp/studio-beta@latest
Dry-run (no registry write):
npm run publish:npm:beta:dry
CI: GitHub Actions workflow Desktop npm beta (workflow_dispatch) — no installer matrix, no package.json bump.
Diagnostics install channel: npm-beta.
Publish stable npm
After dogfood looks good:
cd desktop
# 1) Edit package.json "version" — e.g. 0.1.0 → 0.1.1
# 2) Commit the bump
npm run publish:npm
Users:
npx @testchimp/studio@latest
Diagnostics install channel: npm.
publish:npm / publish:npm:stable run scripts/publish-npm-channel.mjs stable (builds unless SKIP_BUILD=1, then publishes @testchimp/studio at the bumped version).
Publish certified installers (DMG / EXE)
Use when you want signed installs + in-app electron-updater (not required for every stable npm ship).
-
Ensure
desktop/package.json"version"is already bumped and committed (same as stable npm). -
Tag and push — tag must equal package version:
git tag desktop-v0.1.1git push origin desktop-v0.1.1 -
Workflow
.github/workflows/desktop-release.ymlbuilds platform installers, publishes toTestChimp/studio-releases, and (whenNPM_TOKENis set) also publishes@testchimp/studioviapublish:npm:stable.
If you already published stable npm manually, the tag job’s npm step will fail on “version already exists” — that is fine; installers still publish. Prefer either manual npm then tag for installers only, or tag-only and let CI publish both.
Do not ship unsigned public installer builds. Local npm run dist is eng smoke only.
Recommended dogfood → stable sequence
- Land code on the branch you ship from (no version bump).
npm run publish:npm:beta→ dogfood withnpx @testchimp/studio-beta@latest.- Fix issues; repeat beta publishes freely (still no bump).
- When ready: bump
package.jsonversion, commit,npm run publish:npm. - Optionally
git tag desktop-vX.Y.Z+ push for certified installers + updater feed.
One-time ops setup
- Public repo
TestChimp/studio-releases. - Aware secret
STUDIO_RELEASES_TOKEN(contents: writeon that repo). - Aware secret
NPM_TOKEN(publish to@testchimp— coversstudioandstudio-beta). - Apple signing / notarization secrets (for macOS public installers).
- Windows signing secrets (for Windows public installers).
Smoke checks
| Path | Expect |
|---|---|
npx @testchimp/studio-beta@latest | Diagnostics: version *-beta.*, channel npm-beta |
npx @testchimp/studio@X.Y.Z | Diagnostics: version X.Y.Z, channel npm |
| Certified install | Diagnostics: version X.Y.Z, channel installer; later tag shows Update available |
Projects / config under ~/.testchimp should survive switching between beta, stable npm, and installer.