metro-release
Draft a react/metro GitHub release — build a changelog from commits since the last tag and create a draft release.
Informações da origem
- Repositório
- react/metro
- Última atividade na origem
- 22 de junho de 2026 às 16:48
- Idioma detectado do SKILL.md
- inglês
- Estrelas
- 5.646
- Forks
- 702
Opções de instalação
Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.
Revise os arquivos de origem
Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.
Exibindo SKILL.md
SKILL.md
Instruções da origem · Visualização somente leitura- name
- metro-release
- description
- Draft a react/metro GitHub release — build a changelog from commits since the last tag and create a draft release.
- disable-model-invocation
- true
# New Metro Release
## Overview
Creates a **draft** GitHub release for [`react/metro`](https://github.com/react/metro) by reading commits since the last tag and turning them into a labeled changelog. The release process is manual; this skill automates the mechanical parts (diffing commits, fetching PR/author metadata, formatting notes) and leaves the editorial judgment to you.
**Source of truth is the `react/metro` remote on GitHub, not your local checkout.** Always fetch fresh before diffing.
**Never publish.** Always create the release as a draft and stop. A human reviews and publishes.
## Step 1 — Sync from react/metro
Fetch the canonical tags and `main` directly from `react/metro` so the diff is authoritative regardless of how your local remotes are configured:
```bash
git fetch https://github.com/react/metro.git main --tags
```
Find the latest release tag (tags are `vMAJOR.MINOR.PATCH`, e.g. `v0.84.4`):
```bash
LAST_TAG=$(git tag --list 'v*' --sort=-v:refname | head -1)
echo "$LAST_TAG"
```
## Step 2 — List candidate commits
```bash
git log --oneline "$LAST_TAG"..FETCH_HEAD
```
Squash-merged PRs end with `(#NNNN)`. Use the PR number to pull the title, URL, and author's GitHub login:
```bash
gh pr view <NNNN> --repo react/metro --json title,url,author -q '.author.login + " | " + .url + " | " + .title'
```
For a direct commit with no PR, link the commit instead: `https://github.com/react/metro/commit/<sha>`.
## Step 3 — Decide which commits to include
Include only **observable, public-facing** changes. Map each to a label:
| Label | When |
|---|---|
| `[Breaking]` | Any semver-major / backwards-incompatible change |
| `[Deprecated]` | A public feature or API marked deprecated |
| `[Feature]` | New API or observable capability |
| `[Fix]` | Fix for an observable bug |
| `[Performance]` | Non-functional change that observably improves performance |
| `[Types]` | Additions/improvements to Flow or TypeScript coverage for public APIs |
| `[Experimental]` | Changes to experimental features (e.g. `unstable_`-prefixed config) — see below |
**Exclude** (no changelog entry):
- Meta-internal sync commits — `Deploy X.Y.Z to xplat`, and anything with no observable OSS effect.
- Flow version upgrades, reformatting, refactors with no behavior change.
- Tests, CI, website/docs-only changes.
Judgment notes:
- One commit can produce multiple entries; one entry can reference multiple related commits/PRs. 1-to-1 is typical.
- Reword commit titles for clarity when needed.
- When unsure whether something is user-facing, lean toward including it (and bumping minor).
## Step 4 — Decide the version
Semantic versioning with the **major pinned at 0**:
- **Any breaking change** → bump the **minor** (`0.84.4` → `0.85.0`).
- **Otherwise** (fixes, new features, perf, types — all backwards-compatible) → bump the **patch** (`0.84.4` → `0.84.5`).
The tag and the release title are both the `v`-prefixed version, e.g. `v0.84.5`.
Changes to experimental features are **never** treated as breaking, even if they break between versions.
## Step 5 — Build the release notes
Match the established format exactly. Each entry: `` - **[Label]**: description (PR-or-commit-URL by @author)``. Always @-mention the author's GitHub login. If an author has no linked GitHub account, fall back to their full name.
```markdown
- **[Feature]**: Support `/[metro-watchFolders]/n/` paths for `.bundle` and `.map` requests (https://github.com/react/metro/pull/1695 by @huntie)
- **[Fix]**: Treat `import().catch()` as optional under `transformer.allowOptionalDependencies` (https://github.com/react/metro/pull/1697 by @robhogan)
- **[Performance]**: Interleave resolution attempts with building node_modules candidate paths (https://github.com/react/metro/commit/a817960e5d783c9463173aa84c0245e5864bb5a8 by @kitten)
**Full Changelog**: https://github.com/react/metro/compare/<LAST_TAG>...<NEW_TAG>
```
Put experimental entries in a **separate list** below the main changelog, under this exact disclaimer:
```markdown
> NOTE: Experimental features are not covered by semver and can change at any time.
- **[Experimental]**: ... (URL by @author)
```
## Step 6 — Create the draft release (or fall back to a file)
Always write the notes to a file first (preserves Markdown):
```bash
NOTES_FILE=/tmp/metro-release-notes.md # write the changelog here
```
Then check whether you can actually create the release. You need `gh` authenticated **and** write/admin access to `react/metro`:
```bash
gh auth status >/dev/null 2>&1 \
&& gh api repos/react/metro --jq '.permissions.push' 2>/dev/null
# prints "true" only if authenticated with write access
```
**If that prints `true`** — create the draft. The tag does not need to exist yet; for a draft, GitHub creates it on publish.
```bash
gh release create <NEW_TAG> \
--repo react/metro \
--draft \
--target main \
--title <NEW_TAG> \
--notes-file "$NOTES_FILE"
```
Print the draft URL from the command output and **stop**. Do not publish — a human reviews and publishes.
**If `gh` is not authenticated, or push access is missing/`false`** — do not attempt the API call. Fall back to the manual path:
1. Leave the formatted notes in `$NOTES_FILE` and print its path.
2. Tell the user to open https://github.com/react/metro/releases/new, set the tag to `<NEW_TAG>`, target `main`, title `<NEW_TAG>`, paste the notes, and **Save draft** (not publish).
3. If `gh` is installed but unauthenticated, mention they can run `! gh auth login` and re-run this skill to automate it; if they lack write access, they need admin/maintainer permission on `react/metro` first.
Ver no GitHub