changes - Curate changelog and release documents with ease, from the command-line using your $EDITOR
.
Changes is a powerful and efficient command-line application for managing software release documents. Designed to seamlessly produce changelog and release documents composed of a curated chronologically ordered list of noteworthy changes.
- One prerequisite, Bash
- Does not rely on version control history
- Manage changelog and release documents alongside your source code
- Iteratively create and curate changes, tracked as simple files and directories
- Generate CHANGELOG and RELEASE documents in markdown and plain text
- Search and recall recorded changes by content or file name
- Create category-specific change templates
You're building a todo-list application and you want to use "changes" to manage your changelog and release notes.
- Change the directory:
cd todo
- Initialize release tracking:
changes init
- Track the initial release:
changes update "initial release"
- Release version 0.1.0:
changes release 0.1.0
- Describe the current release:
changes show
- Clone the repository:
git clone /path/to/changes.git
- Make the script executable:
chmod +x changes/changes
- Add the directory to the
PATH
environment variable:PATH="$PATH:$PWD/changes"
The following are common usage examples:
Change the changes base, i.e. the base path.
changes base PATH
Example:
changes base /path/to/changes
Print the environment variables.
changes conf
Example:
changes conf
Record defect. Optionally providing a slug, or filename, and release name.
changes defect [SLUG] [NAME]
Examples:
changes defect
changes defect user-management
changes defect user-management 0.0.1
Record detraction. Optionally providing a slug, or filename, and release name.
changes detract [SLUG] [NAME]
Examples:
changes detract
changes detract user-management
changes detract user-management 0.0.1
Record feature. Optionally providing a slug, or filename, and release name.
changes feature [SLUG] [NAME]
Examples:
changes feature
changes feature user-management
changes feature user-management 0.0.1
Find files matching the terms provided and print the filename(s).
changes files TERM [TERM, ...]
Examples:
changes files next
changes files next feature
Find changes matching the terms provided and print the filename(s).
changes find TERM [TERM, ...]
Examples:
changes find user management
changes find user management add
changes find user management remove
Create a change form, i.e. template, using the NAME provided.
changes form NAME
Examples:
changes form defect
changes form detract
changes form feature
changes form notice
changes form remove
changes form secure
changes form update
Generate the version and release documents for the current release.
changes generate
Example:
changes generate
Find changes matching the terms provided and print matches using grep.
changes grep TERM [TERM, ...]
Examples:
changes grep user management
changes grep user management add
changes grep user management remove
Create a runtime hook using the NAME provided.
changes hook NAME
Example:
changes hook vars
Initialize the changes repository.
changes init
Example:
changes init
Merge a release into another, on undo a release by merging into "next".
changes merge [FROM] [INTO]
Examples:
changes merge
changes merge 0.0.1
changes merge 0.0.1 0.0.2
changes merge 0.0.2 next
Record notice. Optionally providing a slug, or filename, and release name.
changes notice [SLUG] [NAME]
Examples:
changes notice
changes notice user-management
changes notice user-management 0.0.1
Find changes matching the terms provided and open the file(s) in the EDITOR.
changes open TERM [TERM, ...]
Examples:
changes open user management
changes open user management add
changes open user management remove
Change the changes path for changes.
changes path PATH
Example:
changes path /path/to/changes/.changes
Create release and generate changelog and release text and makrdown documents.
changes release NAME
Examples:
changes release 0.0.1-alpha
changes release 0.0.1-beta
changes release 0.0.1
Record removal. Optionally providing a slug, or filename, and release name.
changes remove [SLUG] [NAME]
Examples:
changes remove
changes remove user-management
changes remove user-management 0.0.1
Print pending changes, released changes, or the changes from the current release.
changes report [TYPE] [FORMAT]
Examples:
changes report
changes report changes
changes report changes markdown
changes report changes plaintext
changes report release
changes report release markdown
changes report release plaintext
changes report next
Revert the current release and move the changes into the release queue.
changes revert
Example:
changes revert
Change the changes root path name, i.e. under the base.
changes root NAME
Example:
changes root .changes
Find changes matching the terms provided and print the results and filename(s).
changes search TERM [TERM, ...]
Examples:
changes search user management
changes search user management add
changes search user management remove
Record vulnerability. Optionally providing a slug, or filename, and release name.
changes secure [SLUG] [NAME]
Examples:
changes secure
changes secure user-management
changes secure user-management 0.0.1
Show changes for a specific release or the current release. Optionally providing a release name.
changes show [NAME]
Examples:
changes show
changes show 0.0.1
Change the file type, i.e. the file suffix.
changes type NAME
Examples:
changes type md
changes type txt
Record update. Optionally providing a slug, or filename, and release name.
changes update [SLUG] [NAME]
Examples:
changes update
changes update user-management
changes update user-management 0.0.1
Print the latest release name.
changes version
Example:
changes version
Print the list of release names in chronological order.
changes versions
Example:
changes versions
This application supports searching through changes using inclusion and
exclusion terms. Use of inclusion and exclusion terms are supported by find
,
open
, search
, and view
commands.
By default, any term provided, not prefixed, will be treated as an inclusion term.
Example:
changes search release
Any term provided that is prefixed with a +
symbol, will be treated as an
inclusion term. Notes containing the term will be included in the results.
Example:
changes search +release
Any term provided that is prefixed with a -
symbol, will be treated as an
exclusion term. Notes containing the term will be excluded from the results.
Example:
changes search -release
The following are overridable environment variables:
The CHANGES_BASE
variable is the filepath for the parent directory of the
changes folder where all changes will be stored, and defaults to $PWD
.
Example:
export CHANGES_BASE=$HOME
The CHANGES_FILE_CHANGES_MARKDOWN
variable is the filename for the changelog
being generated in markdown format.
Example:
export CHANGES_FILE_CHANGES_MARKDOWN="CHANGES.md"
The CHANGES_FILE_CHANGES_PLAINTEXT
variable is the filename for the changelog
being generated in plaintext format.
Example:
export CHANGES_FILE_CHANGES_PLAINTEXT="CHANGES.txt"
The CHANGES_FILE_RELEASE_MARKDOWN
variable is the filename for the release
notes being generated in markdown format.
Example:
export CHANGES_FILE_RELEASE_MARKDOWN="RELEASE.md"
The CHANGES_FILE_RELEASE_PLAINTEXT
variable is the filename for the release
notes being generated in plaintext format.
Example:
export CHANGES_FILE_RELEASE_PLAINTEXT="RELEASE.txt"
The CHANGES_INIT
variable is the fully-qualified filepath for the initial (or
bootstrapping) changes directory, and defaults to $PWD/.changes
. This
directory is checked for pre-processing hooks before executing the program.
Example:
export CHANGES_INIT=$PWD/.changes
The CHANGES_PATH
variable is the fully-qualified filepath for the changes
directory, and defaults to $CHANGES_BASE/$CHANGES_ROOT
.
Example:
export CHANGES_PATH=$HOME/changes
The CHANGES_ROOT
variable is the name of the changes directory, and defaults
to .changes
.
Example:
export CHANGES_ROOT=changes
The CHANGES_TYPE
variable is the file suffix used when operating on changes, and
defaults to txt
.
Example:
export CHANGES_TYPE=md
Git hooks are scripts that run automatically at specific stages of Git
operations, like committing or pushing. As an example, see the git
pre-commit
hook that requires that all changes are recorded for
each commit to a branch that isn't "main" or "master". The idea is that if
you're working on the branch implement-user-management
then you should have a
change (and corresponding change file) named "implement-user-management". The
git hooks can be install by using the following commands:
git config core.hooksPath .githooks
Contributions are welcome! Please fork the repository and submit a pull request.
This project is licensed under the MIT License. See the LICENSE
file for details.
Curate changelog and release documents with ease using changes
.