Release-Please Setup
Scaffold or migrate a repository onto release-please. The skill generates release-please-config.json and .release-please-manifest.json from a monorepo package scan, then guides you through wiring the release-please.yml workflow and optionally an opt-in deploy/publish template from the six provided in templates/.
Two modes
| Mode |
When to use |
| Greenfield (default) |
New repo with no prior tags. All packages start at 0.0.0 (or --initial <ver>). |
--migrate |
Existing repo with hand-maintained <component>-v* tags. Manifest is seeded from detected file versions; existing deploy workflows keep working unchanged. |
Quick start
# SCRIPTS = absolute path to this skill's scripts/ directory
# Always dry-run first — no files are written
python3 SCRIPTS/release_please_setup.py --root . --dry-run # greenfield
python3 SCRIPTS/release_please_setup.py --root . --migrate --dry-run # migrate
python3 SCRIPTS/release_please_setup.py --root . --migrate # write files
CLI flags: --root (repo root), --globs (comma-separated package globs; default packages/*,backend/*,frontend/*), --migrate (migration mode), --single (force single-package config), --initial (starting version; default 0.0.0), --dry-run (print output, no writes), --out-dir (write location; default --root).
Then:
- Copy
templates/release-please.yml into .github/workflows/.
- Set the
REPO_TOKEN secret — see CONTRACT.md. ⚠️ GITHUB_TOKEN-created tags do not trigger other workflows; a PAT is required for deploy templates to fire.
- Pick a deploy template (optional).
Deploy template menu
| Template |
Use for |
deploy-fly.yml |
Fly.io app deploy |
publish-npm-oidc.yml |
npm Trusted Publishing (OIDC, no token) |
release-asset.yml |
Build artifact → GitHub Release (e.g. .vsix, .zip) |
deploy-docker-matrix.yml |
Docker image → Amazon ECR / any registry |
deploy-frontend-host.yml |
Gated frontend deploy (Amplify, Vercel, Netlify) |
deploy-generic.yml |
Any build + deploy command |
| None |
Release-please only — add deploy later |
Fill all __TOKEN__ placeholders before committing; see WORKFLOW.md for the complete placeholder reference table.
Output structure
<repo-root>/
├── release-please-config.json ← written by the script
├── .release-please-manifest.json ← written by the script
└── .github/workflows/
├── release-please.yml ← copy from templates/
└── deploy-<component>.yml ← copy from templates/ (optional)
Monorepo: each package gets include-component-in-tag: true, tag-separator: "-", and a mutual exclude-paths matrix (tags like user-service-v1.2.0). Single-package: minimal config, tags are v<semver>.
Common issues
- Release PR not created — check commits follow Conventional Commits, you are on the default branch, and the workflow has
contents: write + pull-requests: write permissions.
- Deploy didn't fire — the REPO_TOKEN gotcha; see CONTRACT.md and TROUBLESHOOTING.md.
- Wrong version after migration — discovery missed the version; edit
.release-please-manifest.json manually.
References
- WORKFLOW.md — Greenfield and migration runbooks + placeholder reference table
- EXAMPLES.md — Three worked examples (acme monorepo, papia-studio migration, single-package)
- CONTRACT.md — Tag format, REPO_TOKEN gotcha, job outputs, trigger variants
- TROUBLESHOOTING.md — Error reference
1---2name: release-please-setup3description: Scaffold or migrate a repository onto release-please. Generates release-please-config.json, .release-please-manifest.json, and a release-please.yml workflow, plus an opt-in menu of tag-keyed deploy/publish templates (Docker/ECR matrix, frontend host deploy, npm OIDC publish, GitHub Release asset, Fly.io deploy, generic). Supports monorepo (mutual exclude-paths matrix), single-package, and mixed-language (node/simple/python) repos. Use when user runs /release-please-setup, mentions "release please", "set up release please", "automate releases", "conventional-commit releases", "monorepo release automation", or "migrate to release-please".4---5
6# Release-Please Setup
7
8Scaffold or migrate a repository onto [release-please](https://github.com/googleapis/release-please). The skill generates `release-please-config.json` and `.release-please-manifest.json` from a monorepo package scan, then guides you through wiring the `release-please.yml` workflow and optionally an opt-in deploy/publish template from the six provided in `templates/`.
9
10## Two modes
11
12| Mode | When to use |
13|---|---|
14| **Greenfield** (default) | New repo with no prior tags. All packages start at `0.0.0` (or `--initial <ver>`). |
15| **`--migrate`** | Existing repo with hand-maintained `<component>-v*` tags. Manifest is seeded from detected file versions; existing deploy workflows keep working unchanged. |
16
17## Quick start
18
19```bash
20# SCRIPTS = absolute path to this skill's scripts/ directory
21# Always dry-run first — no files are written
22python3 SCRIPTS/release_please_setup.py --root . --dry-run # greenfield
23python3 SCRIPTS/release_please_setup.py --root . --migrate --dry-run # migrate
24python3 SCRIPTS/release_please_setup.py --root . --migrate # write files
25```
26
27**CLI flags:** `--root` (repo root), `--globs` (comma-separated package globs; default `packages/*,backend/*,frontend/*`), `--migrate` (migration mode), `--single` (force single-package config), `--initial` (starting version; default `0.0.0`), `--dry-run` (print output, no writes), `--out-dir` (write location; default `--root`).
28
29**Then:**
30
311. Copy `templates/release-please.yml` into `.github/workflows/`.
322. Set the `REPO_TOKEN` secret — see CONTRACT.md. ⚠️ GITHUB_TOKEN-created tags do **not** trigger other workflows; a PAT is required for deploy templates to fire.
333. Pick a deploy template (optional).
34
35## Deploy template menu
36
37| Template | Use for |
38|---|---|
39| `deploy-fly.yml` | Fly.io app deploy |
40| `publish-npm-oidc.yml` | npm Trusted Publishing (OIDC, no token) |
41| `release-asset.yml` | Build artifact → GitHub Release (e.g. `.vsix`, `.zip`) |
42| `deploy-docker-matrix.yml` | Docker image → Amazon ECR / any registry |
43| `deploy-frontend-host.yml` | Gated frontend deploy (Amplify, Vercel, Netlify) |
44| `deploy-generic.yml` | Any build + deploy command |
45| None | Release-please only — add deploy later |
46
47Fill all `__TOKEN__` placeholders before committing; see WORKFLOW.md for the complete placeholder reference table.
48
49## Output structure
50
51```
52<repo-root>/
53├── release-please-config.json ← written by the script
54├── .release-please-manifest.json ← written by the script
55└── .github/workflows/
56 ├── release-please.yml ← copy from templates/
57 └── deploy-<component>.yml ← copy from templates/ (optional)
58```
59
60Monorepo: each package gets `include-component-in-tag: true`, `tag-separator: "-"`, and a mutual `exclude-paths` matrix (tags like `user-service-v1.2.0`). Single-package: minimal config, tags are `v<semver>`.
61
62## Common issues
63
64- **Release PR not created** — check commits follow [Conventional Commits](https://conventionalcommits.org), you are on the default branch, and the workflow has `contents: write` + `pull-requests: write` permissions.
65- **Deploy didn't fire** — the REPO_TOKEN gotcha; see CONTRACT.md and TROUBLESHOOTING.md.
66- **Wrong version after migration** — discovery missed the version; edit `.release-please-manifest.json` manually.
67
68## References
69
70- [WORKFLOW.md](WORKFLOW.md) — Greenfield and migration runbooks + placeholder reference table
71- [EXAMPLES.md](EXAMPLES.md) — Three worked examples (acme monorepo, papia-studio migration, single-package)
72- [CONTRACT.md](CONTRACT.md) — Tag format, REPO_TOKEN gotcha, job outputs, trigger variants
73- [TROUBLESHOOTING.md](TROUBLESHOOTING.md) — Error reference