Skip to content

kazupon/gh-changelogen

Repository files navigation

gh-changelogen

NPM downloads version CI

📜 Changelog generator for GitHub Releases

🌟 Features

  • Generate changelog with tag from GitHub Releases

🚀 Usage

npx gh-changelogen --repo kazupon/gh-changelogen --tag v0.0.1 --token <your github token>

the below changelog is generated.

# v0.0.1 (2022-08-22T17:22:41Z)

This changelog is generated by [GitHub Releases](https://github.com/kazupon/gh-changelogen/releases/tag/v0.0.1)

<!-- Release notes generated using configuration in .github/release.yml at v0.0.1 -->

## What's Changed
### 🌟 Features
* feat: first placeholder release by @kazupon in https://github.com/kazupon/gh-changelogen/pull/3

## New Contributors
* @renovate made their first contribution in https://github.com/kazupon/gh-changelogen/pull/1
* @kazupon made their first contribution in https://github.com/kazupon/gh-changelogen/pull/3

**Full Changelog**: https://github.com/kazupon/gh-changelogen/commits/v0.0.1

Options

  • --repo: GitHub repository name, format owner/repo (e.g. kazupon/gh-changelogen)
  • --tag: GitHub release tag (e.g. v0.0.1)
  • --token: GitHub token, if you won’t specify, respect GITHUB_TOKEN env
  • --output: Changelog file name to create or update. defaults to CHANGELOG.md and resolved relative

In Github Actions

The following is release workflow triggered by git tag push:

# .github/workflows/release.yml

name: Release

on:
  push:
    branches-ignore:
      - '**'
    tags:
      - 'v*'

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout codes
        uses: actions/checkout@v3
        with:
          ref: ${{ github.head_ref }}

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: 16.x

      - name: Extract version tag
        if: startsWith( github.ref, 'refs/tags/v' )
        uses: jungwinter/split@v2
        id: split
        with:
          msg: ${{ github.ref }}
          separator: '/'

      - name: Create Github Release
        run: gh release create ${{ steps.split.outputs._2 }} --generate-notes
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Generate changelog
        run: npx gh-changelogen --repo=kazupon/gh-changelogen --tag=${{ steps.split.outputs._2 }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Commit changelog
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          branch: main
          file_pattern: '*.md'
          commit_message: 'chore: sync changelog'

      - name: Publish package
        run: npm publish
        env:
          NPM_TOKEN: ${{secrets.NPM_TOKEN}}

💪 Motivation

  • GitHub Rleases is awesome, it automatically generates the changelog.
  • However, not all people will see the changelog in the Github Releases UI.
  • Some people prefer the text base of changelog.
  • Github Releases cannot sync changelog of repo.
  • So I need tool to generate Github Releases as the single-of-truth for changelog.

🙌 Contributing guidelines

If you are interested in contributing to gh-changelogen, I highly recommend checking out the contributing guidelines here. You'll find all the relevant information such as how to make a PR, how to setup development) etc., there.

©️ License

MIT