[0.2.0]

Added

  • A README install-snippet check, run as a gate before anything is written. A README naming ~> 0.1.1 when you publish 0.2.0 sends everyone following it to the old release, and nothing else catches that: the code compiles, the tests pass, the docs build.
  • Two modes, configured with plumb: [readme: ...] in project/0 and off by default. :satisfies requires the new version to satisfy the stated requirement and imposes no style; :exact requires the README to name ~> MAJOR.MINOR of the new version, which is what a 0.x project wants, since a minor bump there is a breaking change. :readme_path defaults to README.md.
  • readme joins format, test and docs as a value --skip accepts.
  • --allow-untracked, which lets untracked files through the clean-tree check. Tracked changes still block it, and untracked files are still not committed — only mix.exs is. The failure message names the flag.

The check reads the version being released, not the one in mix.exs, so a release that would leave the install instructions wrong fails before the bump rather than after the upload.

[0.1.0]

First release.

  • mix publish (major | minor | patch | VERSION) — verifies, bumps mix.exs, commits, tags, pushes, and runs mix hex.publish.

  • Every check runs before anything is written, so a failed run leaves the repository untouched: clean working tree, tag free locally, tag free on the remote, then mix format --check-formatted, mix test and mix docs.
  • The tag is pushed before the upload, so source_ref in the published docs resolves as soon as they are live.
  • The version is read from a @version attribute or a literal version: in the project config. A version that is not a literal string is refused rather than guessed at.
  • --dry-run, --remote NAME, --skip CHECKS.