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