Skip to content
Back to skills

Release

ASecurity

Cuts a tagged release by dispatching the repository's release pipeline, `.github/workflows/release-tag.yml`. The pipeline validates the version, generates release notes from the commits since the last stable tag, and creates the tag + GitHub Release with the official Claude App token; the tag-push event then triggers `vscode-publish.yml` (platform elps binaries + VS Code Marketplace extension). **Use the pipeline. Do not create the tag or release by hand.** Two reasons, both documented in the...

  • 36 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 12, 2026
developmentbashgitapi

Works with

  • vscode
  • api
  • mcp

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add luthersystems/elps --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/luthersystems-release/badge)](https://www.skillsdirectory.com/skills/luthersystems-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
# /release — Create a GitHub Release

Cuts a tagged release by dispatching the repository's release pipeline,
`.github/workflows/release-tag.yml`. The pipeline validates the version,
generates release notes from the commits since the last stable tag, and
creates the tag + GitHub Release with the official Claude App token; the
tag-push event then triggers `vscode-publish.yml` (platform elps binaries +
VS Code Marketplace extension).

**Use the pipeline. Do not create the tag or release by hand.** Two reasons,
both documented in the workflow's own header:

- A tag created with the default `GITHUB_TOKEN` (e.g. `gh release create`
  from a workflow, or an Actions-context push) does NOT trigger
  `vscode-publish.yml` — GitHub suppresses workflow→workflow events for that
  token. The release would exist but the binaries and extension would never
  publish.
- Direct tag pushes are blocked from agent sandboxes, so `git push origin
  vX.Y.Z` is not available there anyway.

**A release is externally visible immediately** — the tag publishes the VS
Code extension to the Marketplace. Treat cutting one as a production action.

## Trigger

Use when asked to create a release, tag a release, cut a release, or ship a
version.

## Arguments

Optional: version bump type or explicit version.
- `patch` (default) — bump patch: v1.44.0 -> v1.44.1
- `minor` — bump minor: v1.44.0 -> v1.45.0
- `major` — bump major: v1.44.0 -> v2.0.0
- `vX.Y.Z` — explicit version

## Workflow

### 1. Determine the version

```bash
git fetch --tags origin
LATEST=$(git tag --list 'v*' | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -1)
echo "Latest stable tag: $LATEST"
git log $LATEST..origin/main --oneline
```

If there are no unreleased commits, stop and say so. Compute the next
version from the bump argument (or use the explicit version). The pipeline
re-validates — exact `vMAJOR.MINOR.PATCH` format, strictly newer than the
latest stable tag by semver — and refuses anything else, so a wrong guess
fails safely rather than shipping.

### 2. Verify main is releasable

The pipeline always cuts from **main HEAD** — there is no ref input. So
before dispatching, confirm main is what you intend to ship and its CI is
green:

```bash
gh run list --branch main --limit 3   # or the Actions API if gh is absent
```

`make release-notes` previews the same information locally (latest tag, CI
status, commits since the tag, and the waived API breaks) when `gh` is
available.

**Waived API breaks.** `bash scripts/api-breaks-since.sh <lasttag>` prints
every `scripts/api-breaks.txt` entry added since the last stable tag -- the
breaking changes the API break gate (#761) let through. The release workflow
lists each under "Breaking changes" in the notes; check they are there on a
`dry_run`. After the release ships, delete those entries (a follow-up PR).

### 3. Update the VS Code extension changelog (if applicable)

If any unreleased change affects the extension (grammar, LSP, DAP,
formatter, minifier, binary bundling), add a section to
`editors/vscode/CHANGELOG.md` and land it on main **before** dispatching —
the pipeline releases main HEAD, so a changelog commit after the dispatch
misses the release. Skip for internal refactors, test-only changes, and CI
tweaks.

### 4. Dispatch the pipeline

Trigger `release-tag.yml` with the version:

```bash
gh workflow run release-tag.yml -f version=vX.Y.Z
# optional rehearsal first:
gh workflow run release-tag.yml -f version=vX.Y.Z -f dry_run=true
```

Without `gh` (agent sandboxes), use the Actions dispatch API / MCP
`actions_run_trigger` on `release-tag.yml` with input `version: vX.Y.Z`. A 403
"Resource not accessible by integration" means the session's GitHub App cannot
dispatch workflows: stop, and give the user the exact `gh workflow run` command
to run instead.

`dry_run: true` prints the validation result and the generated notes
without creating anything — use it if there is any doubt about the version
or the notes.

The pipeline then: validates (format, strictly-newer, checkout == main
HEAD), summarizes the merged PRs/commits since the last stable tag into the
release notes, and runs `gh release create` with the App token. On a
validation failure it STOPS with an explanation and creates nothing; the
agent transcript is uploaded as the `release-tag-trace-<run id>` artifact
(14-day retention) so a refusal is explainable after the fact.

### 5. Monitor the publish

The tag push triggers the VS Code extension publish:

```bash
gh run list --workflow vscode-publish.yml --limit 3
```

Verify all 9 jobs pass (4 binary builds + 4 platform publishes + 1
universal). The extension lands at
https://marketplace.visualstudio.com/items?itemName=LutherSystems.elps-lang

### 6. Report

Return the release URL (https://github.com/luthersystems/elps/releases/tag/vX.Y.Z),
the publish-pipeline status, and a summary of what shipped.

## Fallback (human operator only)

`make release VERSION=vX.Y.Z` performs the same validation and `gh release
create` from a local machine. It requires `gh` authenticated as a real user
(a personal token's tag DOES trigger the publish workflow — the suppression
applies to the Actions `GITHUB_TOKEN`, not to user or App tokens). Prefer
the pipeline even then: it keeps every release on one audited path with one
identity.

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.

Comments

Loading comments…

Newsletter

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