Release Creation Command
Create GitHub releases using release-please automation or manual release workflows for containerized applications.
When to Use This Skill
| Use this skill when... |
Use deploy-handoff instead when... |
Cutting a new release from main and tagging a version |
Documenting an already-deployed service for another developer or client |
| Setting up or auditing release-please automation and manifests |
Generating access URLs, monitoring links, and onboarding checklists for a deployed resource |
| Publishing a manual GitHub release, draft, or pre-release |
Producing handoff prose for a ticket rather than cutting a version |
| Driving the version-tag side of a containerized release pipeline |
Building or hardening container images themselves (use container-development) |
Context
- Git remotes: !
git remote -v
- Branch: !
git branch --show-current
- Recent tags: !
git tag --sort=-v:refname -l 'v*' --format='%(refname:short)' -n5
- Last release commit: !
git log --oneline --max-count=5
- Release config: !
find . -maxdepth 1 -name 'release-please-config.json'
- Manifest: !
find . -maxdepth 1 -name '.release-please-manifest.json'
- Changelog: !
find . -maxdepth 1 -name 'CHANGELOG.md'
Parameters
Parse from $ARGUMENTS:
$1 (VERSION): Semantic version string (e.g., 1.2.0, v2.0.0-rc.1)
--draft: Create release as draft (not published)
--prerelease: Mark as pre-release
Execution
Execute this release workflow:
Step 1: Determine release strategy
Check whether the project uses release-please or manual releases:
- If
release-please-config.json exists, use the release-please workflow
- If no release-please config exists, use the manual release workflow
Step 2a: Release-please workflow
If release-please is configured:
- Verify conventional commits exist since last release tag
- Check for an open release PR:
gh pr list --label "autorelease: pending" --json number,title,url
- If a release PR exists, report its status and URL
- If no release PR exists, explain that release-please creates PRs automatically from conventional commits
- Provide guidance on merging the release PR to trigger the release
Step 2b: Manual release workflow
If no release-please config:
- Validate the VERSION argument follows semver format
- Check that the working tree is clean:
git status --porcelain
- Confirm the branch is main or master
- Create the release with:
gh release create v<VERSION> --title "v<VERSION>" --generate-notes
- Add
--draft flag if --draft was passed
- Add
--prerelease flag if --prerelease was passed
Step 3: Set up release-please (if requested)
If the user asks to set up release-please automation:
- Create
release-please-config.json with manifest release type:{
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
"release-type": "simple",
"packages": {
".": {
"component": "<project-name>",
"extra-files": [
{"type": "json", "path": "package.json", "jsonpath": "$.version"}
],
"changelog-sections": [
{"type": "feat", "section": "Features"},
{"type": "fix", "section": "Bug Fixes"},
{"type": "perf", "section": "Performance"},
{"type": "refactor", "section": "Code Refactoring"},
{"type": "docs", "section": "Documentation"}
]
}
}
}
- Create
.release-please-manifest.json with current version:{
".": "0.0.0"
}
- Recommend adding the release-please GitHub Action workflow
Step 4: Report results
Print a summary including:
- Release version and URL (if created)
- Release PR status (if release-please)
- Next steps for the user
Release-Please GitHub Action
Recommended workflow for automation:
name: Release
on:
push:
branches: [main]
permissions:
contents: write
pull-requests: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: googleapis/release-please-action@v4
with:
config-file: release-please-config.json
manifest-file: .release-please-manifest.json
Agentic Optimizations
| Context |
Command |
| List recent tags |
git tag --sort=-v:refname -l 'v*' -n5 |
| Check release PRs |
gh pr list --label "autorelease: pending" --json number,title,url |
| Latest release |
gh release view --json tagName,publishedAt,url |
| Create release |
gh release create v1.0.0 --generate-notes |
| Create draft |
gh release create v1.0.0 --draft --generate-notes |
| Create prerelease |
gh release create v1.0.0-rc.1 --prerelease --generate-notes |
| List all releases |
gh release list --json tagName,isLatest,isDraft,isPrerelease |
| Commits since tag |
git log v1.0.0..HEAD --oneline |
Quick Reference
| Flag |
Description |
--draft |
Create as draft release (not visible publicly) |
--prerelease |
Mark as pre-release version |
--generate-notes |
Auto-generate release notes from commits |
--notes-file FILE |
Use file contents as release notes |
--target BRANCH |
Target branch for the release tag |
Related Skills
deploy-handoff - Generate deployment handoff documentation
container-development - Container image construction and optimization
1---2name: deploy-release3description: Create and publish releases via release-please or manual GitHub releases. Use when cutting a release, tagging a version, or setting up release-please config.4---5
6# Release Creation Command
7
8Create GitHub releases using release-please automation or manual release workflows for containerized applications.
9
10## When to Use This Skill
11
12| Use this skill when... | Use `deploy-handoff` instead when... |
13|---|---|
14| Cutting a new release from `main` and tagging a version | Documenting an already-deployed service for another developer or client |
15| Setting up or auditing release-please automation and manifests | Generating access URLs, monitoring links, and onboarding checklists for a deployed resource |
16| Publishing a manual GitHub release, draft, or pre-release | Producing handoff prose for a ticket rather than cutting a version |
17| Driving the version-tag side of a containerized release pipeline | Building or hardening container images themselves (use `container-development`) |
18
19## Context
20
21- Git remotes: !`git remote -v`
22- Branch: !`git branch --show-current`
23- Recent tags: !`git tag --sort=-v:refname -l 'v*' --format='%(refname:short)' -n5`
24- Last release commit: !`git log --oneline --max-count=5`
25- Release config: !`find . -maxdepth 1 -name 'release-please-config.json'`
26- Manifest: !`find . -maxdepth 1 -name '.release-please-manifest.json'`
27- Changelog: !`find . -maxdepth 1 -name 'CHANGELOG.md'`
28
29## Parameters
30
31Parse from `$ARGUMENTS`:
32
33- `$1` (VERSION): Semantic version string (e.g., `1.2.0`, `v2.0.0-rc.1`)
34- `--draft`: Create release as draft (not published)
35- `--prerelease`: Mark as pre-release
36
37## Execution
38
39Execute this release workflow:
40
41### Step 1: Determine release strategy
42
43Check whether the project uses release-please or manual releases:
44
451. If `release-please-config.json` exists, use the **release-please workflow**
462. If no release-please config exists, use the **manual release workflow**
47
48### Step 2a: Release-please workflow
49
50If release-please is configured:
51
521. Verify conventional commits exist since last release tag
532. Check for an open release PR: `gh pr list --label "autorelease: pending" --json number,title,url`
543. If a release PR exists, report its status and URL
554. If no release PR exists, explain that release-please creates PRs automatically from conventional commits
565. Provide guidance on merging the release PR to trigger the release
57
58### Step 2b: Manual release workflow
59
60If no release-please config:
61
621. Validate the VERSION argument follows semver format
632. Check that the working tree is clean: `git status --porcelain`
643. Confirm the branch is main or master
654. Create the release with:
66 ```
67 gh release create v<VERSION> --title "v<VERSION>" --generate-notes
68 ```
695. Add `--draft` flag if `--draft` was passed
706. Add `--prerelease` flag if `--prerelease` was passed
71
72### Step 3: Set up release-please (if requested)
73
74If the user asks to set up release-please automation:
75
761. Create `release-please-config.json` with manifest release type:
77 ```json
78 {
79 "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
80 "release-type": "simple",
81 "packages": {
82 ".": {
83 "component": "<project-name>",
84 "extra-files": [
85 {"type": "json", "path": "package.json", "jsonpath": "$.version"}
86 ],
87 "changelog-sections": [
88 {"type": "feat", "section": "Features"},
89 {"type": "fix", "section": "Bug Fixes"},
90 {"type": "perf", "section": "Performance"},
91 {"type": "refactor", "section": "Code Refactoring"},
92 {"type": "docs", "section": "Documentation"}
93 ]
94 }
95 }
96 }
97 ```
982. Create `.release-please-manifest.json` with current version:
99 ```json
100 {
101 ".": "0.0.0"
102 }
103 ```
1043. Recommend adding the release-please GitHub Action workflow
105
106### Step 4: Report results
107
108Print a summary including:
109- Release version and URL (if created)
110- Release PR status (if release-please)
111- Next steps for the user
112
113## Release-Please GitHub Action
114
115Recommended workflow for automation:
116
117```yaml
118name: Release
119on:
120 push:
121 branches: [main]
122
123permissions:
124 contents: write
125 pull-requests: write
126
127jobs:
128 release:
129 runs-on: ubuntu-latest
130 steps:
131 - uses: googleapis/release-please-action@v4
132 with:
133 config-file: release-please-config.json
134 manifest-file: .release-please-manifest.json
135```
136
137## Agentic Optimizations
138
139| Context | Command |
140|---------|---------|
141| List recent tags | `git tag --sort=-v:refname -l 'v*' -n5` |
142| Check release PRs | `gh pr list --label "autorelease: pending" --json number,title,url` |
143| Latest release | `gh release view --json tagName,publishedAt,url` |
144| Create release | `gh release create v1.0.0 --generate-notes` |
145| Create draft | `gh release create v1.0.0 --draft --generate-notes` |
146| Create prerelease | `gh release create v1.0.0-rc.1 --prerelease --generate-notes` |
147| List all releases | `gh release list --json tagName,isLatest,isDraft,isPrerelease` |
148| Commits since tag | `git log v1.0.0..HEAD --oneline` |
149
150## Quick Reference
151
152| Flag | Description |
153|------|-------------|
154| `--draft` | Create as draft release (not visible publicly) |
155| `--prerelease` | Mark as pre-release version |
156| `--generate-notes` | Auto-generate release notes from commits |
157| `--notes-file FILE` | Use file contents as release notes |
158| `--target BRANCH` | Target branch for the release tag |
159
160## Related Skills
161
162- `deploy-handoff` - Generate deployment handoff documentation
163- `container-development` - Container image construction and optimization