Version release for elixir
Project version and changelog managment for elixir. Insparation for functionality is taken from cargo-release package for Rust
Performs release best-practices, including:
- Ensure the git working directory is clean.
- Bump the version in mix.exs
- Create a git tag for this version
- Run mix release (disabled by default)
- Bump version for next development cycle
- Push everything to github
Install
Current release: 0.0.1-beta.14
Add to mix.exs
def deps do
[
...other
{:version_release, "0.0.1-beta.14", only: :dev, runtime: false}
...other
]
end
Usage
mix version.[level] [--dry-run | -dr] [--no-git-push | -np]
level | description |
---|---|
major | Creates major realease version. I.e. from 1.2.3 to 2.2.3 |
minor | Creates minor realease version. I.e. from 1.2.3 to 1.3.3 |
patch | Creates patch realease version. I.e. from 1.2.3 to 1.2.4 |
rc | Creates realease candidate version. I.e. from 1.2.3 to 1.2.4-rc.0 |
beta | Creates beta realease version. I.e. from 1.2.3 to 1.2.4-beta.0 |
alpha | Creates alpha realease version. I.e. from 1.2.3 to 1.2.4-alpha.0 |
Settings
Name | Type | Description |
---|
tag_prefix | String | Tag prefix usually just v (short for version). Will be created from version. I.e. if version is 1.2.3 and tag prefix is "ver" resulting tag will be ver1.2.3 | |
hex_publish | Boolean | Disabled by default. Enable publishing to hex.pm Should authorize beforehand. Check Publishing a package article. | |
git_push | Boolean | Enabled by default. Enable git push at the endof all operations | |
changelog | Config | Configuration for changelog. Check Changelog section | |
merge | Config | Configuration for mergeing. Check Merging section |
Prerequisite
- Your project should be managed by git.
Changelog
Settings
Name | Type | Description |
---|---|---|
creation | Atom | Mode of creation. |
replacements | Config[] | List of replacement settings |
Creation settings
Option | Description |
---|---|
disabled | Changelog will not be created |
manual | Changelog will updated accordingly to replacements settings. Replacement values are {{version}} , {{date}} , {{tag_name}} . Everything that actually has changed should be written directly to changelog file | |
git_logs | !Not implemented! Same as manual, but additionally if git commit massage starts with add! , change! , fix! , message will be added to changelog. |
Replacements settings
Name | Type | Description |
---|---|---|
file | String | File name in which to do replacements. |
patterns | Config[] | List of pattern settings |
Patterns settings
Name | Type | Description |
---|---|---|
search | String/RegEx | Pattern to serch in specified file |
replace | String | String which will replace what is found. ({{version}} , {{date}} , {{tag_name}} Will be replaced accordingly) |
global | Boolean | File name in which to do replacements. |
Examples
Check this repo config or elixir-version-release-tests repo config to have some examples how to configure chanelog updates.
Merging (Not implemented)
Sometimes it is useful to keep 2 or more branches up to date with the branch that you are doing version bump from
License
Licensed under MIT license
PS
If you found this library useful, dont forget to star it (on github) =)