2 stable releases
1.1.25 | May 16, 2021 |
---|---|
1.0.20 | May 11, 2021 |
#17 in #file-change
30KB
639 lines
Changelog-Rust
This tool is written in rust to be light weight and portable cli for the management and generation of chagelogs for software realease. The idea is to create a way for developers to maintain an up to date changelog with minimal overhead and great integration into CI/CD (agnostic tool that can be used in any CI/CD solution). The idea is for developers to create change files for every story/issue/task/bug/feature (depending of planning tooling the name differs). This prevents uglier solutions of messy git conflict when all developers change a single changelog file. Allows for nice auto generation of changelog file based on predefined template
Installation
For Rust Users
run cmd: cargo install changelog-rust
Use installation scripts
Linux or OSX
wget -O - https://raw.githubusercontent.com/adam-bratin/changelog-rust/main/install/unix.sh | sh
or
curl -s http://example.com/script.sh | sh
Windows
powershell -Command {iwr -useb https://raw.githubusercontent.com/adam-bratin/changelog-rust/main/install/windows.ps1 | iex}
Manual Installation
Go to the downloads page for the latest release at: https://github.com/adam-bratin/changelog-rs/releases/latest
Download correct version of OS.
NOTE You may neeed to give the executable execute permissions
Usage
changelog
USAGE:
changelog-rust [OPTIONS] <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-c <config> path to config file [default: ./.changelogrc]
SUBCOMMANDS:
generate generate chagefile for PR
help Prints this message or the help of the given subcommand(s)
init initialize repo with setup for changelog cli
merge merges all the change files into an changelog from template
Init
The init command is used to setup a repo to use the cli tool
- It creates the the folder where the change files
- It creates a default template file for the changelog
- It generate a .changelogrc file with settings for the cli (for more info see Config File)
USAGE:
changelog-rust init [OPTIONS] --appName <app-name>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-n, --appName <app-name> name of app
-i <input> path where change files will be located [default: ./changes/]
-t <template> path to changelog template file to be generated [default: ./CHANGELOG.md.hbs]
Generate
The generate command is used to create a change file for json spec see Changefile schmea
If the output directory does not exist it is automatically create for you.
It is possible to create a change file non interactive by passing the -t and -d flags see below for more info.
USAGE:
changelog-rust generate [OPTIONS]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-d <description> optional description for change (for automated generation)
-t, --type <kind> optional change type (for automated generation)
-o <output> path to output change file [default: ./changes/]
Merge
The merge command is uesed to generate a changelog by parsing all the change files and applying them to the teplate file. For more info on how to customize the teplate file see Template File
USAGE:
changelog-rust merge [FLAGS] [OPTIONS]
FLAGS:
-d, --delete whether to delete change files after changelog is created
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-i <input> path to input change files [default: ./changes/]
-o <output> path to output changelog [default: ./CHANGELOG.md]
-t <template> path to changelog template file [default: ./CHANGELOG.md.hbs]
-v <version> version of current release [env: VERSION=] [default: 0.0.1]
Changefile schema
{
"date": "05/03/2021", // DD/MM/YYY
"author": "John Smith john.smith@gmail.com", // <git User.name> <git User.email>
"label": "Feature", // of type Section for more info see [Config File](#config-file)
"description": "- Added new feature for release" // automatically add bullet to beginning of description
}
Config File
schema:
{
"name": "changelog-rust", // this is the name of your application
"extra_commit_args": ["--no-verify"], // this is optional if you need to skip git hooks
"sections": [] // this is the list of change types that is used to generate sections in changelog
}
Template File
Below is the default changelog template:
# Release Notes {{name}} Version {{versionNoV}}
{{date}}
## Changes
### Features
{{#Feature}}
{{description}} - by {{author}} on {{date}}
{{/Feature}}
### Bugfixes
{{#BugFix}}
{{description}} - by {{author}} on {{date}}
{{/BugFix}}
### Other changes
{{#Other}}
{{description}} - by {{author}} on {{date}}
{{/Other}}
the data accessible to the template is: (This is based on default from init command)
{
"date": "05/03/2021", // date string in this format
"versionNoV": "1.0.0", // the version string passed in without a v at front
"version": "v1.0.0", // version string passed in with v at front
"name": "changelog-rust", // application name from .changelogrc
// There is an entry for each Section from the .changelogrc
"Feature": [
{
"date": "03/03/2021",
"author": "John Smith john.smith@gmail.com",
"label": "Feature",
"description": "- Added new feature for release"
}
],
"BugFix": [],
"Other": []
}
The entry for each sections is the json object of the change file you can access any property on the change file based on handle bars syntax as shown in example above
The output with the above template and data is:
# Release Notes changelog-rust Version 1.0.0
05/03/2021
## Changes
### Features
- Added new feature for release by John Smith john.smith@gmail.com on 03/03/2021
### Bugfixes
### Other changes
Dependencies
~13–24MB
~342K SLoC