.agents/skills/release-cog/SKILL.md
This skill helps you release new versions of Cog. Cog is a multi-language, multi-artifact project with a carefully orchestrated release process.
Cog releases include:
| Type | Format | Example | Branch | PyPI | crates.io | Homebrew |
|---|---|---|---|---|---|---|
| Stable | v0.17.0 | v0.18.0 | main | ✓ | ✓ | ✓ |
| Pre-release | v0.17.0-alpha3, v0.17.0-rc1 | v0.18.0-rc1 | main | ✓ | ✓ | ✗ |
| Dev | v0.17.0-dev1 | v0.18.0-dev2 | any | ✗ | ✗ | ✗ |
# Check current version
mise run version
# Bump to new version (updates VERSION.txt, Cargo.toml, Cargo.lock, commits)
mise run version:bump 0.18.0
git checkout -b release/v0.18.0
git push origin release/v0.18.0
# Open a pull request to main, get it reviewed and merged. Then you can create the release tag from main.
gh pr create --base main --head release/v0.18.0 --title "Release v0.18.0" --body "Release description and notes"
git checkout main && git pull origin main
# For stable release
git tag v0.18.0
git push origin v0.18.0
# For pre-release
git tag v0.18.0-rc1
git push origin v0.18.0-rc1
# For dev release (can be from any branch)
git tag v0.18.0-dev1
git push origin v0.18.0-dev1
# Watch the release build workflow
gh workflow view release-build.yaml
# Or watch in real-time
gh run watch
release-publish.yaml which publishes to PyPI and crates.iorelease-build.yaml - Triggered on version tags
release-publish.yaml - Triggered when release is published
homebrew-tap.yaml - Updates Homebrew cask
.github/cog.rb.tmplreplicate/homebrew-tap| File | Purpose |
|---|---|
VERSION.txt | Canonical version (single source of truth) |
crates/Cargo.toml | Rust workspace version |
crates/Cargo.lock | Locked dependency versions |
The SDK (pyproject.toml) has a dependency on coglet:
coglet>=0.1.0,<1.0
During release build, this is updated to:
coglet>=0.18.0,<1.0
This ensures the SDK depends on the matching coglet version.
Before creating a release tag:
mise run testmise run lintVERSION.txtmise run version:check passescrates/Cargo.toml matches VERSION.txtmise run docs:llm)Version mismatch! VERSION.txt has X but tag is vY
Fix: Run mise run version:bump Y, push, then re-tag.
Release tags must be on the main branch
Fix: Merge your changes to main, then tag from main.
gh release delete v0.18.0 --yesgit push --delete origin v0.18.0 && git tag -d v0.18.0If the automated publish fails:
# Download wheels from GitHub release
gh release download v0.18.0 -p "coglet-*.whl" -D dist
gh release download v0.18.0 -p "cog-*.whl" -D dist
# Publish with twine
twine upload dist/coglet-*.whl # First!
twine upload dist/cog-*.whl # After coglet is uploaded
pypi, crates-io, and homebrew environments in GitHub repo settingsdist/ at Docker build time, not embedded in binary