From 8495adc47b3819f2aea2866dce11dcfe47191a15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Mon, 14 Sep 2026 11:45:08 +0000 Subject: [PATCH] :construction_worker: Retitle release commits to :rocket: The release commit message is a machine-read convention (release-gate in ci.yml skips the redundant main CI run on it), so the emoji carries weight: change the mint in scripts/release.sh, the recognized pattern, and both docs in one atomic commit. No tags or release commits exist yet, so nothing historical parses differently. :rocket: matches the gitmoji semantic (deploy/publish) better than :bookmark: here. --- .gitea/workflows/ci.yml | 4 ++-- CONTRIBUTING.md | 2 +- scripts/release.sh | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 0f3f2d1..afd8905 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: # pushes `main` and the tag seconds apart, and the tag points at exactly # the HEAD commit that push delivers — so the branch run would verify the # identical tree the tag run verifies anyway (plus `publish`). When a push - # to `main` is headed by a release commit (`:bookmark: Release x.y.z`, the + # to `main` is headed by a release commit (`:rocket: Release x.y.z`, the # single commit release.sh creates), the full CI is skipped here and the # tag run becomes the authoritative one for that SHA. All other pushes — # PRs, tags, ordinary `main` merges — see `skip=false` and run as before. @@ -38,7 +38,7 @@ jobs: # Keyed on the ref, not just the message: a tag run checks out # the same release commit, and `publish` needs its `build`. if [ "${REF}" = "refs/heads/main" ] && - git log -1 --format=%s | grep -qE '^:bookmark: Release [0-9]+\.[0-9]+\.[0-9]+$'; then + git log -1 --format=%s | grep -qE '^:rocket: Release [0-9]+\.[0-9]+\.[0-9]+$'; then echo 'Release commit on main — the tag run covers this SHA; skipping full CI.' echo 'skip=true' >>"${GITHUB_OUTPUT}" else diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2cb58bd..3fa590d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -87,7 +87,7 @@ This is why every test in the suite pairs an `expectTypeOf(...)` with an `assert - **Branch naming:** `feature/` / `fix/` / `chore/` - **Starting work:** `npm run create:branch -- /`. It refuses, without changing anything, unless the working tree is clean (untracked files included), no merge/rebase/cherry-pick is in progress, `main` matches its upstream, and `npm run test` is green on `main` — so a later failure is always attributable to your edits. The prefix is still _your_ call, inferred from the task; the script validates it rather than guessing it. - **Merging:** `npm run create:finish` (on the branch). It asserts the same clean-tree / no-operation / current-`main` preconditions, fast-forwards a stale `main` (a true divergence is refused), merges the branch `--no-ff`, runs `npm run verify`, and deletes the branch only after the merge is green. The push is deliberately left to `create:release`, so the merge stays local and reviewable — read the diff yourself before finishing. -- CI runs `npm run check` + `npm run test:ci` on every push to `main` — this is the authoritative gate. The one exception: a push headed by a release commit (`:bookmark: Release x.y.z`) skips the full `build`/`maintain` jobs, because `create:release` pushes the tag for that exact commit right after and the tag run is the authoritative one (see `release-gate` in [.gitea/workflows/ci.yml](./.gitea/workflows/ci.yml)). +- CI runs `npm run check` + `npm run test:ci` on every push to `main` — this is the authoritative gate. The one exception: a push headed by a release commit (`:rocket: Release x.y.z`) skips the full `build`/`maintain` jobs, because `create:release` pushes the tag for that exact commit right after and the tag run is the authoritative one (see `release-gate` in [.gitea/workflows/ci.yml](./.gitea/workflows/ci.yml)). - **Releases are NOT triggered by pushes.** Only the maintainer triggers a release (see [Publishing workflow](#publishing-workflow)). ## Publishing workflow diff --git a/scripts/release.sh b/scripts/release.sh index 952489d..b8ec2a3 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -103,10 +103,10 @@ fi echo "Amending release commit..." git add package.json package-lock.json "${CHANGELOG}" # The exact message format is load-bearing: the `release-gate` job in -# .gitea/workflows/ci.yml recognizes `:bookmark: Release x.y.z` on main and +# .gitea/workflows/ci.yml recognizes `:rocket: Release x.y.z` on main and # skips the full CI run, since the tag push immediately after verifies the # identical SHA (and publishes). Keep the two in sync. -git commit --amend -m ":bookmark: Release ${VERSION}" +git commit --amend -m ":rocket: Release ${VERSION}" echo "Creating tag ${VERSION}..." git tag "${VERSION}"