Skip to content
Back to skills

Release

ASecurity

Ship a build to itch.io — pick the version, write release notes from the features finished since the last tag, push a tag that makes CI export the game, smoke-test the exported build itself, and upload it to a private playtest page or the public page with butler. Steam is a later, separate step. Use when the user asks to release, publish, ship, upload a build, or make a playtest build.

  • 3 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
developmentgogitapi

Works with

  • api

Security analysis

A100/100

Scanned November 7, 2026

npx -y skills add amramos/game-ai-sdlc --skill release --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Release?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Release
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/amramos-release/badge)](https://www.skillsdirectory.com/skills/amramos-release)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: release
description: Ship a build to itch.io — pick the version, write release notes from the features finished since the last tag, push a tag that makes CI export the game, smoke-test the exported build itself, and upload it to a private playtest page or the public page with butler. Steam is a later, separate step. Use when the user asks to release, publish, ship, upload a build, or make a playtest build.
argument-hint: "playtest | public, and optionally a version"
disable-model-invocation: true
---

# Release

Two kinds of release, both through CI:

- **Playtest build** — a restricted itch.io page for testers, one per milestone, so they play the real
  export rather than the editor.
- **Public release** — the game's public itch.io page.

The build and upload happen in **GitHub Actions on a tag** (the engine pack's setup creates the
workflows). This skill decides what to tag, prepares the notes, pushes the tag, and checks the result.

## 0. First release only: the itch.io setup

`setup-godot` deliberately leaves this for now, the first time it's needed. Check what already
exists (`gh variable list`, and `gh secret list` for the secret's *name* — its value is never
visible), and do only what's missing.

**The owner's part** — agents never handle store accounts or API keys, so give these as two short
steps with links:

1. create the itch.io game page (public, can stay in draft) and a second, **restricted** page for
   playtests (*Visibility → Restricted*, with testers' accounts or a password), and tell you the two
   page slugs;
2. create a butler API key (itch.io → Settings → API keys) and store it themselves by running
   `gh secret set BUTLER_API_KEY` in the project folder — it prompts for the value, so the key never
   passes through the agent.

**The agent's part**, once the owner gives the slugs: set the repository variables
`gh variable set ITCH_USER --body <user>`, `ITCH_GAME` (public slug) and `ITCH_PLAYTEST_GAME`
(restricted slug), then confirm all four names are listed.

## 1. Pick the version and write the notes

- Find the last tag (`git describe --tags --abbrev=0`) and the features finished since: merged PRs
  (`gh pr list --state merged --search "merged:>=<date>"`) and the issues they closed.
- Version: `vMAJOR.MINOR.PATCH` for public releases; `playtest-<yyyymmdd>[-n]` for playtest builds.
  Recommend a version and confirm it with the owner.
- Write player-facing notes — what's new, what changed, known issues — into `CHANGELOG.md` (newest
  first). No internal jargon, ticket ids or agent names. Update the version shown in the game if
  the project keeps one in its settings.

Commit the notes on a branch and open a PR; the tag goes on `main` after it merges.

## 2. Tag, and let CI build

Push the tag on the merged commit (`git tag <version> && git push origin <version>`). The release
workflow exports every platform preset, runs the export smoke test, and uploads with butler:

| Tag | Upload to | Channels |
|---|---|---|
| `v*` | `ITCH_USER/ITCH_GAME` | `windows`, `linux`, `mac`, `web` (whichever presets exist) |
| `playtest-*` | `ITCH_USER/ITCH_PLAYTEST_GAME` | same |

Watch the run (`gh run watch`) and report its result. A failed export or smoke test stops the upload.

## 3. Test the exported build, not the editor

The editor and an export can disagree: an export can silently drop settings or resources the editor
shows. The workflow's smoke test launches the exported build headless and checks it boots and reaches
its first screen. After a release that changed something visible, also play the exported build
(or have a blind AI playtester play it, see `playtest`) before telling testers it's ready.

## 4. After

- Playtest build: give the owner the restricted page link and a two-line "what to try" for testers.
- Public release: the store page text, screenshots and capsule images stay the owner's job; offer
  drafts (from `docs/art/` frames and real captures) if asked.
- Move the release's epic or milestone to `In Review`; the owner decides when it's done.

## Steam, later

Steam needs a Steamworks partner account, an app id and depots, set up by the owner. When the project
gets there, the same pattern applies: CI builds; agents prepare `steamcmd` build scripts; the owner
holds the account and Steam Guard and **sets builds live themselves**.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in development →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.