View Source Installation

1. Add :expublish to the dev dependencies in mix.exs:

{:expublish, "~> 2.5", only: [:dev], runtime: false}

2. Create a CHANGELOG.md in the root folder of the project. It must contain a placeholder:

<!-- %% CHANGELOG_ENTRIES %% -->

3. Put the following line in .gitignore:

RELEASE.md

Alternatively, the RELEASE.md can be kept inside version control and used when publishing from CI. The file is deleted after every successful release.

package-version

Package version

While writing the final package version, Expublish expects it to be located where mix new [package] initially placed it. If it wasn't changed, skip the next couple paragraphs and read about Publishing to hex.

As it is common to keep the package version in a module attribute in mix.exs, Expublish supports following syntax as well.

@version "1.0.0"
# ...
version: @version

If the package version is maintained in a separate file, Expublish can be made aware of that with the appropriate option:

$ mix expublish.patch --version-file=VERSION.txt

where VERSION.txt is a file containing nothing but the current project version

1.0.0

and mix.exs reading said file in project/0:

version: "VERSION.txt" |> File.read!() |> String.trim()

publishing-to-hex

Publishing to hex

Before publishing a package for the first time, do read the hex documentation on publishing and add the required metadata in mix.exs.

Regardless of publishing to hex.pm or a self-hosted hex repository, the shell environment where mix expublish is being executed must authenticate for the publishing step to succeed.

Hex.pm usually requires a valid HEX_API_TOKEN to be defined in the current environment, while self-hosted repositories can use a range of various authentication methods.

Check out the hex documenation on self-hosting to learn how to maintain a private package registry.

prerequisites

Prerequisites

Expublish expects git and mix to be available at runtime but comes without any additional dependencies.