Complete task002 through task016 across cache correctness, editor lifecycle, C boundaries, build and release governance, dictionary provenance, performance, interactive workflows, tests, documentation, and final cleanup.
2.1 KiB
Releasing emacs-kp
Releases are immutable snapshots. Changed bytes require a new version, new checksums, and a new tag; do not replace an existing release asset.
Repository gate
Run the local invariant check before creating a release commit:
tests/check-release.sh
It verifies:
- every GitHub Action is pinned to a full commit SHA;
- Windows and the public ERT batch entry point are present in CI;
.phrasedecision records are not ignored;- the package header has a matching dated changelog release;
- the Elisp C-module requirement matches the C header ABI version.
This static gate does not prove a remote workflow or published artifact.
Release checklist
-
Move all shipped entries out of
Unreleasedinto a dated[X.Y.Z] - YYYY-MM-DDsection and setVersion: X.Y.Zinekp.el. -
If the C API changed, bump both
ekp-c-module-required-versioninekp-utils.elandEKP_VERSION_MAJOR/EKP_VERSION_MINORinekp_c/ekp_module.h. Update the C version in user and developer docs. -
Run:
tests/check-release.sh tests/run-tests.sh emacs EKP_TEST_SEED=20260728 tests/run-tests.sh emacs --random-order tests/run-tests-isolated.sh emacs tests/check-dictionaries.sh dictionaries/update.sh check make -C ekp_c PROFILE=portable emacs -Q --batch -L . -l tests/ekp-fuzz.el -
Byte-compile with warnings as errors and run package-lint/checkdoc using the same pinned inputs as CI.
-
Verify the worktree is clean and the release commit is the reviewed commit.
-
Create
vX.Y.Zat that exact commit. Never move an existing release tag. -
Let the pinned Linux, macOS, Windows, and sanitizer CI jobs finish successfully on the release commit.
-
Build release artifacts from the tagged commit with
PROFILE=portable. Record a SHA-256 checksum for every artifact. -
Push the commit and tag, publish the immutable assets and checksums, then verify the remote tag resolves to the reviewed release commit.
If any item fails, fix it in a new commit and restart from the repository gate. Do not publish a partial release.