Managing the Changelog¶
We use the unclog utility to manage our changelog entries. This ensures
consistent formatting and makes it easier to maintain changelog entries.
To install unclog, run:
cargo install unclog
Adding a New Unreleased Entry¶
There are two ways to add a new changelog entry:
- Using the CLI directly (recommended)
- Using your default text editor
Using the CLI Directly¶
Available Sections¶
Use one of these sections when adding entries:
features- For new features (NEW)changes- For changes in existing functionality (CHANGED)fixes- For bug fixes (FIXED)deprecations- For soon-to-be removed features (REMOVED)
Available Components¶
Use one of the following components for your entry:
- node: For changes to the node architecture
- sys: For changes to the system architecture
- spec: For changes to the general specification
- types: For changes to the fundamentals (basic abstractions, types, etc.)
- apps: For changes to the applications
- juvix: For changes related to the Juvix language/compiler
- tutorial: For changes to the tutorial for Spec writers
Recommended Call Syntax¶
For consistency,
- Take into account the number of the pull request
- Use the component that best describes the change
- Use the section that best describes the change
- Add an issue number if the change is related to an issue
The following flags are used:
-ifor the entry identifier (filename)-pfor the pull request number-cfor the component (e.g.node,system,juvix,apps,fundamentals)-sfor the section (e.g.features,fixes,deprecations,:)-mfor the message--editorfor the editor to use (e.g.nano,vim,code) More information about the command syntax can be found in the unclog documentation.
Examples¶
The following are examples used to populate the changelog for the v0.1.0 release.
- System and Node Architecture
unclog add -p 210 -i sys210 --editor nano -c sys \
-s breaking-changes -m "Fix engine message, environment and behavior layout"
- Node Architecture
unclog add -p 179 -i node179 --editor nano -c node \
-s breaking-changes -m "Reorganize node architecture documentation structure"
- Juvix Types and Updates
unclog add -p 128 -i types128 --editor nano -c types \
-s features -m "Add new Juvix definitions from PR-84"
- Repository Maintenance and
unclog add -p 135 -i repo135 --editor nano -c repo \
-s features -m "Show PR number in the site name"
- Tutorial and Documentation
unclog add -p 134 -i tut134 --editor nano -c tutorial \
-s features -m "Refactor tutorial for wiki-style links"
- Application Documentation
unclog add -p 198 -i apps198 --editor nano -c apps \
-s features -m "Add transparent RM implementation documentation"
- General Specification Changes
unclog add -p 192 -i spec192 --editor nano -c spec \
-s breaking-changes -m "Port identity engines to v2 template"
- Python-related Changes
unclog add -p 133 -i py133 --editor nano -c python \
-s features -m "Add support for multi-line wiki-style links"
Releasing a New Version¶
-
Update the version number in
docs/Package.juvixaccordingly to the new release:docs/Package.juvixmodule Package; ... - version := mkVersion 0 1 1 + version := mkVersion 0 1 2; ... -
Create the release:
See Versioning for more details about version numbering.
unclog release v0.X.Y --editor nanoThis will: - Let you edit the summary of the release - Move entries from
.changelog/unreleased/to a new version section -
Update the changelog file in the docs directory:
unclog build > ./docs/changelog.md -
Tag the release:
git tag -a v0.X.Y -m "Release v0.X.Y"
And push the tag to the repository. The PR corresponding to a release must contain the changelog entries for that release, and a tag.
Do not squash-merge release PRs!
Tags associated with individual commits are not preserved when squashing.