a fast changelog generator sourced from PRs and Issues

chronicle

Validations Go Report Card GitHub release GitHub go.mod Go version License: Apache-2.0 Slack Invite

A fast changelog generator that sources changes from GitHub PRs and issues, organized by labels.

chronicle --since-tag v0.16.0
chronicle --since-tag v0.16.0 --until-tag v0.18.0

Installation

curl -sSfL https://raw.githubusercontent.com/anchore/chronicle/main/install.sh | sh -s -- -b /usr/local/bin

...or, you can specify a release version and destination directory for the installation:

curl -sSfL https://raw.githubusercontent.com/anchore/chronicle/main/install.sh | sh -s -- -b <DESTINATION_DIR> <RELEASE_VERSION>
Comments
  • Missing transfered github issues that were already closed

    Missing transfered github issues that were already closed

    https://github.com/anchore/grype/issues/467 was migrated from syft to grype and should have been in the release notes for grype v0.24.0, but it was missing and had to be manually added.

  • Fix default logger level with empty app config

    Fix default logger level with empty app config

    Today, running chronicle without a chronicle config you see:

    failed to load application config: 
            invalid application config: bad log level configured (""): not a valid logrus Level: ""
    

    This PR fixes this while also switching over to the anchore logger interface.

  • Abstract changelog logic to release package

    Abstract changelog logic to release package

    There is a lot of non-github specific changelog generation logic that resides in the github changelog worker; this PR abstracts that logic to a more central spot, the release package.

    Specific changes:

    • Add release.ChangelogInfo() to get the last release and a description that will make up the current changelog
    • Abstract the git helper methods to an interface for easy mocking in testing
    • Abstract version speculation behind a new release.VersionSpeculator interface and split the current logic between the release and github package
    • Add the gosimports linter
    • Upgrade golangci-lint to v1.45.0
    • Disable CI response to git push events
  • Add release-vs-tag context for next version selection

    Add release-vs-tag context for next version selection

    In cases where there is already a release for a speculative release version, now that version will be skipped and the next best patch version will be used.

  • CLI log level should override env var log level

    CLI log level should override env var log level

    If you have a config where log.level is set and you provide -vv chronicle would error out. The correct behavior is to honor the cli option (which should override env vars and config files)

  • Add feature to require issues to have linked PRs

    Add feature to require issues to have linked PRs

    A new CHRONICLE_GITHUB_ISSUES_REQUIRE_PRS boolean configurable to optionally only consider issues that have linked PRs that are merged as changelog entry candidates. Additionally adds configuration documentation

  • Fix edge case for

    Fix edge case for "PRs since" summarizer filter

    Follow up from https://github.com/anchore/chronicle/pull/27 ; we shouldn't consider PRs from the last release when making the changelog for this release.

  • Add next-version command

    Add next-version command

    Adds the ability to speculate what the next release version might be from the set of changes discovered. This is expressed as two new features:

    1. Adding a next-version command
    # last github release: v0.1.0 
    # state: one bug and one feature added since v0.1.0
    
    $ chronicle next-version .
    v0.2.0
    
    1. Allow the create command to speculate the next version instead of report "unreleased"
    # same release / repo state from (1)
    
    $ chronicle > /tmp/changelog-1.txt
    $ chronicle -n > /tmp/changelog-2.txt
    
    # diff /tmp/changelog-1.txt /tmp/changelog-2.txt
    3c3
    < ## [(Unreleased)](https://github.com/wagoodman/chronicle-test/tree/4e685278ed9a268806c4d7fe534d2d58d6ca0d70) (2022-03-24)
    ---
    > ## [v0.2.0](https://github.com/wagoodman/chronicle-test/tree/v0.2.0) (2022-03-24)
    5c5
    < [Full Changelog](https://github.com/wagoodman/chronicle-test/compare/v0.1.0...4e685278ed9a268806c4d7fe534d2d58d6ca0d70)
    ---
    > [Full Changelog](https://github.com/wagoodman/chronicle-test/compare/v0.1.0...v0.2.0)
    
    
  • Don't filter out PRs/issues that match the release tag date

    Don't filter out PRs/issues that match the release tag date

    There is an edge case where if an issue or PR close timestamp matches the same timestamp as the release the changelog is being generated for, then the PR/issue in question is filtered out:

    [0000] DEBUG github owner="wagoodman" repo="chronicle-test" path="../chronicle-test"
    [0000]  INFO since tag="v0.0.0" date="2022-03-23 20:24 UTC"
    [0000]  INFO until tag="v0.1.0" commit="5d95ff3aba8b6619b59f85f24332bc3ab5b0ae11"
    [0000] DEBUG total merged PRs discovered: 2
    [0000] TRACE PR #2 filtered out: merged after 2022-03-23 20:19 UTC (merged 2022-03-23 20:19 UTC)
    [0000] DEBUG PRs contributing to changelog: 1
    [0000] DEBUG total closed issues discovered: 0
    [0000] DEBUG issues contributing to changelog: 0
    [0000]  INFO discovered changes: 1
    [0000] DEBUG   └── added-feature: 1
    

    The correct behavior (which this PR fixes) is to keep the edge PR/issue included in the list of changes:

    [0000] DEBUG github owner="wagoodman" repo="chronicle-test" path="../chronicle-test"
    [0000]  INFO since tag="v0.0.0" date="2022-03-23 20:24 UTC"
    [0000]  INFO until tag="v0.1.0" commit="5d95ff3aba8b6619b59f85f24332bc3ab5b0ae11"
    [0000] DEBUG total merged PRs discovered: 2
    [0000] DEBUG PRs contributing to changelog: 2
    [0000] DEBUG total closed issues discovered: 0
    [0000] DEBUG issues contributing to changelog: 0
    [0000]  INFO discovered changes: 2
    [0000] DEBUG   └── added-feature: 2
    
  • Release timestamp should be a date (not a timestamp)

    Release timestamp should be a date (not a timestamp)

    For example:

    ## [v0.27.0](https://github.com/anchore/syft/tree/v0.27.0) (2021-10-21 15:23:34.232633 -0400 EDT m=+2.137022651)
    

    Should be:

    ## [v0.27.0](https://github.com/anchore/syft/tree/v0.27.0) (2021-10-21)
    
  • VCS url for the release in MD format is wrong

    VCS url for the release in MD format is wrong

    For example:

    # Changelog
    
    ## [v0.27.0](https://github.com/anchore/syft/tree/v0.26.0) (2021-10-21)
    

    Should be

    # Changelog
    
    ## [v0.27.0](https://github.com/anchore/syft/tree/v0.27.0) (2021-10-21)
    
  • Support annotated tags

    Support annotated tags

    When an annotated tag is present Chronicle errors out with following:

    unable to summarize changes: object not found
    

    While doing some debugging it appeared that chronicle has a hash for the annotated tag that does not actually match the hash of the commit it is referencing which seemed to be the cause of the failure to find object

  • Merged PR linked to an issue that isn't closed?...

    Merged PR linked to an issue that isn't closed?...

    It is common to have an issue represent the total work to be done and split up that work across multiple PRs. In this case there would be a merged PR with an issue that is still open. When we detect this case, what should we do? Report out the partial feature based on the PR information? Hold back from reporting the entry in the changelog since the issue isn't closed? Or something else.

    (My preference is to hold of from including it in the changelog until the linked issue is closed, but was curious for other thoughts here)

  • Add rate limit awareness

    Add rate limit awareness

    We use the v4 github API to limit the amount of information returned and the number of queries that need to be made. However, it is still possible with large repos to hit rate limits. It would be ideal to track this information with each query and be smart about retries with the information gleaned from the rate limit section of the responses.

  • Add command to create a full changelog from previous releases

    Add command to create a full changelog from previous releases

    There could be cases when you want to take the set of partial changelogs and generate a full changelog from all previous releases. A command that is capable of doing this without having to recreate the changelog from the set of PRs and issues would be ideal --especially if there were manual changes made to the changelog (which is common).

  • Add optional

    Add optional "Closed Issues" section

    In cases where you generate a changelog but there are issues that were closed by have no labels. This would give you the option to have a section for the "remaining" issues that were closed in the release that fall into this category. From there someone could manually fit these issues into the right changelog sections (e.g. bug fix, enhancement, etc).

network-node-manager is a kubernetes controller that controls the network configuration of a node to resolve network issues of kubernetes.
network-node-manager is a kubernetes controller that controls the network configuration of a node to resolve network issues of kubernetes.

Network Node Manager network-node-manager is a kubernetes controller that controls the network configuration of a node to resolve network issues of ku

Dec 18, 2022
Kubedd – Check migration issues of Kubernetes Objects while K8s upgrade

Kubedd – Check migration issues of Kubernetes Objects while K8s upgrade

Dec 19, 2022
Scout for alarming issues in your Kubernetes cluster
Scout for alarming issues in your Kubernetes cluster

Kube-Scout An alerting tool for Kubernetes clusters issues of all types, in real time, with intelligent redundancy, and easily extendable api. Kube-Sc

Dec 20, 2022
Gh-i - Search your github issues interactively
Gh-i - Search your github issues interactively

search your github issues interactively Installation • Usage • Feedback Search G

Dec 29, 2022
🦥 Easy and simple Prometheus SLO generator
🦥 Easy and simple Prometheus SLO generator

Sloth Introduction Use the easiest way to generate SLOs for Prometheus. Sloth generates understandable, uniform and reliable Prometheus SLOs for any k

Jan 4, 2023
Semantic version generator using git commit keywords and overrides

Semantic version generator Project created overnight, to prove that management of semantic versioning is NOT painful and do not require arguments and

Jan 1, 2023
HTTP load generator, ApacheBench (ab) replacement, formerly known as rakyll/boom
HTTP load generator, ApacheBench (ab) replacement, formerly known as rakyll/boom

hey is a tiny program that sends some load to a web application. hey was originally called boom and was influenced from Tarek Ziade's tool at tarekzia

Jan 3, 2023
k6 query generator for graphite API

xk6-carbonapi This is a k6 extension using the xk6 system. ❗ This is a proof of concept, isn't supported by the k6 team, and may break in the future.

Dec 1, 2022
A kubernetes operator demo generated by code-generator, it only watches cr's events

intro a small operator demo which only watches car cr's events. environment: ubuntu-20.04-amd64 k3s-1.21 docker-20.10.7 go-1.17 tools code-generator d

Dec 13, 2021
Password generator for golang

Password generator by Distemi(D####Fox) Russian(Русский) How to run this program

Dec 19, 2021
Code generator to help implement the visitor pattern.

mkvisitor Given package example type ( Node struct{} Leaf struct{} ) run mkvisitor -type "Node,Leaf" then generate package example import "fmt" t

Oct 6, 2021
ubume - Golang project generator

ubume - Golang project generator ubume command generate golang project at current directory. Currently, ubume can only generate application projects.

Dec 17, 2022
Mango-kong - Mango (man page generator) integration for Kong
Mango-kong - Mango (man page generator) integration for Kong

Mango (man page generator) integration for Kong This package allows Kong package

Dec 5, 2022
A Teardown API to Lua stub generator written in Go.

Teardown API Stub Generator This project aims to provide a parser for the XML files at https://www.teardowngame.com/modding/api.xml These files descri

Oct 28, 2022
Container Registry Synchronization made easy and fast

?? booster - Makes synchronization of container images between registries faster.

May 12, 2022
kubectl-fzf provides a fast and powerful fzf autocompletion for kubectl
kubectl-fzf provides a fast and powerful fzf autocompletion for kubectl

Kubectl-fzf kubectl-fzf provides a fast and powerful fzf autocompletion for kubectl. Table of Contents Kubectl-fzf Table of Contents Features Requirem

Nov 3, 2021
FaaSNet: Scalable and Fast Provisioning of Custom Serverless Container Runtimes at Alibaba Cloud Function Compute (USENIX ATC'21)

FaaSNet FaaSNet is the first system that provides an end-to-end, integrated solution for FaaS-optimized container runtime provisioning. FaaSNet uses l

Jan 2, 2023
Fast, Docker-ready image processing server written in Go and libvips, with Thumbor URL syntax

Imagor Imagor is a fast, Docker-ready image processing server written in Go. Imagor uses one of the most efficient image processing library libvips (w

Dec 30, 2022
Fast cross-platform HTTP benchmarking tool written in Go

bombardier bombardier is a HTTP(S) benchmarking tool. It is written in Go programming language and uses excellent fasthttp instead of Go's default htt

Jan 2, 2023