| name | release |
| description | Prepare and execute a CyrFlip РЕЛИЗ — the paid, outward-facing path. Write "What's new in version XXX" and propagate it to all four surfaces, run preflight, push the tag to trigger the signed GitHub build, then publish to winget, Microsoft Store, and the VS Code Marketplace via a checklist so nothing is forgotten. Use when the user asks to release, publish, cut a version, or ship. |
/release — РЕЛИЗ (publish a version)
A РЕЛИЗ is the paid, outward-facing path: it spends GitHub minutes (signing + packaging)
and publishes to external stores. Do it deliberately, never to "just test". The free,
iterative loop is /build. Concept reference: RELEASE.md.
This skill is the order of work + the don't-lose-anything checklist. release.ps1
automates the safe core (preflight, tag, push); everything external is driven from the
checklist below. Do not skip steps — a forgotten store or stale "What's new" is the
failure mode this exists to prevent.
Phase 0 — Decide and gather
- Confirm the user really wants a РЕЛИЗ (paid), not a
/build.
- Confirm the working tree is clean — all сборки committed. If not, finish
/build first.
- Decide the version
YY.M.D.HHmm (default = now; release.ps1 computes it). The tag is
vYY.M.D.HHmm.
- Gather "What's new in version XXX" — collect every user-facing change since the last
release (read
git log <last-tag>..HEAD, the ## Unreleased notes in
vscode-extension/CHANGELOG.md, and anything /build
captured). Draft 2–5 short bullets in EN / RU / UK (the project ships all three).
Phase 1 — Write "What's new" to ALL surfaces (before tagging)
The same notes must land in four places. Missing one ships a release with stale notes:
Also update README EN/RU + the site under docs/ (the trilingual root page, the EN/RU/UK guides and
the 13 language first pages) if user-facing behaviour changed. Commit
these doc changes as a normal /build commit first (they ride to GitHub Pages on push).
Phase 2 — Preflight (free, no git changes, no GitHub minutes)
.\release.ps1
Runs on-main + dirty-tree reporting, a full local build + test, the listing-mirror drift check
(render-listing-mirrors.ps1 -Check), computes the version, and prints the checklist. If anything
is red — fix it now, before spending a minute on GitHub.
Phase 3 — Trigger the signed GitHub build (this spends minutes)
.\release.ps1 -Push
Creates the empty release: vX anchor commit (no [skip ci], so the tag's workflow runs; the
release: prefix makes ci.yml skip the branch push → no double-bill), tags vX, pushes
branch + tag. The tag fires release.yml → signed CyrFlip-<ver>-windows-x64.zip + .sha256
- GitHub Release. Watch it (
gh run watch) and confirm it is green. Copy the ZIP asset URL
and the SHA256 from the run log — the next steps need them.
Phase 4 — Publish externally (manual; from the printed checklist)
Guardrails
- Never run
/release to test something — that's /build. A release costs money and touches
public stores.
- "What's new" goes to all four surfaces in the same version, or it isn't done.
- Don't tag from a commit carrying
[skip ci] (the workflow would be skipped) — release.ps1
handles this with the dedicated release: anchor commit. Don't hand-tag around it.
Done means
The GitHub Release is green and signed; "What's new in vXXX" is consistent across GitHub /
Store / winget / (extension); winget PR opened, Store submission created, extension published
where applicable; and the published artefact smoke-tested.