3.6 KiB
name, description
| name | description |
|---|---|
| release-cut | Use when preparing, cutting, tagging, publishing, or verifying an IPTVnator release or its release assets. |
Release Cut
Full contract, asset table and rationale: docs/architecture/release-pipeline.md.
For imagegen announcement covers, reuse the approved artwork prompt.
The tag workflow authors the public GitHub body with
node tools/release/extract-changelog-section.mjs --public "${VERSION}".
Keep the full changelog, including internal notes, committed before tagging.
Preflight
Work from clean, current master with the intended remote named explicitly.
Confirm package.json contains bare semver, the exact v<version> tag does not
exist locally or remotely, CI is green, and all notes validate.
pnpm run release:notes:validate
pnpm run i18n:check
Generate
- Set
package.json.version. - Run
pnpm run release:notes:changelog. - Minor release: run
pnpm run release:notes:blogand finish every editorial field. Patch release: edit the existingvX-Ypost; do not scaffold or force-overwrite it. - Capture required manifest screenshots only against mock servers:
pnpm nx run electron-backend:build-e2e, thenpnpm run release:screenshots. - Render the announcement drafts, saving output outside the repository:
pnpm --silent run release:notes:telegramand the:redditcounterpart (--silent, or pnpm's lifecycle banner lands in the saved post). - Render highlight cards after the screenshots:
pnpm run release:cards:generate. Review them; copyhero.jpginto the blog post's asset directory if it should ship as the hero image. - Consume notes only after reviewing all generated output:
node tools/release/build-release-notes.mjs --consume.
Steps 5 and 6 must precede --consume: highlight: exists only in the note
files it deletes. Publishing announcements is manual, after the release.
The consume command is the destructive boundary: it deletes the direct note
files. Stage only release-owned files, including exact website post/assets and
git add -A -- .changes, then commit and create the exact tag.
git commit -m "chore(release): v0.24.0"
git tag v0.24.0
Push and External Effects
Push the named remote's master branch first, then push only the exact
v<version> tag as a second command. Never use broad git push --tags.
For remote upstream and version v0.25.1, run exactly:
git push upstream master
git push upstream v0.25.1
Master and v* pushes can publish Docker images. The tag build creates a draft
GitHub release. Run pnpm run release:verify:draft — it waits for the tag
build, then checks draft status, warns on an empty authored body, and verifies
the complete 27-asset set documented in docs/architecture/release-pipeline.md.
It is read-only, and fails on an already-published release. Still review the
authored text and generated commits by eye.
Manually publish the release; this verifies and uploads Snaps
to edge. Installed-Snap smoke and candidate/stable promotion stay manual.
After public-asset verification, publish the draft blog and update
apps/website/released-version.json to the published version together.
Follow the release pipeline's offline-download checks and verify deployment;
never use the development/nightly version for this pin.
Failure Safety
Missing CHANGELOG section: regenerate, commit, delete the bad tag locally and remotely only after resolving its exact target, then retag. Never publish a draft until the source archive and Snap contract pass.
The .codex and .claude copies of this skill must remain byte-identical.