一键导入
release
Release the keiro Hackage packages (keiro-core, keiro, keiro-pgmq, keiro-migrations, keiro-dsl) together under one shared PVP version, in dependency order.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Release the keiro Hackage packages (keiro-core, keiro, keiro-pgmq, keiro-migrations, keiro-dsl) together under one shared PVP version, in dependency order.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | release |
| description | Release the keiro Hackage packages (keiro-core, keiro, keiro-pgmq, keiro-migrations, keiro-dsl) together under one shared PVP version, in dependency order. |
| argument-hint | [major|minor|patch] |
| disable-model-invocation | true |
| allowed-tools | Read, Bash, Edit, Glob, Grep, Write, AskUserQuestion |
Release the publishable keiro packages to Hackage
following the Haskell PVP (A.B.C.D). This is a
Cabal multi-package workspace (GHC 9.12 / GHC2024, Nix flake, just
task runner). All published packages share one version number and are
released together, but each gets its own annotated git tag.
A.B.C.D:
A.B — major: breaking API changes (removed/renamed exports, changed
types or semantics).C — minor: backwards-compatible API additions (new exports, modules,
instances).D — patch: bug fixes, docs, internal-only or performance changes.keiro/keiro-pgmq depending on keiro-core) must be bumped
in lockstep with the release version.Publish in this order — dependencies first. keiro and keiro-pgmq depend
on keiro-core at the library level; keiro-migrations and keiro-dsl have no
internal library dependencies but are released with the set.
keiro-core/) — core stream/codec/event contracts. No internal deps.keiro/) — the event-sourcing & workflow framework. Depends on keiro-core.keiro-pgmq/) — PGMQ job-queue integration. Depends on keiro-core.keiro-migrations/) — schema migrations + keiro-migrate exe. No internal library deps.keiro-dsl/) — typed .keiro spec toolchain (library + keiro-dsl exe). Library is standalone.The following packages are NOT released to Hackage:
keiro-test-support/) — internal: shared PostgreSQL
test fixtures, consumed only by the packages' test suites.jitsurei/) — internal: guide-backed worked examples, not a
reusable library. (Note: site-dist/jitsurei/ is generated website output —
ignore it; it is not in cabal.project.)⚠️ Hackage prerequisite — read before uploading. Several publishable packages currently depend on git-pinned upstreams that are not yet on Hackage, declared as
source-repository-packageincabal.project:keiro-core→keiki,kiroku-store;keiro-pgmq→ the shibuya pgmq adapter stack;keiro-migrations→kiroku-store-migrations,codd. Hackage cannot resolve git dependencies, socabal uploadof a package with unpublished deps produces a package that will not build for consumers. Before the real upload, confirm every transitive dependency of the package being published is available on Hackage with compatible bounds.keiro-dsl's library has no such git deps and is the most self-contained. If the upstreams are not yet published, stop and tell the user — do not upload a broken package.
$ARGUMENTS is optional:
major, minor, or patch — forces the bump level..cabal (they all match —
e.g. keiro/keiro.cabal).<pkg>-<version>), so
list them and take the highest previous shared version:
git tag --list 'keiro-*' 'keiro-core-*'. Use the flagship tag
keiro-<prev-version> as the diff anchor (all packages share the version, so
one anchor is enough). If there are no tags, this is the first release —
say so and diff from the repository root.git log --oneline <anchor-tag>..HEAD (or the full log for a first
release) to list commits since the last release.Present a summary: current version, last release anchor (or "none — first release"), commit count since then, and which package directories changed.
$ARGUMENTS is major, minor, or patch, use that bump level.## [Unreleased] section of
keiro/CHANGELOG.md:
keiro/CHANGELOG.md Unreleased section already flags a
Breaking API change (validated event streams) — respect that.B, reset C and D to 0 (0.1.0.0 → 0.2.0.0)C, reset D to 0 (0.1.0.0 → 0.1.1.0)D (0.1.0.0 → 0.1.0.1)Set the new version: in every published package's cabal file:
keiro-core/keiro-core.cabal, keiro/keiro.cabal, keiro-pgmq/keiro-pgmq.cabal,
keiro-migrations/keiro-migrations.cabal, keiro-dsl/keiro-dsl.cabal.
Leave keiro-test-support and jitsurei as they are unless you deliberately
choose to bump them for consistency (they are not published).
keiro and keiro-pgmq depend on keiro-core (currently keiro-core >=0.1).
Tighten these to a PVP-compatible bound matching the new version:
keiro-core ^>=A.B.C.D. Update every section that lists keiro-core
(library and test-suite stanzas). keiro-dsl and keiro-migrations have no
internal library dependency to bump.
keiro/CHANGELOG.md exists and follows
Keep a Changelog + PVP with dates in
YYYY-MM-DD. Move the ## [Unreleased] content into a new
## <version> — <YYYY-MM-DD> section above the previous entries.keiro-core, keiro-pgmq,
keiro-migrations, keiro-dsl) that lack a CHANGELOG.md, create one when
they have notable changes this cycle — same header + format, with a section
for the new version. If a package genuinely has no user-facing change, a
short "No changes this release" note is fine.CHANGELOG.md summarizing the release across packages
(create it if missing) — it feeds the GitHub release notes in step 7.Show the user every change — version bumps, bound updates, changelog edits — for review before committing.
Run the project's canonical release gate. The test suites need PostgreSQL, which
just verify provisions via process-compose:
nix fmt # treefmt: fourmolu + cabal-fmt + nixpkgs-fmt
just verify # process-compose-check + jitsurei + cabal build all + tests + diagrams --check + keiro-migrations-test
nix flake check # treefmt + pre-commit hooks gate
nix fmt first so formatting changes are in the tree before the checks.CHANGELOG.md) must be git add-ed before
nix flake check, since Nix evaluates the git tree.Stage all modified .cabal and CHANGELOG.md files (and any files nix fmt
touched).
Create a single commit with a Conventional Commits message:
chore(release): <version>. The body should summarize what's in the release
and justify the chosen bump level.
Create one annotated per-package tag at this commit, all at the shared version:
for pkg in keiro-core keiro keiro-pgmq keiro-migrations keiro-dsl; do
git tag -a "$pkg-<version>" -m "$pkg <version>"
done
Push the commit and tags: git push && git push --tags.
Do this only after the user has approved the changes in step 3.
For each publishable package, in the order
keiro-core → keiro → keiro-pgmq → keiro-migrations → keiro-dsl:
cd <pkg-dir>.cabal check — fix any packaging warnings before uploading.just verify, but a final per-package check is cheap): keiro → cabal test keiro-test, keiro-pgmq → cabal test keiro-pgmq-test, keiro-migrations
→ cabal test keiro-migrations-test, keiro-dsl → cabal test keiro-dsl-test. keiro-core has no dedicated suite — skip.cabal sdist, then cabal upload --publish <tarball-path>.cabal haddock --haddock-for-hackage --haddock-hyperlink-source --haddock-quickjump,
then cabal upload --publish --documentation <docs-tarball-path>.https://hackage.haskell.org/package/<pkg>-<version>.If any upload fails, stop. Never continue publishing a package whose
dependency failed to upload (e.g. do not publish keiro if keiro-core failed).
After all uploads, present a summary table:
| Package | Version | Hackage URL |
|---|---|---|
| keiro-core | X.Y.Z.W | https://hackage.haskell.org/package/keiro-core-X.Y.Z.W |
| keiro | X.Y.Z.W | https://hackage.haskell.org/package/keiro-X.Y.Z.W |
| keiro-pgmq | X.Y.Z.W | https://hackage.haskell.org/package/keiro-pgmq-X.Y.Z.W |
| keiro-migrations | X.Y.Z.W | https://hackage.haskell.org/package/keiro-migrations-X.Y.Z.W |
| keiro-dsl | X.Y.Z.W | https://hackage.haskell.org/package/keiro-dsl-X.Y.Z.W |
After all Hackage uploads succeed, create a GitHub release. Tags are
per-package, so anchor the release on the flagship tag keiro-<version> and
title it with the shared version:
gh release create keiro-<version> \
--title "keiro <version>" \
--notes "$(cat <<'EOF'
## Packages
| Package | Hackage |
|---------|---------|
| keiro-core | https://hackage.haskell.org/package/keiro-core-X.Y.Z.W |
| keiro | https://hackage.haskell.org/package/keiro-X.Y.Z.W |
| keiro-pgmq | https://hackage.haskell.org/package/keiro-pgmq-X.Y.Z.W |
| keiro-migrations | https://hackage.haskell.org/package/keiro-migrations-X.Y.Z.W |
| keiro-dsl | https://hackage.haskell.org/package/keiro-dsl-X.Y.Z.W |
## What's Changed
<paste this version's entries from the root CHANGELOG.md>
EOF
)"
CHANGELOG.md entries as the release-notes body.nix fmt, just verify, cabal check, nix flake check.cabal check, or upload. Do not
continue publishing dependents after an upstream upload fails.