changelog-lint

command module
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 4, 2022 License: MIT Imports: 9 Imported by: 0

README

changelog-lint

A simple linter for changelog files.

Installation

go install github.com/chavacava/changelog-lint@master

Usage

changelog-lint

will lint the CHANGELOG.md file in the current directory

changelog-lint some/path/changes.md

will lint the changes.md file in the some/path directory

To get the full list of command line flags:

$ changelog-lint -h
Usage of changelog-lint:
  -config string
        set linter configuration
  -release string
        enables release-related checks (the given string must be the release version, e.g. 1.2.3)
  -version
        get changelog-lint version
Configuration

If defaults do not fit your needs you can configure the linter by providing a configuration file with the command line flag -config

Via the configuration file you can:

  • Disable rules (all enabled by default)
  • Provide arguments to rules
  • Overwrite default parser patterns

The format of the configuration file is TOML. Example, the configuration to lint the CHANGELOG.md of nodejs/changelog-maker could be:

[parser.patterns]
    title=".*"
    version='^## \[(\d+\.\d+\.\d+)\]\(https:\/\/github\.com\/nodejs\/changelog-maker\/compare\/v\d+\.\d+\.\d+\.\.\.v\d+\.\d+\.\d+\) \(\d{4}-\d{2}-\d{2}\)$'
    subsection= '^### (?:⚠ )?([A-Z]+.*)$'

[rule.subsection-order]
    Disabled=true
[rule.subsection-naming]
    Arguments=["BREAKING CHANGES", "Features", "Bug Fixes", "Trivial Changes"]

Please notice some patterns require to have a capturing group (see Details below)

Error codes

Executing the linter returns one of the following error codes

Code Meaning
0 no error
1 bad execution parameters/flags (e.g. bad changelog filename)
2 syntax error in the changelog file
3 the linter found a problem in the changelog

Details

The linter will apply a set of predefined rules (se below).

The expected global format of the file is Markdown where:

  • # is used for the main title,
  • ## is used as header for versions,
  • ### is used as header for subsections of versions,
  • * or - is used as item markers for change details entries

By default the following patterns are expected

Section Pattern Capturing Group
title ^# .+$ N/A
version ^## (\d+\.\d+.\d+|\[Unreleased\])( .*)*$ version name
subsection ^### ([A-Z]+[a-z]+)[ ]*$ subsection name
entry ^[*-] .+$ N/A

These patterns can be configured (see Configuration)

Check this CHANGELOG.md as example of the expected format.

Rules

Name Description Arguments
subsection-empty warns on subsections without any entry
subsection-namming warns on unknown subsection names (Added, Changed, Deprecated, Fixed, Removed, Security are known) list of accepted section names (replaces the default list)
subsection-order warns on subsections not listed alphabetically in a version
subsection-repetition warns on subsections appearing more than once under the same version
version-empty warns on versions without any subsection
version-order warns on versions not well ordered wrt their semver number
version-retpetition warns on versions appearing more than once

You can contribute new rules by implementing the linting.Rule interface:

type Rule interface {
	Apply(model.Changelog, chan Failure, RuleArgs)
	Name() string
}

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
Configuration for changelog-lint
Configuration for changelog-lint
Linting package aggregates the linting machinery
Linting package aggregates the linting machinery
rule
Package rule holds all available linting rules
Package rule holds all available linting rules

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL