npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

automatic-changelog

v1.0.5

Published

Automatically generate a CHANGELOG based off your commit messages.

Downloads

14

Readme

Change Log NOW!!! (automatic-changelog)

Change Log NOW!!! (CLN) is a simple CLI tool which will generate you a CHANGELOG file using pre-defined trigger words to extract specific commits based off defined conventions.

You can see a generated example here!

This will convert a commit history which looks like...

Feature - You can now configure your triggers yourself!
House-keeping - Tidied up all the files and removed anything not needed
WIP
Bug - Fixed an issue where merged branches would show double commits
Bug - Fixed issue that prevented todays changelog from regenerating
WIP
WIP

Into this!

# Our magnificent change log!

## 28/03/2020

## Features

- You can now configure your triggers yourself! (570e69e9e)

## Bugs

- Fixed an issue where merged branches would show double commits (f437631b)
- Fixed issue that prevented todays changelog from regenerating (388f1cc)

Installation

CLN can be installed globally, or within your project so you can set up a commit-hook, GitHub action etc etc...

# Globally

npm install -g automatic-changelog
yarn add -g automatic-changelog

# Locally

npm install automatic-changelog -D
yarn add automatic-changelog -D

Usage

CLN comes with a default config which can be found at node_modules/automatic-changelog/src/defaultConfig.js however you should publish the config and configure it to your desired convention.

You can publish it by changing into your GIT repo directory and running:

cln --init

It will generate a changelog.config.js in the root of your repo with something like the following in, you should commit this to your repo and share amongst your team.

module.exports = {

  fileName: "CHANGELOG.md",

  dateFormat: "dd/LL/yyyy",

  separator: "-",

  triggers: [
    "🐛 Bug",
    "🚀 Feature",
    "💥 Change",
  ],

  pluraliseTrigger: true,
  
  skipEmptyCommitMessages: false,
 
  customMessageFormatter: null,
  
  customHeadingFormatter: null,

};

You're now free to modify the config as you desire!

Once configured you can generate your changelog by running

Globally with

cln

Locally with

./node_modules/.bin/cln

Within an NPM script

"scripts" : {
    "changelog": "cln"
}
npm run changelog
yarn changelog

Amending the log manually

You might notice that some of your commit messages are less than ideal and that once you've generated them you want to tidy them up a bit.

CLN uses line-numbers to decide where to update the changelog, and it will only affect now/future entries.

This means that you are free to modify any of the data generated within the changelog to fix typos, elaborate etc.

When we update the change log we do not touch anything from previous entries

NOTICE - If you're adjusting text content from "today's" commits, then each time you run cln it will overwrite today's to add in any new changes. If you're commiting this changelog as you go, you can simply discard any undesired changes if you've needed to amend it.

Additionally, if you do NOT want to preserve old messages or want to generate from scratch, you can do so by passing the --refresh flag e.g.

cln --refresh

This will generate the changelog history from the beginning of time.

Configuration

File name and contents

CLN works on a "convention" pattern, meaning it will only parse data that matches its conventions. This means you're able to add extra data into your changelog.

e.g. You can add a whole header section into your file as long as you don't use a double ## as this will denote a date range.

CLN will ignore everything above the first date entry e.g. You can create something like this:

  /$$$$$$  /$$   /$$  /$$$$$$  /$$   /$$  /$$$$$$  /$$$$$$$$ /$$        /$$$$$$   /$$$$$$ 
 /$$__  $$| $$  | $$ /$$__  $$| $$$ | $$ /$$__  $$| $$_____/| $$       /$$__  $$ /$$__  $$
| $$  \__/| $$  | $$| $$  \ $$| $$$$| $$| $$  \__/| $$      | $$      | $$  \ $$| $$  \__/
| $$      | $$$$$$$$| $$$$$$$$| $$ $$ $$| $$ /$$$$| $$$$$   | $$      | $$  | $$| $$ /$$$$
| $$      | $$__  $$| $$__  $$| $$  $$$$| $$|_  $$| $$__/   | $$      | $$  | $$| $$|_  $$
| $$    $$| $$  | $$| $$  | $$| $$\  $$$| $$  \ $$| $$      | $$      | $$  | $$| $$  \ $$
|  $$$$$$/| $$  | $$| $$  | $$| $$ \  $$|  $$$$$$/| $$$$$$$$| $$$$$$$$|  $$$$$$/|  $$$$$$/
 \______/ |__/  |__/|__/  |__/|__/  \__/ \______/ |________/|________/ \______/  \______/

## 28/03/2020

## Features

- You can now configure your triggers yoursself! (570e69e9e)

Date formatting

By default, CLN ships with the British date format, because it looks good :D (and I'm British) but this can be configured using the dateFormat key within the changelog.config.js.

We use Luxon to handle dates, so you're able to use the "Standalone Tokens" to create your own date formatting which can all be found: https://moment.github.io/luxon/docs/manual/formatting.html#standalone-vs-format-tokens

Commit message separator

Often your trigger and commit message will have a separator/deliminator for readability e.g.

Bug :: Fixed the...

Here the separator should be defined as :: This will allow us to tidy up your commit messages more nicely!

If you don't need one, then you can simply provide an empty string e.g.

🐞 Fixed the...
separator: ""

Don't worry about any whitespace, we'll trim that for you!

Triggers

Triggers are handled within commitMsg.indexOf('TRIGGER') === 0 - So it MUST be the first in the commit message.

By default, we assume your trigger is the same as your changelog heading pluralised and is defined as a flat array e.g.

triggers: [
    "🚀 Feature",
    "🐛 Bug",
    "💥 Change",
],

This would generate the following:

## 28/03/2020

🚀 Features

- XXX
- XXX

🐛 Bugs

- XXX
- XXX

However, if you want to map a different trigger word to your heading you can use the object syntax e.g.

triggers: {
    "🚀 Feature": "feature-trigger-word",
    "🐛 Bug": "bug-trigger-word",
    "💥 Change": "change-trigger-word",
},

The key of the entry is the heading, and the value of the entry is the trigger word.

The order you define the triggers within your config, will be the order they appear as headings in your changelog.

Pluralisation

By default, we pluralise your trigger word before using it as a heading e.g. Bug becomes Bugs - you can turn this off by setting pluraliseTrigger to false.

Skipping empty commit messages

You can enable/disable this feature by setting skipEmptyCommitMessages to true or false

Custom Formatters

By default, we ship with some message and heading formatters, however you can supply your own from the config.

Custom Message

customMessageFormatter: ({ commit, group, allCommits, resolvedConfig, clnMessage }) => {
    return clnMessage.toLowerCase();
}

Custom Heading

customHeadingFormatter: ({ group, commit, resolvedConfig, clnHeading }) => {
    return clnHeading.toLowerCase();
}

To Do

  • Control trigger location.