Stay on top of semver using your changelog.

Overview

semverlog - semantic versioning meets changelogs

The semantic versioning specification (https://semver.org) gives us a tool sanely evolve software. However, as a library grows and perhaps gets split into multiple smaller ones, it can be difficult to keep track of the semver impact of a series of changes.

semverlog aims to solve this problem by allowing you to describe each change and its semver impact in a separate file under the .changes directory.

Design philosophy

  • Zero configuration: semverlog implements a very opinionated workflow. This allows it to operate without a configuration file, avoiding clutter in your repository.
  • Scalable: With semverlog, each change (typically introduced in a single PR), is described in a separate file. This avoids merge conflicts in otherwise often touched files like CHANGELOG.md or manifest files.
  • Correct: One of the biggest challenges in maintaining a large library is correctly tracking semver. With semverlog, you can record the semver impact of your change together with the code. This makes releases stress-free.
  • Flexible: Despite being free of configuration files, semverlog aims to flexible where possible. For example, we don't integrate with package managers, instead semverlog requires you to pass in the current version of the package as an argument.
  • Contributor-friendly: You can use semverlog as a maintainer without forcing your contributors into it. The change file format is simple and the name doesn't matter, meaning contributors can create entries without installing the tool.

Usage

  1. Within your repository, create a directory named .changes.
  2. Add a markdown file (name irrelevant) for each change (i.e. pull request).

Upon release time, call semverlog compute-bump-level <CURRENT_VERSION> to compute the next version bump.

To generate a changelog entry, call semverlog compile-changelog <NEW_VERSION>. This will compile all entries within .changes together, sorted by priority and creation time.

Change file format

A change file is a markdown file with a yaml front-matter:

---
kind: added|fixed|changed|removed|deprecated|security
breaking: true|false
priority: 0-10
---
<CHANGE_TEXT>

breaking and priority are optional.

By default, the changed and removed kind are considered a breaking change, unless overridden with breaking: false.

<CHANGE_TEXT> will be output verbatim upon semverlog compile-changelog. It is recommended to stick to paragraphs and not add any extra headings to avoid formatting problems. If you want to add headings, take into account that all changes are within sections of level-3 (###) headings, i.e. ### Added etc so you want to start your headings at level 4 within the changelog entry.

Recommended workflow

  • Squash-merge your PRs: This will ensure the change file is committed together with the actual change.
  • Delete change files within .changes after each release. semverlog will always consider the entire .changes directory.

Related tools

You might also like...
Save image from your clipboard 📋 as an image file directly from your command line! 🔥

Clpy 📋 Save copied image from clipboard as an image file directly from your command line! Note It works only on windows as of now. I'll be adding sup

FastSSH is a TUI that allows you to quickly connect to your services by navigating through your SSH config.
FastSSH is a TUI that allows you to quickly connect to your services by navigating through your SSH config.

Connect quickly to your services 🚀 FastSSH is a TUI that allows you to quickly connect to your services by navigating through your SSH config. Instal

Deadliner helps you keep track of the time left for your deadline by dynamically updating the wallpaper of your desktop with the time left.
Deadliner helps you keep track of the time left for your deadline by dynamically updating the wallpaper of your desktop with the time left.

Deadliner Watch the YouTube video What's Deadliner? Deadliner is a cross-platform desktop application for setting deadline for a project and keeping t

By mirroring traffic to and from your machine, mirrord surrounds your local service with a mirror image of its cloud environment.
By mirroring traffic to and from your machine, mirrord surrounds your local service with a mirror image of its cloud environment.

mirrord lets you easily mirror traffic from your Kubernetes cluster to your development environment. It comes as both Visual Studio Code extension and

A Yocto setup and management tool that helps you keep your environment up-to-date and in-sync with your team
A Yocto setup and management tool that helps you keep your environment up-to-date and in-sync with your team

yb (Yocto Buddy) yb is designed to make it easy to setup and (perhaps more importantly) keep Yocto environments up-to-date and in-sync with your team.

Print your git contributions in your terminal, blazingly fast
Print your git contributions in your terminal, blazingly fast

Takoyaki Blazingly fast git contribution graph in your terminal Features ✔️ Customizable ✔️ Plugins to support a bunch of cloud based git repositories

Convert your favorite images and wallpapers with your favorite color palettes/themes
Convert your favorite images and wallpapers with your favorite color palettes/themes

dipc doprz' image palette converter Convert your favorite images and wallpapers with your favorite color palettes/themes Color Palettes/Themes catppuc

Get your loadshedding schedule in your calendar and never be left in the dark! Open-source, up-to-date, and developer friendly.
Get your loadshedding schedule in your calendar and never be left in the dark! Open-source, up-to-date, and developer friendly.

Loadshedding schedules in your digital calendar. No apps, no ads, up-to-date, and developer friendly. Get it • Key Features • Using the data • Project

Reddit - Liberate your Reddit Chats. This tool will export your reddit chats into a plethora of formats

Rexit Rexit - Liberate your Reddit Chats. This tool will export your Reddit chats into a plethora of formats Tool to export Reddit chats into a variet

Owner
Thomas Eizinger
Decent developer striving for ever greater habits. Loves @rust-lang. Co-Creater of @nobt-io.
Thomas Eizinger
Logging for text that should stay in the same place in a console.

console_static_text Crate for logging text that should stay in the same place in a console. This measures words to handle wrapping and has some consol

David Sherret 8 Dec 25, 2022
Explain semver requirements by converting them into less than, greater than, and/or equal to form.

semver-explain Convert SemVer requirements to their most-obvious equivalents. semver-explain is a CLI tool to explain Semantic Versioning requirements

Andrew Lilley Brinker 27 Oct 29, 2022
git-cliff can generate changelog files from the Git history by utilizing conventional commits as well as regex-powered custom parsers.⛰️

git-cliff can generate changelog files from the Git history by utilizing conventional commits as well as regex-powered custom parsers. The changelog template can be customized with a configuration file to match the desired format.

Orhun Parmaksız 5k Jan 9, 2023
Zenith - sort of like top or htop but with zoom-able charts, CPU, GPU, network, and disk usage

Zenith - sort of like top or htop but with zoom-able charts, CPU, GPU, network, and disk usage

Benjamin Vaisvil 1.6k Jan 4, 2023
A small utility that moves the start menu to the top-center of the screen in Windows 11.

TopCenterStart11 A small utility that moves the start menu to the top-center of the screen in Windows 11. As of right now, this application can only p

Ryan de Jonge 12 Nov 12, 2022
A language parser tool to build recursive descent top down parser.

lang-pt A language parser tool to generate recursive descent top down parser. Overview Parsers written for the languages like Javascript are often cus

Creative Forest 7 Jan 4, 2023
🚀 JavaScript driver for ScyllaDB, harnessing Rust's power through napi-rs for top performance. Pre-release stage. 🧪🔧

?? JavaScript driver for ScyllaDB. Pre-release stage. ???? ⚠️ Disclaimer ⚠️ This repository and the associated npm package are currently in a ?? pre-r

Daniel Boll 16 Oct 21, 2023
A top-down arena shooter roguelite in which you're a mythical marshmallow god fighting against peasant munchies such as chocolates, jellies, or candies!

Mythmellow A top-down arena shooter roguelite in which you're a mythical marshmallow god fighting against peasant munchies such as chocolates, jellies

Umut 3 Oct 16, 2023
A top-down arena shooter roguelite in which you're a mythical marshmallow god fighting against peasant munchies such as chocolates, jellies, or candies!

Mythmallow A top-down arena shooter roguelite in which you're a mythical marshmallow god fighting against peasant munchies such as chocolates, jellies

Umut 3 Oct 29, 2023
🐢 Atuin replaces your existing shell history with a SQLite database, and records additional context for your commands

Atuin replaces your existing shell history with a SQLite database, and records additional context for your commands. Additionally, it provides optional and fully encrypted synchronisation of your history between machines, via an Atuin server.

Ellie Huxtable 4.6k Jan 1, 2023