release
Skill93 starsChanged 8 days agoMITView on GitHub
Gem release workflow — verify, then merge the release-please PR to publish
196 other projects use a version of this.
Adopted by
Most recently taken up by
- zxcvbn-ts/zxcvbntheir own version, first seen Nov 9, 2026
- TechbeeAT/jtxBoardtheir own version, first seen Nov 9, 2026
- ddnexus/pagytheir own version, first seen Nov 9, 2026
- zerx-lab/FluxDowntheir own version, first seen Nov 9, 2026
- orioledb/orioledbtheir own version, first seen Nov 9, 2026
- AmruthPillai/Reactive-Resumetheir own version, first seen Nov 8, 2026
Used with
Projects with it also use create-agent-adapter, changelog-style and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
MicrosoftSkillcreate-agent-adapter
Technical guide for creating a new Paperclip agent adapter. Use when building a new adapter package, adding support for a new AI coding tool (e.g. a new CLI agent, API-based agent, or custom process), or when modifying the adapter system. Covers the required interfaces, module structure, registration points, and conventions derived from the existing claude-local and codex-local adapters.
Also in 5 projects that use this
GrinvSkillchangelog-style
Turn a commit range into CHANGELOG.md entries following common-changelog style. Use when finishing a PR or cutting a release, to write/fix the [Unreleased] section's entries — moving [Unreleased] under a new dated version heading is a separate, automated step (see the release skill / scripts/sync-version.ts), not this skill's job.
Also in 4 projects that use this
GrinvSkilldocs-consistency-check
Check README/manifest.json/server.json/CHANGELOG.md/AGENTS.md and docs/*.md for drift against the actual registered tools and source. Use after adding, renaming, or removing a tool, or as part of a live-audit pass.
Also in 4 projects that use this
Microsoft AzureSkillcomponent-release
Prepares a verifiable Agent Landing Zone UI release. Use for release branches, VERSION, changelog entries, tags, release notes, and compatibility evidence; never publish without explicit human approval.
Also in 4 projects that use this
Microsoft AzureSkilldocumentation-consistency
Keeps AI Landing Zone contributor, user, and operator documentation aligned with shipped Bicep behavior. Use for parameters, defaults, outputs, topology, deployment flow, operations, or releases.
Also in 8 projects that use this
rivet-devSkilllaunch-graphics
Generate agentOS marketing/launch graphics (launch & social heroes, code-snippet cards) from the committed generators in docs-internal/graphics. Use when asked to make, update, or render an agentOS launch image, social image, "agentOS Apps" graphic, or technical code-snippet image.
Also in 3 projects that use this
- +3 more from Grinv
Other versions196 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 196
- paperclipai/paperclip★ 112ksame name
- modelcontextprotocol/servers★ 92ksame name
- remotion-dev/remotion★ 72ksame name
- traefik/traefik★ 65ksame name
- usememos/memos★ 64ksame name
- tw93/Pake★ 63ksame name
- AmruthPillai/Reactive-Resume★ 45ksame name
- amruthpillai/reactive-resume★ 45ksame name
- reactive-resume/reactive-resume★ 45ksame name
- Yeachan-Heo/oh-my-claude-sisyphus★ 41ksame name
186 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository11 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- add-breadcrumb-pageSkill
- chaosSkill
- cqrs-patternsSkill
- demo-updateSkill
- host-app-safetySkill
- new-featureSkill
- release-rulesSkill
- roadmap-statusSkill
- safety-checkSkill
- testSkill
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 1 is distinctive, and 7 are very specific to this project.
0
Common
Most of the 186 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 18
Every push to main runs .github/workflows/release.yml, which invokes release-please.
- Very specific: line 54
If there isn't one, there are no releasable commits since the last release — only docs/test/refactor/chore commits, which are hidden from …
- Very specific: line 62
Check the version bump matches the change types (two fix: commits should produce a patch bump, not a minor).
- Very specific: line 73
Test the release head, not main.
- Very specific: line 100
Draft the release notes locally. Don't push them yet: Write them on a local branch cut from the release head, then run bundle exec rspec …
- Very specific: line 155
Read every workflow on the merge commit, not only Release.
- Distinctive: line 175
Do not re-merge or hand-tag in this situation.
- Very specific: line 183
Do not run gem build / gem push / git tag manually.
“Common” is measured: kept by at least 6 in 10 of the 186 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/release — Gem Release Workflow
Release a new version of rails_error_dashboard.
Releases are automated by release-please. You do not bump the version, write
the changelog, build the gem, tag, or run gem push by hand — a workflow does all
of it when the release PR is merged. Your job is to verify the release is safe and
then get approval to merge.
How the automation works
Every push to main runs .github/workflows/release.yml, which invokes
release-please. It reads the conventional-commit subjects since the last release
and opens (or updates) a PR titled chore(main): release rails_error_dashboard X.Y.Z.
That PR contains only:
lib/rails_error_dashboard/version.rbCHANGELOG.md.release-please-manifest.json
Merging that PR triggers the publish half of the same workflow, one job after
another (watch them with gh run view <run-id>):
merge release PR
-> release: release-please creates the GitHub Release (marked Latest)
and the rails_error_dashboard/vX.Y.Z tag
-> test: bundle exec rspec, bundle exec rubocop (read-only token)
-> publish: `rubygems` environment (main only); rake release tags vX.Y.Z,
then pushes the gem to RubyGems via OIDC trusted publishing
-> smoke-test: checks the live demo against the released gemThere are no RubyGems credentials involved — trusted publishing authenticates
via OIDC, and only the publish job can request that token.
~/.gem/credentials is not used and does not need to exist.
The version number is derived from commit types, not chosen by hand:
fix: -> patch, feat: -> minor, !/BREAKING CHANGE -> major.
To change what version ships, change the commits, not the PR.
Steps
- Find the release PR:
If there isn't one, there are no releasable commits since the last release — onlygh pr list --state open --json number,title | grep "chore(main): release"docs/test/refactor/chorecommits, which are hidden from the changelog by.release-please-config.json. Say so and stop. - Confirm what will ship:
Check the version bump matches the change types (twogh pr diff <PR> | grep -E "^\+" | grep -E "VERSION|^\+\* "fix:commits should produce a patch bump, not a minor). - Run the full local verification — CI does not run
bin/pre-release-test all(its only chaos run is thefull_upgradeapp, on release PRs):
Test the release head, not main. Chaos loads the gem bybundle exec rspec # expect 0 failures bundle exec rubocop # expect no offenses bin/pre-release-test all # builds 5 apps (one API-only); the summary says "Apps passed: 6" # because the HTTP app records two runs. Expect 0 failed assertionspath:, so it tests whatever is checked out:git switch --detach <release head>first, and switch back afterwards. In the main tree a barerubocopalso counts gitignored local files, so run it on agit archiveof the head, withBUNDLE_GEMFILEpointing back at the repo's Gemfile. - Check CI on the release PR:
There are 30 rows. The 29 required checks must pass (the upgrade path runs on a release PR), andgh pr checks <PR>Overhead benchmark, which isn't required, shows as skipped.gh pr checksshows nothing while runs are held, so read them by head SHA withgh run list --commit <head sha>. If the PR showsBLOCKEDwith checks stuck ataction_required, GitHub is holding workflow runs because the PR was opened by a bot. Approve them:gh run list --branch release-please--branches--main--components--rails_error_dashboard \ --json databaseId,name,status --jq '.[] | select(.status=="completed") | .databaseId' gh api -X POST repos/AnjanJ/rails_error_dashboard/actions/runs/<id>/approve - Confirm the current published version so you can prove the change later:
curl -s https://rubygems.org/api/v1/gems/rails_error_dashboard.json | jq -r .version - Draft the release notes locally. Don't push them yet. Write them on a local
branch cut from the release head, then run
bundle exec rspec spec/docs. Doc specs can catch a problem here that would otherwise fail CI on the release head. Prove any link check can fail by breaking one anchor once.
MANDATORY APPROVAL GATE
STOP HERE. Tell the user what will ship, that verification passed, and:
Merging the release PR publishes X.Y.Z to RubyGems. This is irreversible — that version number can never be reused.
Ready to publish vX.Y.Z?
Do NOT merge without an explicit "yes". Merging the release PR is the
publish action. There is no separate, later gem push step to gate on.
Publish
Put the notes on the release PR, last thing on merge day. Any later push to
mainrebuilds the release PR, which drops the notes and can bring backcloseslines. The GitHub Release page is built from the PR body, so the text goes in two places:- on the release branch, as a
docs:commit; - in the PR body, with a
<!-- demo-summary: A short description -->comment for the demo's hero pill.
Then wait for CI on the new head. A human push needs no approval. A PATCH to a PR right after a push can return the old head, so re-read it before trusting it.
- on the release branch, as a
- Merge the release PR (squash — the repo allows no other method, and the
chore(main): releasesubject is what the workflow keys on). Usegh api, becausegh pr mergehangs here. Compare first, and pin the head so nothing else can slip in:R=repos/AnjanJ/rails_error_dashboard gh api "$R/compare/main...<head sha>" --jq '{ahead_by, behind_by, files: [.files[].filename]}' gh api -X PUT "$R/pulls/<PR>/merge" -f merge_method=squash -f sha=<head sha> \ -f commit_title='chore(main): release rails_error_dashboard X.Y.Z (#<PR>)' \ -F commit_message=@<body file>behind_bymust be 0 and the file list must be what you expect. The body file must hold no closing keywords. Verify all four artifacts, not just the workflow's exit status:
curl -s https://rubygems.org/api/v1/gems/rails_error_dashboard.json | jq -r .version gh release list --limit 2 git fetch --tags && git tag --sort=-creatordate | head -2 git -C . log --oneline -1 origin/main gh run list --commit <merge sha>Note: releases are tagged twice —
vX.Y.Zandrails_error_dashboard/vX.Y.Z.gh release view vX.Y.Zfails; the release is named with the component prefix. Usegh release listinstead.Read every workflow on the merge commit, not only Release.
Overhead benchmarkruns on main alongside the publish, so it can go red after the gem is out. That isn't a release failure. If it fails a gated row, stop and ask.- Update the demo app — see
/demo-update. Do not do this before the gem is actually live on RubyGems.
If the publish step fails
A transient failure (flaky test, network blip) can leave the tag and GitHub
Release created but the gem unpublished. .github/workflows/release.yml has a
workflow_dispatch escape hatch that republishes at the current version on main
without re-running release-please. It runs the same test and publish jobs as
a release, and must be dispatched from main (the rubygems environment refuses
any other branch):
gh workflow run release.yml -f version=X.Y.ZDo not re-merge or hand-tag in this situation.
Important Notes
- Never close the linked issues. See
release-rules— the reporter verifies and closes. AvoidFixes #NNNin commits for this reason. - Git tags and GitHub Releases are separate entities, but release-please creates both. Do not create either by hand.
- Do not run
gem build/gem push/git tagmanually. Doing so alongside the automation risks publishing a version the workflow then cannot publish. - Demo app repo:
AnjanJ/rails_error_dashboard_demo_app - Demo site: https://rails-error-dashboard.anjan.dev
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

