configure-plugin/skills/release-please-standards/SKILL.md
release-please standards and configuration reference. Use when configuring release workflows, checking automation compliance, or working with version bumps.
npx skillsauth add laurigates/claude-plugins release-please-standardsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Use this skill when... | Use the alternative instead when... |
|---|---|
| You need the canonical release-please workflow, manifest, and config-file shape | You want to audit or set up release-please end-to-end as an interactive workflow — use configure-release-please |
| You are checking an existing release-please setup against documented conventions | You want runtime detection of repo type and existing config before changes — use configure-release-please |
| Another skill needs to cite the standard release-please configuration | You are configuring monorepo component tags, per-package extra-files, or shared→component tag migration — use git-plugin:release-please-configuration |
Standard release-please configuration for automated semantic versioning and changelog generation.
File: .github/workflows/release-please.yml
The release PR needs a token that can trigger other workflows. Two patterns;
the GitHub App token is preferred (the laurigates org standard), with the
MY_RELEASE_PLEASE_TOKEN PAT kept as a legacy fallback.
GitHub App token (preferred) — create-github-app-token mints a token from
RELEASE_PLEASE_APP_ID (variable) and RELEASE_PLEASE_PRIVATE_KEY (secret),
which gitops provisions on repos flagged release_please = true:
name: Release Please
on:
push:
branches:
- main
permissions:
contents: write
pull-requests: write
jobs:
release-please:
runs-on: ubuntu-latest
steps:
- uses: actions/create-github-app-token@v3
id: app-token
with:
app-id: ${{ vars.RELEASE_PLEASE_APP_ID }}
private-key: ${{ secrets.RELEASE_PLEASE_PRIVATE_KEY }}
- uses: googleapis/release-please-action@v4
with:
token: ${{ steps.app-token.outputs.token }}
PAT (legacy) — a MY_RELEASE_PLEASE_TOKEN secret in repository settings:
- uses: googleapis/release-please-action@v5
with:
token: ${{ secrets.MY_RELEASE_PLEASE_TOKEN }}
File: release-please-config.json
{
"packages": {
".": {
"release-type": "node",
"changelog-sections": [
{"type": "feat", "section": "Features"},
{"type": "fix", "section": "Bug Fixes"},
{"type": "perf", "section": "Performance"},
{"type": "deps", "section": "Dependencies"},
{"type": "docs", "section": "Documentation", "hidden": true},
{"type": "chore", "section": "Miscellaneous", "hidden": true}
]
}
},
"plugins": ["node-workspace"]
}
File: .release-please-manifest.json
{
".": "0.0.0"
}
Note: Version 0.0.0 is a placeholder - release-please updates this automatically.
nodenode-workspacepackage.json version fieldpythonpyproject.toml version field, __version__ in codehelmChart.yaml version fieldMonorepos need component on every package and include-component-in-tag: true
at the root, plus per-package extra-files and (optionally) the
linked-versions plugin:
{
"packages": {
"packages/frontend": {"release-type": "node", "component": "frontend"},
"packages/backend": {"release-type": "node", "component": "backend"}
},
"plugins": ["node-workspace"]
}
For the full monorepo strategy — component tagging, duplicate-tag / multiple-paths
fixes, per-package extra-files path rules, linked versions, adding a package,
and shared→component tag migration — see git-plugin:release-please-configuration.
Workflow file: .github/workflows/release-please.yml
googleapis/release-please-action@v5MY_RELEASE_PLEASE_TOKEN secretmainConfig file: release-please-config.json
Manifest file: .release-please-manifest.json
The workflow uses a dedicated release token (not GITHUB_TOKEN) because:
Two token patterns are accepted:
| Pattern | How | When |
|---------|-----|------|
| GitHub App token (preferred) | actions/create-github-app-token → app-id: ${{ vars.RELEASE_PLEASE_APP_ID }}, private-key: ${{ secrets.RELEASE_PLEASE_PRIVATE_KEY }}, passed as token: ${{ steps.app-token.outputs.token }} | laurigates org standard — credentials are gitops-provisioned on release_please = true repos |
| PAT (legacy) | token: ${{ secrets.MY_RELEASE_PLEASE_TOKEN }} | Where the GitHub App isn't set up |
A workflow already using the App-token pattern is compliant — do not flag it to
switch to MY_RELEASE_PLEASE_TOKEN.
| Status | Condition | |--------|-----------| | PASS | All three files present with valid configuration | | WARN | Files present but using deprecated action version (older than v5) | | FAIL | Missing required files or invalid configuration |
Workflow validation:
v5 (warn if older)push to mainConfig validation:
Manifest validation:
IMPORTANT: Release-please manages these files automatically:
CHANGELOG.md - Never edit manuallypackage.json, pyproject.toml, Chart.yaml.release-please-manifest.json - Only edit for initial setupSee release-please-protection skill for enforcement.
Release-please requires conventional commit messages:
| Prefix | Release Type | Example |
|--------|--------------|---------|
| feat: | Minor | feat: add user authentication |
| fix: | Patch | fix: correct login timeout |
| feat!: | Major | feat!: redesign API |
| BREAKING CHANGE: | Major | In commit body |
RELEASE_PLEASE_APP_ID
variable + RELEASE_PLEASE_PRIVATE_KEY secret (gitops provisions these on
release_please = true repos); legacy: add MY_RELEASE_PLEASE_TOKEN to
repository secretsGITHUB_TOKENdevelopment
Debug HTTP APIs: trace requests, inspect headers. Use when a request fails: check status first.
documentation
Render architecture diagrams from text sources. Use when documenting system topology.
tools
Inspect JSON payloads and extract nested fields. Use when parsing API responses.
tools
--- name: no-description allowed-tools: Read --- # No Description This skill has no description and must be dropped with a warning.