Pre-flight gate before a release. Validates that your working tree, version numbers, changelog, CI status, and dependencies are all ready to ship.
# Always run this before nself release
nself release-check
# Output as JSON (for CI pipelines)
nself release-check --jsonnself release-check [FLAGS]nself release-check is the mandatory gate that runs before nself release. It performs five independent checks in sequence and exits with a non-zero code if any fail, printing a clear explanation and remediation hint for each failure.
nself release runs this gate automatically at the start of the cascade. You can also run it standalone at any point — for example, after landing the last PR of a milestone, to confirm the repo is shippable before tagging.
| Check | Passes when |
|---|---|
| Clean working tree | No uncommitted changes in cli/ or admin/. Untracked files are allowed. |
| Version bumped | package.json (or Cargo.toml / go.mod) version is ahead of the latest git tag on main. |
| Changelog updated | The changelog contains an entry for the pending version (heading matches ## v{VERSION} or ## {VERSION}). |
| CI green | The latest workflow run on main completed with success status. Checks gh run list via the GitHub API. |
| Dependencies up to date | No pnpm audit high or critical vulnerabilities. Go go list -m -u all shows no major version drift on direct deps. |
| Flag | Type | Default | Description |
|---|---|---|---|
--json | bool | false | Output results as a JSON array of check objects with name, status, message fields |
--only <check> | string | — | Run a single check by name: tree, version, changelog, ci, deps |
--skip <check> | string | — | Skip a specific check. Can be repeated. Use carefully. |
nself release-check
✔ Clean working tree
✔ Version bumped v1.1.0 → v1.1.1
✔ Changelog updated found entry for v1.1.1
✔ CI green run #1042 passed 4 minutes ago
✗ Dependencies 3 high severity vulnerabilities (pnpm audit)
1 check failed. Fix the issues above, then re-run nself release-check.nself release-checknself release-check --only cinself release-check --json | jq '.[] | select(.status == "fail")'nself release-check --skip deps0 — all checks passed1 — one or more checks failed (details printed to stdout)2 — invalid flag or unknown check name