Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/tomevault-io/skills-registry --skill release-and-publish명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | release-and-publish |
| description | > Use when this capability is needed. |
This skill runs after git wrapup. By the time it's invoked:
field-test, security-pass, polish-docs-meta as applicable)package.json version is bumpedchangelog/<major.minor>.x/<version>.md is authoredCHANGELOG.md is regeneratedchore: release v<version>) existsv<version>) exists locallyIf any are missing, halt and tell the user to finish wrapup first. Do not attempt to redo wrapup work from inside this skill.
Steps 3–6 are network-bound. For those, retry transient failures up to 2 times with short backoff (~5 s before the first retry, ~15 s before the second) before halting. All other steps halt on the first non-zero exit — they're deterministic and a second attempt won't change the outcome.
Match stderr (case-insensitive) against any of these — if matched, the failure is almost always a network blip; retry:
integrity check failed / IntegrityCheckFailed — corrupt tarball during downloadECONNRESET / EAI_AGAIN / ETIMEDOUT / ENOTFOUND — network layerconnection reset / connection refused — transport bliptimed out / request timeout — server or network timeout502 / 503 / 504 — transient registry errorBefore retrying docker buildx --push (step 6), run docker builder prune -f to drop any cached corrupt layer. Skip this extra step for other retries.
These mean the step already succeeded on a prior run — treat as success and proceed to the next step:
bun publish): version already exists, You cannot publish over the previously published versionsmcp-publisher publish): cannot publish duplicate versionIf retries are exhausted, or the failure matches none of the transient patterns, halt and report:
The user fixes locally and re-invokes. On re-invocation, already-published destinations hit the idempotent-success signal and skip naturally — no manual step-skipping required.
Read package.json → capture version. Then use your git tools to verify:
v<version> — matches the package.json versionIf working tree is dirty or HEAD isn't on v<version>, halt.
All three must succeed. Use test:all if the script exists in package.json, otherwise fall back to test:
bun run devcheck
bun run rebuild
bun run test:all # or `bun run test` if no test:all
Any non-zero exit → halt with the failing command's output.
Use your git tools to push commits and tags to origin. If the remote rejects either push, halt.
bun publish --access public
bun publish uses whatever npm auth the user has configured in ~/.npmrc. If 2FA is enabled on the npm account, the command will prompt for an OTP or open a browser — that's expected; the user completes it interactively.
Friction reducers (optional, configure once):
| Option | How |
|---|---|
| npm granular access token with "Bypass 2FA for publish" | Generate at npmjs.com → replace _authToken in ~/.npmrc → no OTP prompt at all |
1Password CLI TOTP injection (requires brew install --cask 1password-cli + signed-in op) | bun publish --access public --otp="$(op item get 'npm' --otp)" |
Halt on publish error other than "version already exists" (which means this step already ran).
Only if server.json exists at the repo root (otherwise skip).
bun run publish-mcp
If publish-mcp isn't defined in package.json, add it (macOS):
"publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish"
Prereq: a GitHub PAT with read:org + read:user scopes stored in Keychain under the service name mcp-publisher-github-pat:
security add-generic-password -a "$USER" -s mcp-publisher-github-pat -w
# paste PAT at the silent prompt
Halt on any publisher error other than "cannot publish duplicate version".
Only if Dockerfile exists at the repo root (otherwise skip).
Derive:
OWNER/REPO from the origin remote URL — use your git tools to read it; strip .git, handle both https://github.com/<owner>/<repo> and git@github.com:<owner>/<repo> formsVERSION from package.json (step 1)docker buildx build --platform linux/amd64,linux/arm64 \
-t ghcr.io/<OWNER>/<REPO>:<VERSION> \
-t ghcr.io/<OWNER>/<REPO>:latest \
--push .
If the project uses a non-GHCR registry or a custom image name, respect the project's convention. Halt on build or push failure.
Print clickable URLs for every destination that succeeded:
https://www.npmjs.com/package/<package.json#name>/v/<version>https://registry.modelcontextprotocol.io/v0/servers?search=<package.json#mcpName>ghcr.io/<OWNER>/<REPO>:<VERSION>Skip any destination that was skipped in its step.
v<version>bun run devcheck passesbun run rebuild succeedsbun run test:all (or test) passesbun publish --access public succeedsbun run publish-mcp succeeds (if server.json present)Dockerfile present)Source: cyanheads/mcp-ts-core — distributed by TomeVault.