Cut a release — commit any staged changes, tag, create GitHub release, and optionally notify Webex. Use when the user says /release, /release --with-webex, or /release --preview.
Instal·la
npx skillscat add mycelium-io/mycelium/release Instal·la des del registre de SkillsCat.
Release
Commit latest changes (if any), tag, cut a GitHub release, and optionally notify Webex.
Arguments
--with-webex— after releasing, post a summary to Webex (default:Mycelium Release Notesonly; add--with-webex=engto also post toIoC::Mycelium Eng).--preview— cut a prerelease build for testing without affecting stable users. Skips Docker:latest, Homebrew, and ClawHub. Webex still gets a short preview ping (eng channel only — not user-facing release notes). Testers opt in viamycelium upgrade --version <tag>.
Why preview releases are safe
The release pipeline's "promote to latest" steps (Docker :latest tags, GH "Latest" label, Homebrew formula, ClawHub) are gated on the tag matching a stable pattern. Tags containing rc, alpha, beta, or preview are detected as prereleases by the detect-release-type job in .github/workflows/release.yml and bypass all of those.
install.sh and mycelium upgrade both follow the GitHub /releases/latest redirect, which only resolves to releases NOT marked as prerelease. So stable users never see preview builds. Testers install with an explicit version pin.
Steps
Commit staged changes — Run
git status. If there are uncommitted changes, run /precommit checks then commit directly to main (admin push, no PR needed). Use a conventional commit message.For
--preview: do NOT commit apyproject.tomlversion bump to main. The release workflow seds the version in-place during the build only — main keeps tracking the next stable version, not the preview.Determine next tag —
- Stable (
/release): Rungh release list --limit 5to find the current "Latest" release tag. Increment the patch version (e.g.v1.0.0→v1.0.1). - Preview (
/release --preview): Find the latest stable tag (highest non-prerelease ingh release list). Target version is<latest-stable-patch+1>. Then check existing prereleases for that target: ifvX.Y.Zrc1exists, cutvX.Y.Zrc2, etc. First preview for a target version is alwaysrc1. Use PEP 440 format with no separator (vX.Y.ZrcN, NOTvX.Y.Z-rc.N) so the wheel filename matches whatinstall.shexpects.
- Stable (
Generate the CHANGELOG.md entry — Stable only. Skipped for
--preview: prerelease iterations get rolled up into the next stable's entry, not their own.No
[Unreleased]block is maintained onmain. Each release's section is derived fromgit log <prev-stable-tag>..HEAD --no-merges --onelineat release time. Group commits by conventional-commit prefix:feat:→ Addedfix:→ Fixedrefactor:,perf:,chore:, dependency bumps, infra → Changed- revert / deletion commits → Removed
Skip pure
docs:,style:,test:,ci:commits unless they materially affect users. Reword each line to user-facing language (drop the prefix, keep PR links). Prepend the new section directly under the header preface — do NOT touch older entries.Commit the changelog update directly to
main(admin push, no PR) with messagechore(release): changelog for <tag>. This commit must land before the tag is pushed so the tag points at the commit that includes its own entry.Tag and push — Run:
git tag <new-tag> && git push origin <new-tag>The
release.ymlworkflow detects whether the tag is a prerelease and gates the rest of the pipeline accordingly.Create GitHub release — The
release.ymlworkflow handles this automatically (viasoftprops/action-gh-release), including settingprerelease: truefor preview tags. No manualgh release createneeded.A stable release also publishes the docs site from its tag (the
Publish the docs sitejob,pages.yml); a preview does not.Wait for the workflow to finish (
gh run watchorgh run list --workflow=release.yml --limit 1). If it fails, fix and re-run before posting any notifications.Webex notification — Invoke
/webex(no confirmation needed). Behavior depends on whether this is a stable or preview release.Stable release — when
--with-webexis passed, post a bullet-point changelog summary with the tag and release URL. Each bullet should include the PR link if one exists (e.g.- feat: description ([#123](https://github.com/mycelium-io/mycelium/pull/123))). End the summary with a markdown link to the full changelog:[Full changelog](https://github.com/mycelium-io/mycelium/blob/main/CHANGELOG.md). Follow with upgrade instructions using triple-backtick code blocks so they're copyable:To upgrade: mycelium upgrade && mycelium pull mycelium doctor # to check health of servicesPost to:
Mycelium Release Notes— always (room ID in/webexskill)IoC::Mycelium Eng— only if--with-webex=engwas passed (room ID in/webexskill)
Preview release (
--preview) — post a short eng-only ping toIoC::Mycelium Eng(NOTMycelium Release Notes— that channel is user-facing). No changelog. Use--markdownso the code blocks render. Just the tag, the GH release URL, and the install/upgrade commands testers need:Preview build cut: <tag> <release-url> Test on a fresh server: ```bash MYCELIUM_VERSION=<tag-without-v> curl -fsSL https://mycelium-io.github.io/mycelium/install.sh | bash -s -- --docker mycelium pull --version <tag-without-v>Or upgrade in place:
mycelium upgrade --version <tag-without-v> mycelium pull --version <tag-without-v>Roll back:
mycelium upgrade --version <previous-stable> mycelium pull --version latest`mycelium pull --version <tag>` is the critical second step — it pins the `mycelium-backend` and `mycelium-frontend` images via `MYCELIUM_IMAGE_TAG` in `~/.mycelium/.env`. Without it, the new CLI runs against stale stable containers. Stable users are unaffected — `install.sh` and `mycelium upgrade` (no `--version`) still resolve to the latest stable, and `mycelium pull` (no `--version`) still pulls `:latest`.Mycelium patch notes — Skipped for
--preview(or scope to apreviews/<tag>key if the user explicitly asks for it). Otherwise write the same changelog summary to the active Mycelium room:mycelium memory set "releases/<tag>" "<same bullet-point summary as Webex>" --handle claude-code-agentThis keeps a persistent record of what shipped and when, visible to all agents sharing the room.