Skip to main content

github-release

Cut a new GitHub release for sqd-portal — bump Cargo.toml version, tag, push, let CI build/publish the docker image, then create the GitHub release page with standardized notes. Use when the user asks to "release", "publish", "cut vX.Y.Z", or "ship".

Ir a la instalación

Datos de origen

Repositorio
subsquid/sqd-portal
Última actividad en el origen
22 de julio de 2026 a las 08:00
Idioma detectado de SKILL.md
inglés
Estrellas
4
Forks
6

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.

Explorador de archivos
2 archivos

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
github-release
description
Cut a new GitHub release for sqd-portal — bump Cargo.toml version, tag, push, let CI build/publish the docker image, then create the GitHub release page with standardized notes. Use when the user asks to "release", "publish", "cut vX.Y.Z", or "ship".
metadata
{"internal":true}
# sqd-portal release End-to-end release procedure. Bumps `Cargo.toml`, tags `vX.Y.Z`, pushes, lets `.github/workflows/docker.yml` build and publish the docker image, then creates the GitHub release page with standardized notes. ## Preconditions Confirm before starting: - `git status` is clean on `master` (or the user has staged the version bump deliberately). - The user named a target version, e.g. `0.10.1`. If not, ask. - The current `version` in `Cargo.toml` is the previous release. Mismatched bumps that landed silently in earlier commits happen — verify before tagging. - For RCs use a suffix: `v0.10.1-rc1`. The CI trigger is `tags: ['v**']` so both release and rc tags fire it. ## Steps ### 1. Bump version Edit `Cargo.toml`: ```toml version = "X.Y.Z" ``` Run `cargo build` once so `Cargo.lock` updates. Don't ship a bump without the matching lockfile change — CI will surface it later otherwise. ### 2. Commit and tag ```sh git add Cargo.toml Cargo.lock git commit -m "Bump version" git tag vX.Y.Z git push origin master git push origin vX.Y.Z ``` Both pushes are required — the docker workflow triggers on the tag push, not the commit. ### 3. Watch the docker build ```sh RUN_ID=$(gh run list --repo subsquid/sqd-portal --workflow=docker.yml --limit 1 --json databaseId --jq '.[0].databaseId') gh run watch "$RUN_ID" --repo subsquid/sqd-portal --exit-status ``` The workflow delegates to `subsquid/github-workflows/.github/workflows/docker-on-tag.yml` and publishes `subsquid/sqd-portal:vX.Y.Z` (+ `:latest`). Build time ~5–10 min for multi-arch. If it fails, surface the log — common causes are dep resolution timeouts and registry hiccups; don't retry blindly. ### 4. Create the GitHub release page The docker workflow does **not** create the release page — do it explicitly. Use [release-template.md](release-template.md) for the body. ```sh gh release create vX.Y.Z --repo subsquid/sqd-portal --title "vX.Y.Z" --notes "$(cat <<'EOF' ## <Headline> <lead, bullets, doc link, compare link — see release-template.md> EOF )" ``` For a tag that was pushed earlier without a release page: ```sh gh release edit vX.Y.Z --repo subsquid/sqd-portal --title "vX.Y.Z" --notes "..." ``` ### 5. Confirm Print: `https://github.com/subsquid/sqd-portal/releases/tag/vX.Y.Z` ## Release notes format See [release-template.md](release-template.md). Hard rules learned the hard way: - **GitHub title = `vX.Y.Z`.** This repo's convention. The body's `## <Headline>` is the prose headline; the UI shows tag and title side-by-side. - **No deployment / ops instructions.** Release notes describe *what changed in the software*, not how to roll it out. `terminationGracePeriodSeconds`, `preStop` hooks, kubelet config — all of that belongs in `docs/X.md` or a runbook. If you catch yourself writing "Action required for Kubernetes", move it out. - **No CI / internal-only changes.** Skip `cargo test` workflow additions, clippy fixes, refactors that don't change observable behavior. - **General > specific.** Don't name specific tools (`nginx-ingress`), config keys (`pre_drain_grace_period_sec`), or your own benchmark numbers in the body. Point to a doc for those details. - **Doc + PR ref** as a one-liner at the end of the prose, before the compare link: `See [`docs/X.md`](url) for ... (#PR)`. - **Compare link.** Always end with `**Full Changelog**: https://github.com/subsquid/sqd-portal/compare/vPREV...vNEW`. Resolve `vPREV` with `git merge-base vPREV vNEW` when branching is non-linear — the previous tag in `git tag --list` sorted order is not always the right base. ## Failure modes - **Tag exists**: `git tag vX.Y.Z` fails. Either the user already tagged or a previous attempt didn't complete. Check `gh release view vX.Y.Z` and `gh run list --workflow=docker.yml`. For an RC that needs to move to a different commit, force-update: `git tag -f vX.Y.Z <newcommit>` + `git push -f origin vX.Y.Z`. Destructive — confirm with the user first. - **Local docker build with `--platform linux/amd64` from a Mac silently produces a broken image.** The default Dockerfile uses `FROM --platform=$BUILDPLATFORM`, so on an arm64 Mac you get an arm64 ELF in an amd64 OCI manifest — `exec format error` on the target host. Never recommend the local-build-and-push path for production images. CI handles multi-arch correctly; route the user there instead. - **CI build fails on tag push but a release page already exists.** The page is independent of the image. Delete or skip the page; fix the build; retag if needed.
Ver en GitHub