release
Skill331 starsChanged 35 days agoApache-2.0View on GitHub
Drive a package release of `ClickHouse/clickhouse-js` end to end: bump the version, sync the protected `release` branch from `main`, watch the npm publish (which is gated by a manual approval on the `npm-publish` environment), and create the GitHub Release from the CHANGELOG. Use this skill whenever the task is to "release", "cut a release", "publish a new version", or "ship" one of the packages: `@clickhouse/client` (Node.js), `@clickhouse/client-web` (Web), `@clickhouse/client-common` (deprecated, rarely released), the standalone `@clickhouse/datatype-parser` (the type parser, under `packages/datatype-parser`), or `@clickhouse/rowbinary` (the RowBinary codec skill/package, under `skills/clickhouse-js-node-rowbinary`). The agent drives the GitHub Actions workflows (`gh workflow run`), watches CI, pauses at the human-judgment points (PR review, the approval gate, GitHub Release text), and hands the deployment-approval link back to the human. Do NOT use this for fixing a failing release PR — that is the `fix-release-pr` skill.
- Commits and pushes
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 repository12 other files it gives its agents.
- AGENTS.mdAGENTS.md
- docs/AGENTS.mdAGENTS.md
- examples/AGENTS.mdAGENTS.md
- packages/AGENTS.mdAGENTS.md
- skills/AGENTS.mdAGENTS.md
- skills/clickhouse-js-node-rowbinary/AGENTS.mdAGENTS.md
- fix-release-prSkill
- setupSkill
- typescript-lspSkill
- clickhouse-js-node-codingSkill
- clickhouse-js-node-rowbinarySkill
- clickhouse-js-node-troubleshootingSkill
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 3 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 186 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 48
You drive, the human judges: Run the workflows with gh, watch CI, and pause at: (a) reviewing the release PR, (b) the npm-publish approval …
- Distinctive: line 100
Make sure no unreleased version heading sits between the top section and the last released one (check git tag).
- Distinctive: line 107
If it's wrong, fix it in a small separate PR to main and merge it quickly before bumping — do not bundle the changelog fix into the bump PR.
- Very specific: line 141
If review surfaces issues, do not push to release.
- Distinctive: line 144
When it's clean, merge the release PR.
- Very specific: line 212
Use the CHANGELOG section that documents this release as the body.
- Very specific: line 245
Do this in a normal PR to main, together with the relevant entry in that package's own CHANGELOG.md (verify the changelog as in Part A, …
- Very specific: line 299
Verify/fix the top section of the package's own CHANGELOG.md (e.g.
“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
Releasing a clickhouse-js package
This skill is the source of truth for the release process. It supersedes the old
RELEASING.md (which now just points here).
Before you start — read this
Releases are per package. There is no "release everything" button. Ask the user which package(s) they want to release and confirm — the packages are versioned independently and ship on independent cadences:
@clickhouse/client— Node.js client (packages/client-node)@clickhouse/client-web— Web client (packages/client-web)@clickhouse/client-common— deprecated, effectively frozen; only cut a final standalone release if explicitly asked.@clickhouse/datatype-parser— standalone type parser (packages/datatype-parser)@clickhouse/rowbinary— standalone RowBinary codec skill/package (skills/clickhouse-js-node-rowbinary)
The flow forks into two families — workspace client packages (client / client-web / client-common) and standalone packages (datatype-parser / rowbinary) — which differ in version bumping and publish workflow. Pick the right section below.
releaseis a long-lived, protected branch. It is not a per-release branch. Thenpm-publishGitHub Actions environment only permits thereleasebranch to deploy, and it additionally requires a manual approval before any publish job runs. You will hand the human an approval link and wait.- You drive, the human judges. Run the workflows with
gh, watch CI, and pause at: (a) reviewing the release PR, (b) thenpm-publishapproval gate, (c) the GitHub Release text. Never push toreleasedirectly — if the release PR needs fixes, route them throughmain(see thefix-release-prskill).
One workflow per package. Each package has its own publish workflow:
@clickhouse/client→publish-client.yml@clickhouse/client-web→publish-client-web.yml@clickhouse/client-common→publish-client-common.yml@clickhouse/datatype-parser→publish-datatype-parser.yml@clickhouse/rowbinary→publish-skill-rowbinary.ymlEach client workflow has two triggers: an automatic
headpublish on push toreleaseand a manuallatestpublish viaworkflow_dispatch. The standalone packages have the manual trigger only.The client
headtriggers are path-scoped: a change touching only one client's own sources no longer republishes the others. Both@clickhouse/clientand@clickhouse/client-webbundle the shared common sources via thesrc/commonsymlink (packages/*/src/common→packages/client-common/src), sopackages/client-common/**is also an input to both client workflows — a change to the common sources publishes a newheadfor every client that bundles them.
Part A — Workspace client packages (@clickhouse/client, -web, -common)
Step 1 — Verify the package CHANGELOG on main
Each package now keeps its own CHANGELOG.md (the repo-wide root
CHANGELOG.md is frozen). The package you're releasing maps to:
@clickhouse/client→packages/client-node/CHANGELOG.md@clickhouse/client-web→packages/client-web/CHANGELOG.md@clickhouse/client-common→packages/client-common/CHANGELOG.md
These are normally updated inside feature PRs as they merge to main, under
a top # <version> header. A common mistake: the in-progress entries sit under
the wrong header — e.g. still under the previously released version, or under
a version that doesn't match the one you're about to cut. (Note: shared/common
code is bundled into both clients, so such changes should appear in both the
client-node and client-web changelogs.)
- Compute the version this release will produce: current version + the
bump_typeyou'll pick. Current version:node -p "require('./packages/client-node/package.json').version" # or client-web / client-common - Confirm that package's
CHANGELOG.mdhas a top# <new-version>section that actually contains this release's notes. - Make sure no unreleased version heading sits between the top section and
the last released one (check
git tag). If an earlier in-progress heading exists for a version that is being skipped (e.g.# 1.24.2above released1.24.1while you cut1.25.0), merge its entries into the new version's section — reuse the same## Bug fixes/## Improvementsheadings, keep the PR reference links — and delete the skipped heading. Every version heading in the file should correspond to a version that was or is about to be released. - If it's wrong, fix it in a small separate PR to
mainand merge it quickly before bumping — do not bundle the changelog fix into the bump PR.
Step 2 — Bump the version (opens a PR to main)
Dispatch the bump-version workflow. It bumps the selected package's
package.json + src/version.ts and opens a release-<pkg>-<ver> PR against
main:
gh workflow run bump-version.yml --ref main \
-f package='@clickhouse/client' \
-f bump_type=patch # patch | minor | majorFind and watch the resulting PR, get it reviewed, and merge it into main:
gh run list --workflow=bump-version.yml --limit 1
gh pr list --search 'head:release-client-' --state open # locate the bump PRStep 3 — Sync release from main (the "release PR")
Open a real PR with base release, head main. This PR is the snapshot
that gets reviewed once more as a whole (code-review tooling runs on the full
diff):
gh pr create --base release --head main \
--title "<version> release" \
--body "Sync release from main to cut <package> <version>."- If review surfaces issues, do not push to
release. Fix onmainvia a separate PR (use thefix-release-prskill), then the release PR picks the fix up automatically. Keepreleaseandmainfrom drifting. - When it's clean, merge the release PR.
Step 4 — Watch the automatic head publish + e2e
Merging into release pushes to release, which triggers the path-scoped
head publish for each package whose sources changed (publish-client.yml,
publish-client-web.yml, publish-client-common.yml). It publishes a head
pre-release build (an internal beta — not tracked as a GitHub Release); the
client workflows then run an automatic e2e job against the published version
and a live ClickHouse — the Node.js client installs it across Node 20/22/24/26
and runs integration tests, and the Web client runs a real-browser smoke
(chromium + firefox) via Playwright.
- These publishes run under the
npm-publishenvironment → they pause for manual approval. Find the run(s) — one per package that changed — give the human the approval link, and wait:
(Usegh run list --workflow=publish-client.yml --branch release --limit 3 gh run view <run-id> --json url -q .url # hand this URL to the human to approve gh run watch <run-id> # waits for completionpublish-client-web.yml/publish-client-common.ymlfor the other packages.) - The
e2ejob inpublish-client.yml/publish-client-web.ymlis sufficient verification — no manual@headtesting is needed. Just watch it. - If e2e fails: the broken build is already on npm under the
headtag. Suggest moving that tag out of the way so nobody installs it, e.g.:
Then fix forward onnpm dist-tag add @clickhouse/client@<broken-version> debuggingmainand re-syncrelease.
Step 5 — Publish to latest (manual dispatch, per package)
Once the head e2e is green, dispatch the package's publish workflow manually
from the release branch (no inputs). This builds, publishes to the latest tag
(npm OIDC + provenance), and pushes a git tag (client-<ver>, client-web-<ver>,
or client-common-<ver>):
gh workflow run publish-client.yml --ref release # @clickhouse/client
# gh workflow run publish-client-web.yml --ref release # @clickhouse/client-web
# gh workflow run publish-client-common.yml --ref release # @clickhouse/client-common (deprecated)This also runs under npm-publish → approval gate again. Same drill: hand
over the approval URL, then watch:
gh run list --workflow=publish-client.yml --branch release --event workflow_dispatch --limit 1
gh run view <run-id> --json url -q .url
gh run watch <run-id>Repeat for each package being released, dispatching its own workflow.
For the deprecated @clickhouse/client-common, if you ever cut one, also confirm
its npm deprecation notice is in place (it should already be).
Step 6 — Create the GitHub Release
The auto-published head betas are not tracked as Releases. The latest
release is. Create a GitHub Release from the matching section of that
package's CHANGELOG.md (e.g. packages/client-node/CHANGELOG.md for
@clickhouse/client).
- The tag was pushed by the publish workflow:
client-<ver>/client-web-<ver>/client-common-<ver>(note: client tags have novprefix). - Use the CHANGELOG section that documents this release as the body. Extract it
(the lines under
# <version>up to the next#header):awk -v v="1.23.0" '$0=="# "v{f=1;next} /^# /{f=0} f' \ packages/client-node/CHANGELOG.md > /tmp/notes.md - Do not pass
--title— GitHub renders the title from the tag itself. These are not pre-releases, so do not pass--prerelease:gh release create client-1.23.0 --notes-file /tmp/notes.md - Backfill check: sometimes earlier releases are missing their GitHub Release.
Compare pushed tags against existing releases and create any that are missing,
pulling each one's notes from the matching CHANGELOG section:
gh release list --limit 50 git ls-remote --tags origin | grep -oE 'client(-web|-common)?-[0-9.]+'
Part B — Standalone packages (@clickhouse/datatype-parser, @clickhouse/rowbinary)
These ship independently. There is no bump-version workflow and no head
beta for them.
Step 1 — Bump the version manually on main
Edit the version in the package's package.json (these have no src/version.ts):
@clickhouse/datatype-parser→packages/datatype-parser/package.json@clickhouse/rowbinary→skills/clickhouse-js-node-rowbinary/package.json
Do this in a normal PR to main, together with the relevant entry in that
package's own CHANGELOG.md (verify the changelog as in Part A, Step 1):
@clickhouse/datatype-parser→packages/datatype-parser/CHANGELOG.md@clickhouse/rowbinary→skills/clickhouse-js-node-rowbinary/CHANGELOG.md
Merge it.
Step 2 — Sync release from main
Same as Part A, Step 3: open a base release ← head main PR, get it reviewed as
a whole, merge it. (Pushing to release does not auto-publish these
standalone packages — only the client packages have an auto head publish.)
Step 3 — Publish to latest (manual dispatch, no inputs)
Dispatch the package's own publish workflow from the release branch. These take
no inputs; the release-branch ref is required by the workflow's if guard:
# type parser:
gh workflow run publish-datatype-parser.yml --ref release
# rowbinary codec skill/package:
gh workflow run publish-skill-rowbinary.yml --ref releaseEach workflow builds, packs + smoke-tests the tarball, publishes it to latest
(OIDC + provenance), pushes a git tag (datatype-parser-v<ver> /
rowbinary-v<ver> — note the v prefix here), then runs the e2e job
across Node 20/22/24/26.
Same npm-publish approval gate applies — hand over the approval URL and
watch:
gh run list --workflow=publish-datatype-parser.yml --branch release --limit 1
gh run view <run-id> --json url -q .url
gh run watch <run-id>Step 4 — Create the GitHub Release
Same as Part A, Step 6, using the standalone tag (datatype-parser-v<ver> /
rowbinary-v<ver>) and the notes from that package's own CHANGELOG.md
(packages/datatype-parser/CHANGELOG.md or
skills/clickhouse-js-node-rowbinary/CHANGELOG.md). No --title, no
--prerelease. Backfill any missing releases.
Quick reference
Client packages:
- Verify/fix the top section of the package's own
CHANGELOG.md(e.g.packages/client-node/CHANGELOG.md) onmain(quick PR if wrong). gh workflow run bump-version.yml --ref main -f package=… -f bump_type=…→ review & merge the bump PR tomain.gh pr create --base release --head main→ review the whole release PR → merge.- Auto
headpublish (per-packagepublish-client*.yml, path-scoped) + e2e on push torelease→ approve atnpm-publish, watch e2e. (If e2e fails: retag the bad build todebugging, fix forward.) gh workflow run publish-client.yml --ref release(or-web/-common) per package → approve, watch.gh release create <client-…-tag> --notes-file <changelog-section>(no--title, not prerelease); backfill missing releases.
Standalone packages (datatype-parser / rowbinary):
- Bump version in the package's
package.json+ its ownCHANGELOG.mdvia a PR tomain→ merge. gh pr create --base release --head main→ review → merge.gh workflow run publish-datatype-parser.yml --ref release(orpublish-skill-rowbinary.yml) → approve, watch.gh release create <…-v…-tag> --notes-file <changelog-section>; backfill.
Always: per package · each package has its own CHANGELOG.md (root is frozen) · release is protected (fix via main) · every publish needs npm-publish approval · head betas are untracked · GitHub Release notes come from the package's CHANGELOG.md with no explicit --title.
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.

