Packages
versionise
1.0.0
Interactive versioning and release automation for Elixir packages. Guides you through version bumps, changelog management, git operations, and publishing with interactive prompts.
Current section
Files
Jump to
Current section
Files
versionise
README.md
README.md
# Versionise
**Interactive versioning and release automation for Elixir packages.**
Versionise is a Mix task that guides you through the entire release process with interactive prompts, automating version bumps, changelog management, git operations, and moreβwithout imposing workflow constraints.
## Features
- π’ **Semantic Version Bumping** - Automatically bump major, minor, or patch versions
- π **Interactive Changelog** - Guided prompts for changelog entries (Added, Changed, Fixed)
- π§ͺ **Test Integration** - Optionally run your test suite before releasing
- π **Git Automation** - Stage, commit, tag, and push with standard conventions
- π¦ **Hex.pm Ready** - Updates `mix.exs` and prepares for publishing
- π― **Simple & Focused** - Does one thing well without unnecessary complexity
## Installation
Add `versionise` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:versionise, "~> 0.1.0", only: :dev, runtime: false}
]
end
```
Then run:
```bash
mix deps.get
```
## Usage
Bump your project version with a single command:
```bash
# Bump patch version (1.0.0 -> 1.0.1)
mix version patch
# Bump minor version (1.0.0 -> 1.1.0)
mix version minor
# Bump major version (1.0.0 -> 2.0.0)
mix version major
```
### Interactive Workflow
Versionise will guide you through each step:
1. **Version Confirmation**
```
Current version: 0.1.0
New version: 0.1.1
Continue with version 0.1.1? [Yn]
```
2. **File Updates**
```
=== Updating Files ===
β Updated mix.exs
```
3. **Changelog Entries**
```
=== Changelog Entries ===
Enter changelog entries (press Enter with empty line to skip)
Added (New features or functionality)
- New authentication system
- User profile page
- [Enter]
Changed (Changes to existing functionality)
- [Enter]
Fixed (Bug fixes)
- Fixed login redirect bug
- [Enter]
```
4. **Test Suite** (optional)
```
=== Running Tests ===
Run test suite (mix precommit)? [Yn]
```
5. **Git Operations** (optional)
```
=== Git Operations ===
Commit changes and create git tag? [Yn]
Push to origin? [Yn]
```
6. **Hex Publishing**
```
=== Hex Publishing ===
To publish to Hex.pm, run:
mix hex.publish
β Release process complete!
```
## What Gets Updated
When you run `mix version`, the following files are automatically updated:
- **`mix.exs`** - The `version` field in your project definition
- **`mix.exs`** - The `source_ref` field (if present) for documentation
- **`CHANGELOG.md`** - New version entry with your changes (Keep a Changelog format)
## Why Versionise?
### vs Manual Process
**Manual releases are error-prone:**
- β Forget to update version numbers
- β Inconsistent changelog formatting
- β Miss creating git tags
- β Typos in version numbers
- β Time-consuming and repetitive
**Versionise automates it all:**
- β
Zero manual file edits
- β
Consistent formatting
- β
Never miss a step
- β
Validated inputs
- β
Fast and reliable
### vs git_ops
[git_ops](https://github.com/timberio/git_ops) is a great tool, but it requires adopting conventional commits.
**git_ops:**
- Requires conventional commit format
- Automatically generates changelogs from commits
- Less control over changelog content
- Steeper learning curve for teams
**Versionise:**
- Works with any commit style
- You write the changelog entries
- Full control over release notes
- Simple and intuitive
### vs versioce
[versioce](https://github.com/mpanarin/versioce) offers basic versioning but lacks interactivity.
**versioce:**
- Non-interactive configuration
- Limited changelog support
- Basic automation
**Versionise:**
- Interactive and guided
- Rich changelog management (Keep a Changelog format)
- Comprehensive workflow (tests, git, publishing)
- Optional steps based on your needs
## Configuration
Versionise works out of the box with sensible defaults. For most projects, no configuration is needed.
However, you can customize the behavior by adding configuration to your `config/config.exs`:
```elixir
# config/config.exs
config :versionise,
# Command to run for tests (default: "mix test")
test_command: "mix precommit"
```
### Available Configuration Options
- **`:test_command`** - The command to run when testing before release
- Default: `"mix test"`
- Examples: `"mix precommit"`, `"mix test --cover"`, `"mix ci"`
## Requirements
- Elixir 1.12+
- Git (for git operations)
## Philosophy
Versionise follows these principles:
1. **Interactive by Default** - Guide developers through the process with clear prompts
2. **No Workflow Changes** - Works with your existing commit style and process
3. **Simple & Focused** - Does version management well without feature bloat
4. **Graceful Degradation** - Works even without git or in minimal environments
5. **Developer Control** - You confirm each step; no surprises
## FAQ
**Q: Does Versionise publish to Hex.pm automatically?**
A: No. Hex publishing requires interactive prompts (like organization selection), so we leave that as a manual step. Versionise will remind you to run `mix hex.publish` at the end.
**Q: Can I use this in CI/CD?**
A: Versionise is designed for interactive use. For automated releases, consider tools like `git_ops` or GitHub Actions with semantic-release.
**Q: Does it work without git?**
A: Yes! Versionise will update versions and changelogs even without git. The git operations are optional.
**Q: What changelog format does it use?**
A: [Keep a Changelog](https://keepachangelog.com/) - the widely-adopted standard for changelogs.
**Q: Can I customize the test command?**
A: Yes! Configure it in your `config/config.exs`:
```elixir
config :versionise,
test_command: "mix precommit"
```
The default is `mix test` if not configured.
## Changelog Format
Versionise follows the [Keep a Changelog](https://keepachangelog.com/) format:
```markdown
# Changelog
## [1.0.1] - 2024-01-15
### Added
- New feature description
- Another new feature
### Fixed
- Bug fix description
```
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
This project is licensed under the MIT License - see the LICENSE file for details.
## Credits
Created by Dylan Blakemore
Inspired by the needs of Elixir package maintainers who want a simple, interactive release process.