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.