# Changelog

## [0.2.3]

### Added

- **`mix publish current`** — uploads the version already in `mix.exs`, without
  bumping, committing or tagging. It requires the tag to exist locally, to be on
  the remote, to point at the same commit in both, and `HEAD` to still be on it;
  the tarball is built from the working tree, so a `HEAD` past the tag would
  upload code the tag does not point at.
- **`--yes`** skips the confirmation prompt.

### Changed

- **Confirmation is asked once the checks have passed and before anything is
  written.** Declining leaves the repository untouched.

### Fixed

- A release completes its upload rather than stopping after the push.

## [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`.**
