Release Crate
r3bl-org/r3bl-open-core
Publish a crate release to crates.io with changelog, standalone release notes, git tag, and GitHub release.
Prepare and publish a project release with version updates, changelog generation, tagging, and validation
$ npx skills add termide/termide --skill release-management -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install termide/termide release-management --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/termide/termide.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/release-management .claude/skills/release-management && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "release-management" agent skill from https://github.com/termide/termide/tree/main/.agents/skills/release-management into .claude/skills/release-management/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-management", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/termide/termide/tree/main/.agents/skills/release-managementType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add termide/termide --skill release-management -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install termide/termide release-management --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/termide/termide.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/release-management .agents/skills/release-management && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release-management" agent skill from https://github.com/termide/termide/tree/main/.agents/skills/release-management into .agents/skills/release-management/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-management", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add termide/termide --skill release-management -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install termide/termide release-management --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/termide/termide.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/release-management .cursor/skills/release-management && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "release-management" agent skill from https://github.com/termide/termide/tree/main/.agents/skills/release-management into .cursor/skills/release-management/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-management", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/termide/termide.git --path .agents/skills/release-management--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add termide/termide --skill release-management -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install termide/termide release-management --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/termide/termide.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/release-management .gemini/skills/release-management && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "release-management" agent skill from https://github.com/termide/termide/tree/main/.agents/skills/release-management into .gemini/skills/release-management/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-management", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install termide/termide release-managementInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add termide/termide --skill release-management -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/termide/termide.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/release-management .github/skills/release-management && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "release-management" agent skill from https://github.com/termide/termide/tree/main/.agents/skills/release-management into .github/skills/release-management/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-management", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add termide/termide --skill release-management -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install termide/termide release-management --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/termide/termide.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/release-management .opencode/skills/release-management && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "release-management" agent skill from https://github.com/termide/termide/tree/main/.agents/skills/release-management into .opencode/skills/release-management/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-management", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
release-managementPrepare and publish a project release with version updates, changelog generation, tagging, and validation
Release Management is an agent skill from termide/termide. Prepare and publish a project release with version updates, changelog generation, tagging, and validation
Its SKILL.md is about 6.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Open source maintenance and Changelog and release notes. It works with Git, Model Context Protocol, Rust and SQL. The repository describes itself as: All-in-one terminal workspace for desktops and servers: editor with LSP, file manager with SFTP/FTP, terminal, git, database viewer and a coding agent in one zero-config static… The licence is MIT.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 5c550fc. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitcargoghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Release Management loads about 6.8k tokens when it runs. Until then it costs about 31 tokens; SKILL.md has 2,182 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from termide/termide at commit 5c550fc, republished under its MIT licence (© termide). 2,182 words, ~6,750 tokens.
.claude/skills/release-management/SKILL.md (or your agent's skills folder).Comprehensive release management workflow for TermIDE project that ensures code quality, version consistency, and proper changelog documentation before creating releases.
Platform note: agents that support extra frontmatter fields may add their own permission hints around this skill. Agents that do not support them should ignore unsupported fields and follow the workflow below. When interactive prompts or inline editing are unavailable, use the closest equivalent workflow the platform provides.
Invoke this skill when you need to:
This skill follows a comprehensive 12-step workflow:
CRITICAL: These checks must pass before proceeding with release
Run these commands in sequence. If ANY fail, stop immediately and report errors:
# 1. Format check
cargo fmt --check
# 2. Clippy strict mode
cargo clippy -- -D warnings
# 3. Run test suite
cargo test
# 4. Release build check
cargo build --releaseError Handling:
cargo fmt --check fails: Show diffs and suggest running cargo fmtcargo clippy fails: Show warnings/errors, suggest fixing before releasecargo test fails: Show failed tests, abort releasecargo build --release fails: Show build errors, abort releaseOutput to user:
🔍 Pre-Release Quality Checks
✅ Code formatting (cargo fmt --check)
✅ Linter checks (cargo clippy)
✅ Test suite (49 passed, 4 ignored)
✅ Release build
All quality checks passed! Proceeding with release...This is editorial work, not mechanical commit-parsing. The goal is a
human-readable changelog, so the agent must understand what happened in
the release, not just translate git log line-by-line.
Collect raw material from three sources, then synthesize it into themes (see "Synthesis" below before writing anything to CHANGELOG).
git status --porcelain
git diff --statParse output to detect:
# Get last tag
last_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
# Get commits since tag (use full subjects + bodies, not just --oneline)
if [ -n "$last_tag" ]; then
git log ${last_tag}..HEAD --no-decorate --pretty=fuller
else
git log --no-decorate --pretty=fuller
fiConventional commit type is a hint for categorization, never the final word. Always cross-check with the actual diff before placing the change under Added / Changed / Fixed:
feat: → usually Addedfix: → usually Fixeddocs: → Changed only if user-visible behavior or workflow changedrefactor: / perf: → Changed only if user-observable; otherwise dropchore: / style: → almost never in changelogBREAKING CHANGE: (footer) → call out explicitly regardless of typeFor each commit between tag and HEAD, check what actually changed in files:
# For each commit
git log ${last_tag}..HEAD --format="%H" | while read commit_hash; do
git show --stat $commit_hash
doneThis reveals:
If a commit message says "feat: add X" but the diff only touches tests or unrelated files, trust the diff, not the message.
Git history contains a lot of noise the user will not want to read. Before writing the changelog, collapse the log into themes. A theme is a single user-visible change, possibly spanning many commits.
Drop entirely (do not surface to user as changelog candidates):
Collapse together (one changelog line per theme, not per commit):
Keep, with rewording:
Pull from git show <hash> for context when a commit subject is
cryptic but the diff is meaningful — write the changelog from the diff.
Verify the synthesis pass actually happened: if the resulting bullet count is roughly equal to the commit count, you almost certainly did not collapse anything. Re-read the log and merge follow-ups.
Output structure (raw analysis stage, before drafting CHANGELOG):
Changes Analysis:
==================
Uncommitted Changes:
- Modified: src/main.rs, Cargo.toml
- Added: CHANGELOG.md
Commits Since 0.2.0 (raw):
- 6d2e247 refactor: remove FileManager special handling
- 4e7c694 feat: migrate to XDG Base Directory Specification
- 6509fdb feat: implement session autosave
- a1b2c3d fix: typo in autosave
- d4e5f6a fix(autosave): debounce write
- 7890abc chore: clippy
Themes (after synthesis):
- XDG Base Directory Specification support [4e7c694]
- Automatic session persistence with debounced writes [6509fdb + d4e5f6a, typo and clippy folded in]
- FileManager is now a regular closable panel — BREAKING [6d2e247]
Dropped as noise:
- a1b2c3d (typo, folded into autosave entry)
- 7890abc (clippy-only)These themes, not the raw commit list, are what Step 7 turns into CHANGELOG entries.
Check version in multiple files and detect inconsistencies:
# Cargo.toml (primary source)
cargo_version=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/')
# flake.nix
flake_version=$(grep 'version = ' flake.nix | head -1 | sed 's/.*version = "\(.*\)";/\1/')
# Last git tag
git_version=$(git describe --tags --abbrev=0 2>/dev/null || echo "none")If versions match: Use that version as current.
If versions differ: Show table and ask user:
⚠️ Version Mismatch Detected:
File Version
-------------------------------------
Cargo.toml 0.2.0
flake.nix 0.1.5 ⚠️
Last git tag 0.2.0
Which version is correct as the current version?
1. 0.2.0 (Cargo.toml + git tag)
2. 0.1.5 (flake.nix)
3. Other (specify manually)Use the platform's interactive prompt mechanism for this decision.
Show current version and offer version bump options:
Current version: 0.2.0
Select release type:
1. patch (0.2.0 → 0.2.1) - Bug fixes, minor changes
2. minor (0.2.0 → 0.3.0) - New features, backwards compatible
3. major (0.2.0 → 1.0.0) - Breaking changes
4. custom - Enter specific version (e.g., 0.2.5)
5. recreate 0.2.0 - Recreate existing tag (for failed CI/CD)Use the platform's interactive prompt mechanism with options:
For custom: Prompt for version string, validate format (X.Y.Z).
For recreate: Ask confirmation:
⚠️ Are you sure you want to recreate tag 0.2.0?
This will:
- Delete local tag 0.2.0
- Delete remote tag 0.2.0 (if pushed)
- Create new tag 0.2.0 with current HEAD
This is typically done when CI/CD failed and you fixed the issues.
Proceed? [yes/no]Update version NEW_VERSION in these 10 files (plus Cargo.lock). Build the
authoritative list first, so a file added since this skill was written is not
missed:
git grep -c 'OLD_VERSION_ESCAPED' -- ':!CHANGELOG.md' ':!Cargo.lock'(OLD_VERSION_ESCAPED is OLD_VERSION with the dots escaped, e.g. 0\.35\.0.)
Every hit below is the release version itself, so a literal replace of all
occurrences is safe in each file; review the grep output once in case a new
file shows up with an unrelated match.
[workspace.package]
version = "NEW_VERSION"Line 9 (under [workspace.package], which every crate inherits), exact match:
version = "OLD_VERSION"
version = "NEW_VERSION";One in packages.default (around line 84) and one in packages.termide-static
(around line 117). Both are the exact match version = "OLD_VERSION"; — use
replace_all=true.
All occurrences are release asset file names in download URLs and commands:
termide-OLD_VERSION-x86_64-unknown-linux-gnu.tar.gz (also musl, aarch64, apple-darwin)
termide-OLD_VERSION-x86_64-pc-windows-msvc.zip
termide_OLD_VERSION-1_amd64.deb
termide-OLD_VERSION-1.x86_64.rpmReplace all occurrences of OLD_VERSION (note the .deb uses termide_, so a
termide-VERSION- pattern alone would miss it). URLs go through
releases/latest/download/, so there is no version in the URL path itself.
Same asset names as the READMEs; replace all occurrences.
pkgver=NEW_VERSIONLine 4, simple replacement. Reset pkgrel=1 if it was bumped.
pkgver=NEW_VERSIONLine 4, simple replacement. Reset pkgrel=1 if it was bumped.
The workspace crates' versions in Cargo.lock follow Cargo.toml, and the AUR
build uses cargo fetch --locked, so the lock file must be committed with the
new version. Refresh it after editing Cargo.toml:
cargo update --workspaceThis touches only the workspace members' entries, not dependency versions.
Not bumped: packaging/crates-io-redirect/ is a standalone tombstone crate
for the termide name on crates.io. Its version is unrelated to the release
(it must exceed the crates.io maximum and is set only when that crate is
republished by hand) — leave it alone. There is no Homebrew formula in the tree.
Batch Update Strategy: All files above can be updated in one pass (the version is not a substring of anything else in them):
git grep -l 'OLD_VERSION_ESCAPED' -- ':!CHANGELOG.md' ':!Cargo.lock' \
| xargs sed -i '' 's/OLD_VERSION_ESCAPED/NEW_VERSION/g' # GNU sed: -i without ''
cargo update --workspaceOr use the Edit tool with replace_all=true per file.
Verification: After updates, grep for the old version to ensure all replaced — this must print nothing:
git grep -n 'OLD_VERSION_ESCAPED' -- ':!CHANGELOG.md'Cargo.lock is included on purpose: a leftover there means the workspace
entries were not refreshed (unless a third-party dependency happens to share
the old version number — check the name above any hit). Then confirm the new version landed everywhere
with the expected counts (Cargo.toml 1, flake.nix 2, each README 23, each
installation.md 16, each PKGBUILD 1):
git grep -c 'NEW_VERSION_ESCAPED' -- ':!CHANGELOG.md' ':!Cargo.lock'After version updates, prompt user to review documentation:
📝 Documentation Review
Version numbers have been updated in:
- README.md
- README.ru.md
- README.zh.md
- doc/en/installation.md
- doc/ru/installation.md
- doc/zh/installation.md
Please review these files for content accuracy:
Required reviews (version-critical):
✅ README.md - Download links updated
✅ README.ru.md - Download links updated
✅ README.zh.md - Download links updated
✅ doc/en/installation.md - Installation steps updated
✅ doc/ru/installation.md - Installation steps updated
✅ doc/zh/installation.md - Installation steps updated
Optional reviews (feature changes):
⚠️ README.md - Features list (check if new features added)
⚠️ doc/en/*.md - Feature documentation (check if needs updates)
⚠️ doc/ru/*.md - Russian translations (check if needs updates)
⚠️ doc/zh/*.md - Chinese translations (check if needs updates)
Based on the changes analysis:
- FileManager refactoring: May need architecture.md updates (DONE)
- Session autosave: May need configuration docs update
- XDG migration: May need installation docs update
Do you want to:
1. Proceed with release (docs are current)
2. Pause to update docs manually (I'll wait)
3. Cancel release (need more work)Use the platform's interactive prompt mechanism.
If user selects "Pause", inform them:
✋ Release paused for documentation updates.
When you're done:
- Commit documentation changes separately, OR
- Leave them uncommitted to include in release commit
Then re-run this skill to continue.The CHANGELOG is written for humans reading release notes, not for agents reading git history. Work from the themes produced by Step 2 synthesis, not from the raw commit log.
Read current CHANGELOG.md to determine insert position (after header, before first ## version).
Generate new section:
## [NEW_VERSION] - YYYY-MM-DD
### Added
[New user-facing capabilities — one bullet per theme, not per commit]
### Changed
[Modified behavior the user will notice — workflow, defaults, UX, perf]
### Fixed
[Bugs described as the user saw them, not as the diff fixed them]
### Removed
[Features or options no longer available — call out migration if any]
[NEW_VERSION]: https://github.com/termide/termide/releases/tag/NEW_VERSIONWriting rules:
One theme = one bullet. Multiple commits that landed the same feature collapse into a single bullet. Three follow-up bugfixes for the same feature do not deserve three Fixed entries in the same release — fold them into the feature's Added/Changed bullet.
Describe effect, not implementation. The reader does not know the module names. "Faster startup on large projects" beats "lazy-load tree-sitter parsers". "Cancel button now actually cancels the transfer" beats "wire OperationManager::cancel through chunk-as- command actor".
Drop pure noise. Themes the synthesis pass marked as noise/dropped do not appear in the changelog at all. If a fix only matters to maintainers, it is not changelog material.
Be specific where it matters. Vague entries ("various improvements", "bug fixes") are worse than nothing — either name the improvement concretely or drop the bullet. If you can't say what improved, the synthesis pass was incomplete.
Call out breaking changes loudly. Either a dedicated ### Breaking Changes subsection at the top, or a **BREAKING:** prefix on the
relevant bullet. Include the migration step or workaround.
Past tense, declarative voice. "Added X.", "Fixed Y.". Not "This release adds X" and not "X has been added".
No commit hashes, no PR numbers in the bullets themselves. Link them at the bottom of the section if useful, but keep the bullets readable for someone scanning the release notes.
Sanity-check the draft against the raw log:
git log --oneline | sed, the
synthesis didn't happen — rewrite it.Show draft to user and allow editing:
Generated CHANGELOG entry:
## [0.3.0] - 2025-12-05
### Added
- XDG Base Directory Specification support for config/data/cache
- Automatic session persistence with configurable retention
- CHANGELOG.md with full project history
### Changed
- **BREAKING:** FileManager is now a regular closable panel.
Existing sessions will load with the default layout (2 FM panels).
- Simplified layout architecture
### Fixed
- Sessions no longer require special FileManager handling and
serialize cleanly
Do you want to:
1. Use this changelog as-is
2. Edit it manually before proceeding
3. Regenerate with different categorizationUse the platform's interactive prompt mechanism or allow inline editing when supported.
Insert into CHANGELOG.md:
Find line after # Changelog header and first blank line, insert new section.
Update version links at bottom: Add new link after existing ones:
[0.3.0]: https://github.com/termide/termide/releases/tag/0.3.0After all file updates, run quality checks again to ensure changes didn't break anything:
cargo fmt --check
cargo clippy -- -D warnings
cargo test
cargo build --releaseIf any check fails:
❌ Post-update quality check failed!
The version/changelog updates may have introduced issues:
[show specific error]
This could happen if:
- Version string appears in code (not just metadata)
- CHANGELOG.md has syntax errors
- Documentation updates broke something
Please fix the issues and restart the release process.Abort if checks fail.
Check for uncommitted changes:
git status --porcelainStage all changes:
git add -AGenerate commit message:
Format: Conventional Commits
chore: release version NEW_VERSION
Major changes:
- [bullet point 1 from changelog Added/Changed sections]
- [bullet point 2]
- [bullet point 3 if significant breaking change]
[Footer: only if BREAKING CHANGE]
BREAKING CHANGE: [description]Example:
chore: release version 0.3.0
Major changes:
- Add XDG Base Directory Specification support
- FileManager is now a regular panel (not fixed left panel)
- Automatic session persistence with cleanup
BREAKING CHANGE: FileManager is no longer a special fixed panel.
Existing sessions will load with default layout (2 FM panels).Create commit:
git commit -m "chore: release version NEW_VERSION
[generated body]"Verify commit:
git log -1 --oneline
git show --stat HEADShow to user:
✅ Release commit created:
abc1234 chore: release version 0.3.0
Files changed:
- Cargo.toml
- Cargo.lock
- flake.nix
- README.md
- README.ru.md
- README.zh.md
- doc/en/installation.md
- doc/ru/installation.md
- doc/zh/installation.md
- packaging/aur/*
- CHANGELOG.md
12 files changed, 87 insertions(+), 42 deletions(-)Tag format: NEW_VERSION (NO 'v' prefix)
Check if tag exists:
if git rev-parse NEW_VERSION >/dev/null 2>&1; then
# Tag exists
fiFor recreate mode:
# Delete local tag
git tag -d NEW_VERSION
# Delete remote tag (if exists)
git push origin :refs/tags/NEW_VERSION 2>/dev/null || trueCreate annotated tag:
git tag -a NEW_VERSION -m "Release NEW_VERSION"Verify tag:
git show NEW_VERSION --no-patchShow to user:
✅ Git tag created:
Tag: 0.3.0
Commit: abc1234 chore: release version 0.3.0
Message: Release 0.3.0IMPORTANT: Ask user before pushing!
🚀 Ready to Push Release
This will push to origin (github.com/termide/termide):
- Commit: abc1234 chore: release version 0.3.0
- Tag: 0.3.0
This will:
1. Push commit and tag to GitHub
2. Create GitHub Release with CHANGELOG description
3. Trigger GitHub Actions workflow which will:
- Run quality checks (fmt, clippy, test)
- Build cross-platform binaries (Linux x86/ARM, macOS x86/ARM)
- Build .deb packages (Debian/Ubuntu)
- Build .rpm packages (Fedora/RHEL)
- Upload artifacts to the Release
Expected workflow duration: ~15-20 minutes
Do you want to push now? [yes/no]Use the platform's interactive prompt mechanism.
If yes:
# Push commit and tag
git push && git push origin NEW_VERSION
# Extract changelog section for this version
changelog_content=$(awk '/^## \[NEW_VERSION\]/{flag=1; next} /^## \[/{flag=0} flag' CHANGELOG.md)
# Create GitHub release with changelog as description
gh release create NEW_VERSION \
--title "Release NEW_VERSION" \
--notes "$changelog_content"If no:
Release prepared locally but not pushed.
To push later, run:
git push && git push origin 0.3.0
changelog=$(awk '/^## \[0.3.0\]/{flag=1; next} /^## \[/{flag=0} flag' CHANGELOG.md)
gh release create 0.3.0 --title "Release 0.3.0" --notes "$changelog"
To undo this release:
git tag -d 0.3.0
git reset --hard HEAD^Show comprehensive release summary:
✅ Release 0.3.0 Created Successfully!
📦 Commit: abc1234 chore: release version 0.3.0
🏷️ Tag: 0.3.0
🚀 Pushed to: github.com/termide/termide
📊 Release Stats:
- Files updated: 12
- CHANGELOG sections: Added (3), Changed (3), Fixed (1)
- Quality checks: All passed ✅
🔗 Links:
- Release: https://github.com/termide/termide/releases/tag/0.3.0
- CI/CD Status: https://github.com/termide/termide/actions
⏱️ GitHub Actions Workflow:
The release workflow is now running. Expected completion: 15-20 minutes.
Workflow steps:
1. ✅ Trigger received (tag push)
2. ⏳ Quality checks (fmt, clippy, tests)
3. ⏳ Build binaries (4 platforms)
4. ⏳ Build .deb packages
5. ⏳ Build .rpm packages
6. ⏳ Create GitHub Release
You can monitor progress at:
https://github.com/termide/termide/actions/workflows/release.yml
📧 Notifications:
GitHub will send you an email when the release is published.If git status --porcelain shows uncommitted changes:
⚠️ Uncommitted changes detected:
M src/main.rs
M Cargo.toml
Options:
1. Include in release commit
2. Commit separately first (pause release)
3. Stash and continue (not recommended)
4. Cancel release❌ Tag 0.3.0 already exists!
This tag was created: 2025-12-04 19:03:10
Options:
1. Cancel and use different version (0.3.1?)
2. Switch to recreate mode (delete and recreate tag)
3. Delete tag manually and restart releaseFor any failing check, show:
❌ [Check Name] Failed
[Full error output]
Common fixes:
- cargo fmt failure: Run `cargo fmt` to fix formatting
- cargo clippy failure: Fix warnings shown above
- cargo test failure: Fix failing tests
- cargo build failure: Fix compilation errors
After fixing, restart the release process.❌ Failed to push to origin
Error: [git error message]
The release commit and tag are created locally but not pushed.
To retry push:
git push && git push origin 0.3.0
To undo release:
git tag -d 0.3.0
git reset --hard HEAD^User invokes skill by saying:
Read - Read files for version detection and changelogEdit - Update version strings in filesBash - Run git commands and quality checksGrep - Find version occurrencesA successful release execution should:
When updating this skill:
© termide, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/release-management of termide/termide.
Open the folder on GitHubat commit 5c550fc
Release Management next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Release Management this skilltermide/termide | 171 | — | ~6.8k | Automated safety check: Pass | MIT | |
| Release Crater3bl-org/r3bl-open-core | 485 | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Mole Release Notes Publishertw93/Mole | 69k | — | ~1.9k | Automated safety check: Pass | GPL-3.0 | |
| Worktrunk Release Workflowmax-sixty/worktrunk | 8.9k | — | ~6.9k | Automated safety check: Pass | Custom licence | |
| Releasexin2017338/lynx-proxy | 502 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Prepare Releasefrozenlib/parse-display | 193 | — | ~1.3k | Automated safety check: Pass | Apache-2.0 |
r3bl-org/r3bl-open-core
Publish a crate release to crates.io with changelog, standalone release notes, git tag, and GitHub release.
tw93/Mole
Publishes curated, bilingual release notes for an existing Mole version tag with gh release edit, including contributor thanks and reactions, after the release workflow finishes.
max-sixty/worktrunk
Walks a maintainer through cutting a Worktrunk release: sync the release branch, pass two test gates, review the changes, then publish.
xin2017338/lynx-proxy
Publish a new release version of Lynx Proxy. An agent skill from xin2017338/lynx-proxy.
frozenlib/parse-display
Prepare parse-display release changes before publishing with a Rust Cargo script when nightly Cargo is available.
wesammustafa/opencode-primer
Draft release notes from merged PRs, propose a semver bump, and emit a copy-pasteable gh release create command.
Works with
Categories
Prepare and publish a project release with version updates, changelog generation, tagging, and validation. Release Management is an agent skill from termide/termide.
Release Management fits situations like: tasks that involve Open source maintenance; tasks that involve Changelog and release notes.
Run `npx skills add termide/termide --skill release-management -a claude-code`. Or copy the skill folder (.agents/skills/release-management in termide/termide) into .claude/skills/release-management in your project. Claude Code loads it when a task matches its description.
Run `npx skills add termide/termide --skill release-management -a codex`. Or copy the skill folder (.agents/skills/release-management in termide/termide) into .agents/skills/release-management in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add termide/termide --skill release-management -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release-management, .gemini/skills/release-management, .github/skills/release-management and .opencode/skills/release-management in your project.
Going by SKILL.md and its folder, Release Management needs the command-line tools its instructions call (git, cargo and gh).
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Release Management is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.8k tokens (SKILL.md is roughly 27k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Release Management: Release Crate (r3bl-org/r3bl-open-core, 485 stars), Mole Release Notes Publisher (tw93/Mole, 69k stars), Worktrunk Release Workflow (max-sixty/worktrunk, 8.9k stars) and Release (xin2017338/lynx-proxy, 502 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
termide (a GitHub organization) maintains it in termide/termide, which has 171 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 6, 2026.
Source: termide/termide on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.