name: create-release-checklist description: Generate a GitHub release-checklist issue for a full (non-RC) release of the Smelter server and/or the TypeScript SDK. Reads the changelog, extracts the actual new/changed options to verify, and opens the issue with gh. disable-model-invocation: false allowed-tools: Bash, Read, Grep, Glob
Create a GitHub issue that tracks a full, non-RC release of the Smelter server and the TypeScript SDK, following the structure and ordering of the process documented in RELEASE.md.
This skill is for non-RC releases only. Do not add any "if non-RC" hedging, RC tags, or .pre-release.json-creation steps — assume the release promotes to latest.
What to gather first
- Current versions and last released tags (so you can propose the next versions):
- Server:
versionin the workspaceCargo.toml; last releasedgit tag --list 'v0.*'. - SDK:
versionints/smelter/package.jsonandts/smelter-node/package.json; last releasedgit tag --list 'ts-sdk/*'.
- Server:
- The changelog: read the
## unreleasedsection ofCHANGELOG.md. This is the source of truth for what needs to be verified — do not invent or generalize it. - The server↔SDK coupling:
ts/smelter-node/src/manager/locallySpawnedInstance.tsdefinesVERSIONandREPO. The SDK downloads the server binary from there, so the SDK release depends on the server release.
Propose the next versions to the user and confirm before creating the issue:
- Server uses a
0.MAJOR.MINORscheme. If the## unreleasedsection has a💥 Breaking changesblock, bump the major segment (e.g.0.5.0→0.6.0); otherwise bump the patch. - All SDK packages share a major; pick the matching SDK version.
Do not add a "Decide versions" checklist item to the issue itself — bake the chosen versions directly into the title and steps.
Extracting options from the changelog
Go through every entry under ## unreleased (💥 Breaking changes, ✨ New features, plus any input/output-relevant 🔧 Others) and turn each new or changed input / output / encoder option, endpoint, WebSocket event, or shader requirement into one leaf checklist item. Quote the actual field/option/env-var names from the changelog.
Classify each one:
- Maps to a TS SDK field (input/output registration options, encoder options, input-update operations, events, shader requirements) → goes in both Phase A (server) and Phase B (SDK). The server options map ~one-to-one to TS SDK fields.
- Server-config only (anything configured via an env var, e.g.
SMELTER_RTMP_SERVER_PORT, theSMELTER_WEBRTC_*ICE vars) → goes in Phase A only. In Phase B, list these once as a single note saying they are server-config, not SDK fields, and were verified in Phase A.
Issue structure (reproduce exactly)
These conventions come from real corrections — keep them:
- Checkboxes on leaf tasks only. Structural/grouping lines (phase headers,
A1./B2.step groups, the "Temporarily modify examples…" lead-in) are plain text. Only the smallest actionable items get- [ ]. - Verification before version bump, always. In each phase the verification step comes first; the version-bump PR step is explicitly gated "only after verification passes". Never bump versions before testing.
- Server first; SDK depends on it. Phase A is the server and is labeled as release-first. Phase B is gated on the server being published, and its first step points
locallySpawnedInstance.tsat the freshly released server tag — this is done before SDK verification so thecreate-smelter-apptemplates test the right binary. It is not a version bump. - Ordering/dependency warnings are inline ordered points, not global blockquotes. Put them in the step where they apply (a leading
⚠️is fine). Do not stack notes at the top of the issue. - No obvious/self-evident items. Skip filler like "discard temporary example edits" or "decide versions" — only list real, non-trivial actions.
Use this body as the template (substitute the real versions and the changelog-derived option lines):
Release checklist for **Smelter server `vX.Y.Z`** and **TypeScript SDK `A.B.C`**.
**Phase A — Smelter server** (release this first — Phase B depends on it)
- A1. Pre-release verification (on `master`, before any version bump)
- [ ] Start demo server (`cargo run --example demo_server` + `cargo run --example demo`) and exercise every input and output type
- [ ] Run the other examples in the `integration-tests` crate
- ⚠️ Temporarily modify examples to test the new/changed options below (extracted from the `## unreleased` section of `CHANGELOG.md`):
- [ ] <one leaf per new/changed option, quoting the real names>
- [ ] ...
- A2. 📌 Create release PR (only after verification passes)
- [ ] Bump `version` in workspace `Cargo.toml` (`<old>` → `<new>`)
- [ ] In `CHANGELOG.md`, rename `## unreleased` → `## [vX.Y.Z](…/releases/tag/vX.Y.Z)` and add a fresh empty `## unreleased`
- [ ] Review + merge to `master`; create `v0.Y` branch per versioning policy
- A3. Release process (after PR merged)
- [ ] Trigger `rust_release_build` and `docker_publish` GitHub Actions
- [ ] `gh run list --workflow "package for release"` → get `WORKFLOW_RUN_ID`
- [ ] Run `WORKFLOW_RUN_ID={ID} RELEASE_TAG=vX.Y.Z COMMIT_HASH={merged commit} ./tools/release.sh`
**Phase B — TypeScript SDK** (only after the server from Phase A is released and published)
- B1. Point the SDK at the released server (needed so verification tests the right binary, not a version bump)
- [ ] ⚠️ `@swmansion/smelter-node` downloads the server binary, so update `ts/smelter-node/src/manager/locallySpawnedInstance.ts` to the freshly released tag: `VERSION = 'vX.Y.Z'`, `REPO = 'software-mansion/smelter'` (remove the RC-repo lines)
- B2. Pre-publish verification (against the workspace SDK, before bumping versions)
- [ ] Test every `create-smelter-app` template (scaffold, build, run — confirms the new binary URL resolves)
- [ ] Run all `ts/examples` projects (already use the workspace SDK)
- The changelog options map ~one-to-one to TS SDK fields — modify an example to exercise the new/changed ones through the SDK:
- [ ] <the SDK-field-mapping options, mirroring Phase A>
- [ ] (server-config only, not SDK fields) <env-var options> — verified in Phase A
- B3. 📌 Create version-bump PR (only after verification passes)
- [ ] Run `pnpm bump-version` (sets package versions to `A.B.C` and removes `.pre-release.json` — commit that removal)
- [ ] Commit (including the `locallySpawnedInstance.ts` change from B1)
- [ ] Review + merge to `master`; create `ts-sdk/v0.B` branch
- B4. Publishing process
- [ ] Push the `ts-sdk/vA.B.C` tag → triggers `ts_publish` workflow (publishes all packages with `next` dist-tag)
- [ ] Re-test `create-smelter-app` templates against the published `next` packages
- [ ] Promote to latest — `npm dist-tag add @swmansion/smelter@A.B.C latest` (and each other package)
Creating the issue
Write the rendered body to a temp file and create the issue:
gh issue create --repo software-mansion/smelter \
--title "Release: Smelter server vX.Y.Z + TypeScript SDK A.B.C" \
--body-file /tmp/release-issue.md
Report the created issue URL back to the user.
If the user is releasing only the server or only the SDK, include just that phase, and drop the server↔SDK ordering/locallySpawnedInstance.ts coupling (it only matters when both are released together).