with one click
release
Release all packages to Hackage following PVP
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Release all packages to Hackage following PVP
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | release |
| description | Release all packages to Hackage following PVP |
| argument-hint | [major|minor|patch] |
| disable-model-invocation | true |
| allowed-tools | Read, Bash, Edit, Glob, Grep, Write, AskUserQuestion |
Release all packages from this multi-package repository to Hackage using a single shared version.
All packages share the same version number and are released together. A single git tag v<version> marks each release.
The packages MUST be published in this order due to inter-package dependencies:
pgmq-bench is NOT released to Hackage (it is a benchmark suite).
$ARGUMENTS is optional:
major, minor, or patch — specifies the bump level.cabal file (they all share the same version).v* to identify the last release point.git log --oneline <last-tag>..HEAD to list commits since the last release.Present a summary showing:
The Haskell PVP version format is A.B.C.D:
A.B is the major version — bump for breaking API changes (removed/renamed exports, changed types, changed semantics)C is the minor version — bump for backwards-compatible API additions (new exports, new modules, new type class instances)D is the patch version — bump for bug fixes, documentation, internal-only changes, performance improvementsRules:
$ARGUMENTS is major, minor, or patch, use that bump level.Increment the version:
B, reset C and D to 0 (e.g., 0.2.0.1 → 0.3.0.0)C, reset D to 0 (e.g., 0.2.0.1 → 0.2.1.0)D (e.g., 0.2.0.1 → 0.2.0.2)pgmq-core/pgmq-core.cabalpgmq-hasql/pgmq-hasql.cabalpgmq-migration/pgmq-migration.cabalpgmq-effectful/pgmq-effectful.cabalpgmq-config/pgmq-config.cabalpgmq-core dependency bound in pgmq-hasql/pgmq-hasql.cabal, pgmq-effectful/pgmq-effectful.cabal, and pgmq-config/pgmq-config.cabal.pgmq-hasql dependency bound in pgmq-effectful/pgmq-effectful.cabal and pgmq-config/pgmq-config.cabal.pgmq-effectful dependency bound in pgmq-config/pgmq-config.cabal.CHANGELOG.md, add a new section for the new version above any previous entries. Use today's date in YYYY-MM-DD format.CHANGELOG.md.Show the user ALL changes (version bumps, dependency bounds, changelog entries) for review before committing.
nix fmt to ensure code is properly formatted.cabal build all to verify cabal build succeeds.nix build to verify nix build succeeds.
git add-ed before nix build will see them, since nix uses the git tree..cabal and CHANGELOG.md files.Release <new-version>git tag -a v<version> -m "Release <version>"git push && git push --tagsFor EACH package, in dependency order (pgmq-core → pgmq-hasql → pgmq-migration → pgmq-effectful → pgmq-config):
cd <pkg-dir>cabal check to verify no packaging issues.cabal test <pkg> to ensure tests pass (skip for packages without test suites).cabal sdist and then cabal upload --publish <tarball-path> to publish the source distribution.cabal haddock --haddock-for-hackage --haddock-hyperlink-source --haddock-quickjump and then cabal upload --publish --documentation <docs-tarball-path> to publish documentation.The Hackage URLs follow the pattern: https://hackage.haskell.org/package/<pkg>-<version>
After all packages are published, present a summary:
| Package | Version | Hackage URL |
|---|---|---|
| pgmq-core | X.Y.Z.W | https://hackage.haskell.org/package/pgmq-core-X.Y.Z.W |
| pgmq-hasql | X.Y.Z.W | https://hackage.haskell.org/package/pgmq-hasql-X.Y.Z.W |
| pgmq-migration | X.Y.Z.W | https://hackage.haskell.org/package/pgmq-migration-X.Y.Z.W |
| pgmq-effectful | X.Y.Z.W | https://hackage.haskell.org/package/pgmq-effectful-X.Y.Z.W |
| pgmq-config | X.Y.Z.W | https://hackage.haskell.org/package/pgmq-config-X.Y.Z.W |
cabal check, tests, or nix build.nix build), stop and report the error rather than continuing.nix fmt before committing to ensure proper formatting.