Skip to main content

release

Cut a protolint release — preflight checks, tagging, and verifying that all six distribution channels actually published. Use when asked to release, publish, ship a version, or when a release partially failed and needs diagnosing.

Datos de origen

Repositorio
yoheimuta/protolint
Última actividad en el origen
14 de agosto de 2026 a las 11:41
Idioma detectado de SKILL.md
inglés
Estrellas
694
Forks
65

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
release
description
Cut a protolint release — preflight checks, tagging, and verifying that all six distribution channels actually published. Use when asked to release, publish, ship a version, or when a release partially failed and needs diagnosing.
# Releasing protolint One git tag fans out to six channels. `release.sh` only pushes the tag; everything else is CI. The job is mostly **verifying that each channel really published**, because they fail independently and silently. ## 1. Preflight Run from a clean `master` that is in sync with `origin`: ```bash go build ./... && go test ./... (cd bdist/js && npm ci --ignore-scripts && npx tsc && npx eslint . && npx prettier --check .) ``` `.github/workflows/go.yml` and the JS workflows only run on `pull_request`, so nothing has verified `master` as a whole. Do not skip this. ## 2. Pick the version Every channel takes its version from the git tag — `.goreleaser.yml` ldflags, `build.gradle` from `GITHUB_REF_NAME`, and `npm version from-git`. Nothing needs bumping by hand; the tag *is* the version. Look at what changed since the last tag, and remember the npm package ships to a different audience than the Go binary: - **patch** — Go-side fixes, dependency bumps, docs - **minor** — new lint rules, or anything that changes what npm consumers need: a raised `engines.node`, a module-system switch, renamed install scripts ## 3. Tag ```bash ./release.sh vX.Y.Z "Release vX.Y.Z" ``` ## 4. Watch the pipeline `goreleaser` runs on the tag push. `publish_npm` and `publish_wheel` then trigger off its **completion, not its success** — so a green goreleaser does not mean the downstream jobs passed. ```bash gh run watch <goreleaser-run-id> --exit-status gh run list --workflow publish_npm.yml --limit 1 gh run list --workflow publish_wheel.yml --limit 1 ``` ## 5. Verify every channel Check the registries, not the workflow badges. ```bash gh release view vX.Y.Z --json assets --jq '.assets|length' # expect 9 npm view protolint version curl -s https://pypi.org/pypi/protolint-bin/json | jq -r .info.version curl -s https://repo1.maven.org/maven2/io/github/yoheimuta/protoc-gen-protolint/maven-metadata.xml | grep release ``` Maven Central publishes automatically via the Central Publisher Portal step in `goreleaser.yml` (`publishing_type=automatic`). No manual staging promotion. Then prove the npm package actually works end to end — this exercises `postinstall.js`, which downloads the release binary and is the part most likely to break: ```bash cd "$(mktemp -d)" && npm init -y >/dev/null && npm install protolint@X.Y.Z ./node_modules/.bin/protolint version # must print X.Y.Z ./node_modules/.bin/protoc-gen-protolint version ``` ## Troubleshooting **`npm error 404 ... PUT https://registry.npmjs.org/protolint`** Authentication, not a missing package. npm publishes through [trusted publishing](https://docs.npmjs.com/trusted-publishers) — there is no token. Check the trusted publisher on npmjs.com still points at `yoheimuta` / `protolint` / `publish_npm.yml`. **Renaming `publish_npm.yml` breaks publishing**, because the registration matches on the workflow filename. **`fatal: No tags can describe '<sha>'` in *Set package version*** `npm version from-git` needs history back to the tag. `publish_npm.yml` uses `fetch-depth: 0` and checks the tag out explicitly for this reason; a shallow checkout reintroduces the failure. **`npm warn publish "bin[protolint]" script name ... was invalid and removed`** Harmless. npm only strips the `./` prefix; the published `bin` entries survive. Confirm with `npm view protolint@X.Y.Z bin` if in doubt. **A channel failed after the tag is already public** Do not re-tag. Fix the workflow, merge, then re-run the failed workflow with `gh workflow run <name>.yml --ref master`. `publish_npm` and `publish_wheel` both have `workflow_dispatch`, and `publish_npm` checks out the latest tag, so a re-run publishes the tagged tree even after later merges have landed on `master`. ## After the release Post the version on any issue that asked for it, and close it.
Ver en GitHub