Automates the complete process of releasing a new version of the openclacky Ruby gem. Supports both stable releases (auto-increment) and pre-release versions (user-specified, e.g., 1.0.0.beta.1). Handles version bumping, testing, building, RubyGems publishing, GitHub Releases, and OSS CDN mirroring.
69
83%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Automates the complete openclacky gem release workflow via SKILL_DIR/scripts/release.sh.
/gem-releaseThe release script (SKILL_DIR/scripts/release.sh) handles everything end-to-end:
bundle exec rspec) + web search smoke tests (real network — verifies Bing/DDG parsers still work against live HTML)lib/clacky/version.rbGemfile.lock via bundle installgem build openclacky.gemspec)gem push)latest.txt on OSS (stable only, unless --update-latest)scripts/ to OSSRead current version:
grep 'VERSION =' lib/clacky/version.rbStable release (default): Increment patch version (e.g., 1.0.5 → 1.0.6). Confirm with user if unsure which part to bump (major/minor/patch).
Pre-release: Use the exact version the user specified (e.g., 2.0.0.beta.1). Before proceeding, warn about pre-release caveats (see section below).
This is the one step the agent handles manually — the script does not write changelog entries because it requires reviewing git history and exercising judgment.
Find the previous version tag:
git describe --tags --abbrev=0Gather commits since last release:
git log <previous_tag>..HEAD --onelineWrite a new section in CHANGELOG.md following this format:
## [X.Y.Z] - YYYY-MM-DD
### Added
- Feature description
### Improved
- Enhancement description
### Fixed
- Bug fix description
### More
- Minor itemsCategorization rules:
### Added bullets vs feat: commits — if commits > bullets, you likely merged too aggressivelyExternal contributor attribution:
(#PR_NUMBER - @username) to the bulletgh api orgs/clacky-ai/members --paginate --jq '.[].login' | sortgit log <previous_tag>..HEAD --oneline | grep -oP '#\d+' | while read pr; do
num=${pr#\#}
gh pr view $num --json number,author --jq '"#\(.number) \(.author.login)"'
done- Todo panel with SVG icons (#437 - @shipinliang)Commit the changelog:
git add CHANGELOG.md
git commit -m "docs: update CHANGELOG for v<version>"Stable release:
bash "SKILL_DIR/scripts/release.sh" <version>Pre-release (skip latest.txt):
bash "SKILL_DIR/scripts/release.sh" <version> --prereleasePre-release (update latest.txt — only if user explicitly requested):
bash "SKILL_DIR/scripts/release.sh" <version> --prerelease --update-latestDry run (preview only):
bash "SKILL_DIR/scripts/release.sh" <version> --dry-runThe script runs all steps sequentially and stops on any failure. Monitor the output — if a step fails, diagnose and fix before retrying.
After the script completes successfully, present a concise summary. The output will often be read in WeChat, so keep it compact and avoid template-like formatting that triggers message folding.
Rules:
Format (flexible — adapt as needed, but roughly):
v{version} released.
[One sentence highlight — the biggest user-visible change.]
Added:
- [translate each "Added" item]
- ...
Improved:
- [translate each "Improved" item]
- ...
Fixed:
- [translate each "Fixed" item]
- ...
Upgrade: click "Upgrade" in Web UI bottom-left, or `gem update openclacky`
Fresh install: curl -sSL https://raw.githubusercontent.com/clacky-ai/openclacky/main/scripts/install.sh | bash
RubyGems: https://rubygems.org/gems/openclacky/versions/{version}
GitHub: https://github.com/clacky-ai/openclacky/releases/tag/v{version}When releasing a pre-release version, inform the user of these behaviors:
| Concern | Behavior | Impact |
|---|---|---|
| Version check notification | Gem::Version("0.9.38") < Gem::Version("1.0.0.beta.1") is true | The upgrade dot WILL appear in the Web UI for most users |
gem update (official source) | Does NOT install prereleases without --pre | Users who click "Upgrade" will see notification but upgrade silently does nothing |
| OSS CDN upgrade (mirror users) | Downloads exact .gem from latest.txt | If latest.txt points to prerelease, mirror users WILL get the beta |
OSS latest.txt | Fresh installs fetch latest.txt | By default, do NOT update latest.txt for pre-releases |
Ask the user whether to use --update-latest before running the script.
The script uses set -euo pipefail and stops on any failure. Common issues:
bundle exec rspec spec/integration/web_search_smoke_spec.rb --tag smoke to verifyspec/integration/web_search_smoke_spec.rb to skip the relevance check on failure (e.g., using skip "Bing returned anti-scrape garbage...")gem signin)gh auth status~/.cos.yaml configAfter fixing an issue, you can re-run the script — it's safe to retry. If a partial release happened (e.g., gem pushed but tag not created), handle remaining steps manually.
SKILL_DIR/scripts/release.shlib/clacky/version.rbopenclacky.gemspecCHANGELOG.mdgh CLI installed and authenticatedcoscli installed at /usr/local/bin/coscli with ~/.cos.yamldb23154
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.