Skip to content

Commit bf79257

Browse files
committed
feat(release): add release command group and CI finalization
Add `sentry release` command group with 8 subcommands for full release lifecycle management, plus a CI post-release script for automated finalization. Commands: list, view, create, finalize, delete, deploy, set-commits, propose-version. Supports --auto (repo integration) and --local (git history) modes for commit association via simple-git. CI integration: script/finalize-release.ts runs in .craft.yml postReleaseCommand before version bump to create, set commits, finalize, and deploy releases automatically. Ref: #600
1 parent 8e8973d commit bf79257

34 files changed

+3413
-8
lines changed

.craft.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ changelog:
44
versioning:
55
policy: auto
66
preReleaseCommand: node --experimental-strip-types script/bump-version.ts --pre
7-
postReleaseCommand: node --experimental-strip-types script/bump-version.ts --post
7+
postReleaseCommand: >-
8+
node --experimental-strip-types script/finalize-release.ts &&
9+
node --experimental-strip-types script/bump-version.ts --post
810
artifactProvider:
911
name: github
1012
config:

AGENTS.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,14 @@ bun run test:unit # Run unit tests only
6161
bun run test:e2e # Run e2e tests only
6262
```
6363

64+
## Rules: No Runtime Dependencies
65+
66+
**CRITICAL**: All packages must be in `devDependencies`, never `dependencies`. Everything is bundled at build time via esbuild. CI enforces this with `bun run check:deps`.
67+
68+
When adding a package, always use `bun add -d <package>` (the `-d` flag).
69+
70+
When the `@sentry/api` SDK provides types for an API response, import them directly from `@sentry/api` instead of creating redundant Zod schemas in `src/types/sentry.ts`.
71+
6472
## Rules: Use Bun APIs
6573

6674
**CRITICAL**: This project uses Bun as runtime. Always prefer Bun-native APIs over Node.js equivalents.

bun.lock

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/public/.well-known/skills/index.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"references/logs.md",
1414
"references/organizations.md",
1515
"references/projects.md",
16+
"references/release.md",
1617
"references/setup.md",
1718
"references/sourcemap.md",
1819
"references/teams.md",
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
---
2+
title: release
3+
description: Release commands for the Sentry CLI
4+
---
5+
6+
Work with Sentry releases
7+
8+
## Commands
9+
10+
### `sentry release list <org/project>`
11+
12+
List releases
13+
14+
### `sentry release view <org/version>`
15+
16+
View release details
17+
18+
### `sentry release create <org/version>`
19+
20+
Create a release
21+
22+
### `sentry release finalize <org/version>`
23+
24+
Finalize a release
25+
26+
### `sentry release delete <org/version>`
27+
28+
Delete a release
29+
30+
### `sentry release deploy <org/version> <environment> [name]`
31+
32+
Create a deploy for a release
33+
34+
### `sentry release set-commits <org/version>`
35+
36+
Set commits for a release
37+
38+
### `sentry release propose-version`
39+
40+
Propose a release version (outputs the current git HEAD SHA)
41+
42+
All commands support `--json` for machine-readable output and `--fields` to select specific JSON fields.
43+
44+
<!-- GENERATED:END -->
45+
46+
## Examples
47+
48+
```bash
49+
# List releases (auto-detect org)
50+
sentry release list
51+
52+
# List releases in a specific org
53+
sentry release list my-org/
54+
55+
# View release details
56+
sentry release view 1.0.0
57+
sentry release view my-org/1.0.0
58+
59+
# Create and finalize a release
60+
sentry release create 1.0.0 --finalize
61+
62+
# Create a release, then finalize separately
63+
sentry release create 1.0.0
64+
sentry release set-commits 1.0.0 --auto
65+
sentry release finalize 1.0.0
66+
67+
# Set commits from local git history
68+
sentry release set-commits 1.0.0 --local
69+
70+
# Create a deploy
71+
sentry release deploy 1.0.0 production
72+
sentry release deploy 1.0.0 staging "Deploy #42"
73+
74+
# Propose a version from git HEAD
75+
sentry release create $(sentry release propose-version)
76+
77+
# Output as JSON
78+
sentry release list --json
79+
sentry release view 1.0.0 --json
80+
```

package.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"type": "git",
66
"url": "git+https://github.com/getsentry/cli.git"
77
},
8+
"main": "./dist/index.cjs",
89
"devDependencies": {
910
"@anthropic-ai/sdk": "^0.39.0",
1011
"@biomejs/biome": "2.3.8",
@@ -35,6 +36,7 @@
3536
"pretty-ms": "^9.3.0",
3637
"qrcode-terminal": "^0.12.0",
3738
"semver": "^7.7.3",
39+
"simple-git": "^3.33.0",
3840
"string-width": "^8.2.0",
3941
"tinyglobby": "^0.2.15",
4042
"typescript": "^5",
@@ -43,18 +45,16 @@
4345
"wrap-ansi": "^10.0.0",
4446
"zod": "^3.24.0"
4547
},
46-
"bin": {
47-
"sentry": "./dist/bin.cjs"
48-
},
49-
"main": "./dist/index.cjs",
50-
"types": "./dist/index.d.cts",
5148
"exports": {
5249
".": {
5350
"types": "./dist/index.d.cts",
5451
"require": "./dist/index.cjs",
5552
"default": "./dist/index.cjs"
5653
}
5754
},
55+
"bin": {
56+
"sentry": "./dist/bin.cjs"
57+
},
5858
"description": "Sentry CLI - A command-line interface for using Sentry built by robots and humans for robots and humans",
5959
"engines": {
6060
"node": ">=22"
@@ -94,5 +94,6 @@
9494
"check:deps": "bun run script/check-no-deps.ts",
9595
"check:errors": "bun run script/check-error-patterns.ts"
9696
},
97-
"type": "module"
97+
"type": "module",
98+
"types": "./dist/index.d.cts"
9899
}

plugins/sentry-cli/skills/sentry-cli/SKILL.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,22 @@ Manage Sentry dashboards
315315

316316
→ Full flags and examples: `references/dashboards.md`
317317

318+
### Release
319+
320+
Work with Sentry releases
321+
322+
- `sentry release list <org/project>` — List releases
323+
- `sentry release view <org/version...>` — View release details
324+
- `sentry release create <org/version...>` — Create a release
325+
- `sentry release finalize <org/version...>` — Finalize a release
326+
- `sentry release delete <org/version...>` — Delete a release
327+
- `sentry release deploy <org/version environment name...>` — Create a deploy for a release
328+
- `sentry release deploys <org/version...>` — List deploys for a release
329+
- `sentry release set-commits <org/version...>` — Set commits for a release
330+
- `sentry release propose-version` — Propose a release version
331+
332+
→ Full flags and examples: `references/release.md`
333+
318334
### Repo
319335

320336
Work with Sentry repositories
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
---
2+
name: sentry-cli-release
3+
version: 0.24.0-dev.0
4+
description: Sentry CLI release commands
5+
requires:
6+
bins: ["sentry"]
7+
auth: true
8+
---
9+
10+
# release Commands
11+
12+
Work with Sentry releases
13+
14+
### `sentry release list <org/project>`
15+
16+
List releases
17+
18+
**Flags:**
19+
- `-n, --limit <value> - Maximum number of releases to list - (default: "30")`
20+
- `-f, --fresh - Bypass cache, re-detect projects, and fetch fresh data`
21+
- `-c, --cursor <value> - Navigate pages: "next", "prev", "first" (or raw cursor string)`
22+
23+
### `sentry release view <org/version...>`
24+
25+
View release details
26+
27+
**Flags:**
28+
- `-f, --fresh - Bypass cache, re-detect projects, and fetch fresh data`
29+
30+
### `sentry release create <org/version...>`
31+
32+
Create a release
33+
34+
**Flags:**
35+
- `-p, --project <value> - Associate with project(s), comma-separated`
36+
- `--finalize - Immediately finalize the release (set dateReleased)`
37+
- `--ref <value> - Git ref (branch or tag name)`
38+
- `--url <value> - URL to the release source`
39+
40+
### `sentry release finalize <org/version...>`
41+
42+
Finalize a release
43+
44+
**Flags:**
45+
- `--released <value> - Custom release timestamp (ISO 8601). Defaults to now.`
46+
- `--url <value> - URL for the release`
47+
48+
### `sentry release delete <org/version...>`
49+
50+
Delete a release
51+
52+
**Flags:**
53+
- `-y, --yes - Skip confirmation prompt`
54+
55+
### `sentry release deploy <org/version environment name...>`
56+
57+
Create a deploy for a release
58+
59+
**Flags:**
60+
- `--url <value> - URL for the deploy`
61+
- `--started <value> - Deploy start time (ISO 8601)`
62+
- `--finished <value> - Deploy finish time (ISO 8601)`
63+
- `-t, --time <value> - Deploy duration in seconds (sets started = now - time, finished = now)`
64+
65+
### `sentry release deploys <org/version...>`
66+
67+
List deploys for a release
68+
69+
### `sentry release set-commits <org/version...>`
70+
71+
Set commits for a release
72+
73+
**Flags:**
74+
- `--auto - Use repository integration to auto-discover commits (default)`
75+
- `--local - Read commits from local git history`
76+
- `--clear - Clear all commits from the release`
77+
- `--initial-depth <value> - Number of commits to read with --local - (default: "20")`
78+
79+
### `sentry release propose-version`
80+
81+
Propose a release version
82+
83+
**Examples:**
84+
85+
```bash
86+
# List releases (auto-detect org)
87+
sentry release list
88+
89+
# List releases in a specific org
90+
sentry release list my-org/
91+
92+
# View release details
93+
sentry release view 1.0.0
94+
sentry release view my-org/1.0.0
95+
96+
# Create and finalize a release
97+
sentry release create 1.0.0 --finalize
98+
99+
# Create a release, then finalize separately
100+
sentry release create 1.0.0
101+
sentry release set-commits 1.0.0 --auto
102+
sentry release finalize 1.0.0
103+
104+
# Set commits from local git history
105+
sentry release set-commits 1.0.0 --local
106+
107+
# Create a deploy
108+
sentry release deploy 1.0.0 production
109+
sentry release deploy 1.0.0 staging "Deploy #42"
110+
111+
# Propose a version from git HEAD
112+
sentry release create $(sentry release propose-version)
113+
114+
# Output as JSON
115+
sentry release list --json
116+
sentry release view 1.0.0 --json
117+
```
118+
119+
All commands also support `--json`, `--fields`, `--help`, `--log-level`, and `--verbose` flags.

0 commit comments

Comments
 (0)