release-scaffold
Use when a project needs a release process, versioned downloads, or a "Release" button — triggers on "/release-scaffold", "add a release process", "set up…
Skill by Esequiel378
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/esequiel378-release-scaffold
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/release-scaffold
What's inside
- Skill name
release-scaffold- Description
- Use when a project needs a release process, versioned downloads, or a "Release" button — triggers on "/release-scaffold", "add a release process", "set up releases", "ship binaries", "how do we cut a release", or a repo with no release workflow on GitHub or Forgejo.
- License
- MIT
- Instructions
- 88 lines in SKILL.md · view on GitHub
Files (9)
- SKILL.md
- release.forgejo.yml · template/
- release.github.yml · template/
- main.go · template/tools/release/
- main_test.go · template/tools/release/
- notes.go · template/tools/release/
- notes_test.go · template/tools/release/
- version.go · template/tools/release/
- version_test.go · template/tools/release/
SKILL.md (first lines)
# Release Scaffold
Sets up a release that starts from a button and can't go wrong in the usual
ways. Nobody types a version. A failed run leaves no tag. The number never
goes backwards, and the binary knows its own version.
Most hand-rolled release workflows miss the same things. The version is a
free-text input, so `v0.0.1` can ship after `v1.0.0`. There are no release
candidates. The version logic is bash nobody tests. A failed upload leaves a
draft that blocks the next run. A re-run of the publish job ships a stale
version. The templates here close each of those.
## What the process guarantees
| Guarantee | How |
| --- | --- |
| Only a click releases, only from `main` | `workflow_dispatch` with `bump` (patch/minor/major) and an `rc` checkbox; the first step refuses other refs |
| The version is computed, never typed | `tools/release version`: last *final* tag + bump; `-rc` makes `<target>-rc.N`; a final promotes its rcs; going backwards is refused. Table-tested |
| The tag comes last | Draft at the dispatched commit → upload → publish, which creates the tag. A failed run leaves no tag |
| Never clobbers | Only a 404 counts as a free tag. A draft left by a failed run is deleted first |
| One release at a time | Concurrency group `release`, `cancel-in-progress: false` |
| A re-run can't ship a stale number | "Still the next version" recomputes before publishing |
| A broken commit doesn't ship | The build job runs the same checks CI runs |
| The binary knows its version | Stamped at build time; one built binary is run and must print it |
| Notes on any forge | `tools/release notes`: `main`'s first-parent subjects since the last final tag |
## Files
- [template/tools/release/](template/tools/release/) — the tool: `version` and `notes`, standard library only, with tests. Go 1.24+, whatever the project's language.
- [template/release.github.yml](template/release.github.yml) — publishes with `gh`.
- [template/release.forgejo.yml](template/release.forgejo.yml) — publishes with `curl` against Forgejo's API. Full `https://data.forgejo.org/` action URLs.
## Steps
1. Read the repo. Name its forge, its language, how it builds, and what CI runs.
2. Run `git tag --list 'v*'`. If tags exist that aren't `vX.Y.Z` or `vX.Y.Z-rc.N`, ask the user. The tool ignores them.
3. If the repo has no `v*` tags, tell the user the first release is `v0.1.0` whatever the bump.
4. Copy `template/tools/release/` into the repo as `tools/release/`. The tool needs Go 1.24 or later.
5. If the repo has no root `go.mod`, give `tools/release/` its own: `module <repo>/tools/release` and `go 1.24`.
6. In that case, replace `go run ./tools/release` with `go -C tools/release run .` everywhere: workflow, usage text, doc comment.
7. In that case, point every `go-version-file` at `tools/release/go.mod`, with `cache: false`. Add `go -C tools/release test .` to the build job's checks.
8. If the forge is GitHub, copy `release.github.yml` to `.github/workflows/release.yml`.
9. If the forge is Forgejo, copy `release.forgejo.yml` to `.forgejo/workflows/release.yml`.
10. If the forge is Forgejo, ask the user to confirm the server is v14 or later.
11. If the default branch isn't `main`, rename `main` in the workflow and in the tool's comments.
12. Replace each `# PROJECT:` step in the build job with the project's real commands.
13. Make the checks the ones CI already runs. If the project has no CI, run its test command and any linter it already configures.
14. If the build needs another toolchain, add its setup action. On Forgejo, pin a tag that `https://data.forgejo.org/actions/<name>` has.
15. Build every platform the project ships into `dist/`. If the project ships nothing yet, ask the user which platforms.
16. Name each per-platform file `<app>_<version>_<os>_<arch>`, with `.exe` on Windows. Name a platform-independent file `<app>_<version>.<ext>`. For Go, build with `-trimpath -ldflags "-s -w"` and `CGO_ENABLED=0` unless it needs cgo.
17. Stamp the version into each binary. If the program has no version variable, add one that defaults to `dev`.
18. Make the program print `<app> <version>` for `--version`. `<app>` is the package name; `<version>` keeps its `v`.
19. If a manifest rejects the `v`, write `${VERSION#v}` there.
20. If the language has no build-time flag like Go's `-X`, write the version into a copy of the source or the package manifest during the build.
21. Keep the step that runs one built file and checks it prints `<app> $VERSION`. Run the one the runner can execute.
22. Replace every remaining `APP` with the project's name.
23. Order the build steps so each step's inputs exist before it runs. A test that reads installed dependencies runs after the install step.
24. Add a "Release" section to the README: where the button is, the two inputs, and how to preview the version.
25. If the repo keeps decision records, record the choices in one.
## Verify before you finish
1. Run `go test ./tools/release` (or `go -C tools/release test .`).
2. Run `go run ./tools/release version -bump patch` and show the result.
3. Copy the working tree into a new directory, without build outputs. Run the build job's commands there.
4. If the runner is Linux and a Linux shell is available, run them on Linux.
5. Show the user what this run could not prove: the workflow itself runs only once it is on `main`.
6. Suggest a first dispatch with `rc` ticked. It proves the pipeline without spending a final version.
## When a platform can't build on the runner
Cross-compile when the toolchain allows it. If tests need that platform and no
runner has it, the release can't run them. Say so in the README and in the
decision record. Don't let the gap pass silently.
## Common mistakes
| Mistake | Why it hurts |
| --- | --- |
| Triggering on a pushed tag | The tag exists before the build. A failure leaves an orphan tag to delete by hand |
| `gh release create` without `--draft` | GitHub creates the tag at once, before the upload |
| `forgejo-release` action | It creates the tag before the upload, and reuses one at the same commit |
| `fetch-depth: 1` in the version or release job | The tool refuses a shallow clone: missing tags would look like no releases |
| Version logic in workflow bash | It can't be tested without releasing |
| `--generate-notes` only | GitHub-only, and rc-to-final notes then skip what the rcs shipped |
| No version check on the built binary | A wrong `-X` path silently ships `dev` |From Esequiel378/skills, MIT.
More from Esequiel378/skills
- 0.565score
pr-describe
Esequiel378
Use when writing or reviewing the body of a pull request — after `gh pr create`, when filling in an empty PR description, or when asked whether a PR body says…
SkillAFreshness: AClaude Code +9 - 0.561score
architecture-improve
Esequiel378
Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.
SkillAFreshness: AClaude Code +9 - 0.539score
pr-review
Esequiel378
Use when the user wants a diff or PR reviewed from every angle at once — triggers on "/pr-review", "review this PR", "review my changes", "full review", or…
SkillAFreshness: AClaude Code +9 - 0.539score
codebase-design
Esequiel378
Shared vocabulary for designing deep modules.
SkillAFreshness: AClaude Code +9 - 0.530score
retro
Esequiel378
Conduct a retrospective on a coding session.
SkillAFreshness: AClaude Code +9 - 0.524score
pr-review-po
Esequiel378
Use when the user asks for a PR or diff review in the "po" style — "po review", "/pr-review-po", "review this like po" — a failure-mode-and-evidence pass that…
SkillBFreshness: BClaude Code +9 - 0.524score
prompt-improve
Esequiel378
Use when the user hands you a rough, vague, or messy prompt and wants it sharpened before acting — triggers on "improve this prompt", "fix my prompt"…
SkillBFreshness: BClaude Code +9 - 0.524score
prompt-improve-review
Esequiel378
Use to run the periodic analysis + tuning pass over the prompt-improve run log — triggers on "/prompt-improve-review", "review my prompt log", "tune…
SkillBFreshness: BClaude Code +9 - 0.524score
pr-review-sl
Esequiel378
Use when the user asks for a PR or diff review in the "sl" style — "sl review", "/pr-review-sl", "review this like sl" — a terse staff-architect pass that…
SkillBFreshness: BClaude Code +9 - 0.524score
commit-write
Esequiel378
Use when writing a commit message or a PR title — before `git commit`, before `gh pr create`, when renaming an existing PR, or when checking whether a commit…
SkillBFreshness: BClaude Code +9 - 0.524score
domain-modeling
Esequiel378
Use when building or sharpening a project's domain model — triggers on "/domain-modeling", discussing codebase terminology, naming a new concept, resolving…
SkillBFreshness: BClaude Code +9 - 0.524score
plan-map
Esequiel378
Use when a chunk of work is too big to hold in one agent session and the way to the end isn't visible yet — triggers on "/plan-map", "chart a map", "this is…
SkillBFreshness: BClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 15, 2026 (13 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Esequiel378/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Esequiel378
- 0.565score
pr-describe
Esequiel378
Use when writing or reviewing the body of a pull request — after `gh pr create`, when filling in an empty PR description, or when asked whether a PR body says…
SkillAFreshness: AClaude Code +9 - 0.561score
architecture-improve
Esequiel378
Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.
SkillAFreshness: AClaude Code +9 - 0.539score
codebase-design
Esequiel378
Shared vocabulary for designing deep modules.
SkillAFreshness: AClaude Code +9 - 0.539score
pr-review
Esequiel378
Use when the user wants a diff or PR reviewed from every angle at once — triggers on "/pr-review", "review this PR", "review my changes", "full review", or…
SkillAFreshness: AClaude Code +9 - 0.530score
retro
Esequiel378
Conduct a retrospective on a coding session.
SkillAFreshness: AClaude Code +9 - 0.524score
plan-map
Esequiel378
Use when a chunk of work is too big to hold in one agent session and the way to the end isn't visible yet — triggers on "/plan-map", "chart a map", "this is…
SkillBFreshness: BClaude Code +9
Cite this page
release-scaffold skill. Agent Mart. https://agentmart.dev/skills/esequiel378-release-scaffold (last updated 2026-10-24)