From 1afd9390e3b8ad2075e7735d6db9ae1d97bcdf1e Mon Sep 17 00:00:00 2001 From: Joel Alphonso Date: Mon, 6 Jun 2022 21:22:25 -0400 Subject: [PATCH] feat(pr): create a release script that outputs conventional changes for a range of commits/branches --- .github/workflows/create-pull-request.yaml | 6 +- create-release-notes | 79 ++++++++++++++++++++++ package-lock.json | 4 ++ package.json | 1 + 4 files changed, 87 insertions(+), 3 deletions(-) create mode 100755 create-release-notes diff --git a/.github/workflows/create-pull-request.yaml b/.github/workflows/create-pull-request.yaml index 5d755c12d..ade193325 100644 --- a/.github/workflows/create-pull-request.yaml +++ b/.github/workflows/create-pull-request.yaml @@ -23,8 +23,8 @@ jobs: - name: Checkout project uses: actions/checkout@v3 with: - persist-credentials: false fetch-depth: 0 + persist-credentials: false - uses: bahmutov/npm-install@v1 @@ -40,7 +40,7 @@ jobs: - name: Exrtact changelog shell: bash run: | - CHANGELOG=$(npx conventional-changelog --config conventional-changelog-pr.json) + CHANGELOG=$(./create-release-notes --from ${{ github.event.inputs.base }} --group) CHANGELOG="${CHANGELOG//'%'/'%25'}" CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" @@ -58,7 +58,7 @@ jobs: # Merge ${{ steps.extract_branch.outputs.branch }} into ${{ github.event.inputs.base }} ${{ steps.extract_changelog.outputs.changelog }} pr_reviewer: "@locomotive-charcoal/reviewers" # Comma-separated list (no spaces) - # pr_assignee: ${{ github.event.inputs.user_name }} # Comma-separated list (no spaces) + pr_assignee: "${{ github.event.inputs.user_name }}" # Comma-separated list (no spaces) pr_label: release,automatic-pr # Comma-separated list (no spaces) pr_draft: false # Creates pull request as draft pr_allow_empty: false # Creates pull request even if there are no changes diff --git a/create-release-notes b/create-release-notes new file mode 100755 index 000000000..9beb753f5 --- /dev/null +++ b/create-release-notes @@ -0,0 +1,79 @@ +#!/usr/bin/env node +'use strict' + +const conventionalChangelog = require('conventional-changelog') +const resolve = require('path').resolve +const _ = require('lodash') +const meow = require('meow') + +const cli = meow(` + Usage + create-release-notes + + Example + create-release-notes --from beta --to HEAD + + Options + -g --group Group all messages under the same group. Needs to + -f, --from Commit or branch to start from when processing the release notes + -t, --to Commit or branch to end to when processing the release notes + -n, --config A filepath of your config script + Example of a config script: https://github.com/conventional-changelog/conventional-changelog/blob/master/packages/conventional-changelog-cli/test/fixtures/config.js +`, { + booleanDefault: undefined, + flags: { + config: { + alias: 'n', + type: 'string' + }, + group: { + alias: 'g', + type: 'boolean' + }, + from: { + type: 'string' + }, + to: { + type: 'string' + }, + } +}) + +let config; +const flags = cli.flags +let options = {}; + +if (flags.group) { + options.tagPrefix = 'null' // This allows us to igonre tags when generating release notes, this way we get all the changes in a single grouped release block. +} + +if (flags.config) { + config = require(resolve(process.cwd(), flags.config)) +} else { + config = _.merge(config, { + writerOpts: { + headerPartial: '## Changes : ' + }, + options: { + preset: { + name: 'conventionalcommits' + } + } + }) +} + +options.config = config +options = _.merge(options, config.options) + +const gitRawCommitsOpts = _.merge({}, config.gitRawCommitsOpts || {}) + +if (flags.from) { + gitRawCommitsOpts.from = flags.from +} + +if (flags.to) { + gitRawCommitsOpts.to = flags.to +} + +conventionalChangelog(options, {}, gitRawCommitsOpts, config.parserOpts, config.writerOpts) + .pipe(process.stdout); // or any writable stream diff --git a/package-lock.json b/package-lock.json index 08b8859f7..7f7f8a5e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,9 +4,13 @@ "requires": true, "packages": { "": { + "bin": { + "create-release-note": "create-release-notes.js" + }, "devDependencies": { "@semantic-release/changelog": "^6.0.1", "@semantic-release/exec": "^6.0.3", + "conventional-changelog": "^3.1.25", "conventional-changelog-cli": "^2.2.2", "conventional-changelog-conventionalcommits": "^5.0.0", "cz-conventional-changelog": "^3.3.0", diff --git a/package.json b/package.json index 108c81589..4fd85c539 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "devDependencies": { "@semantic-release/changelog": "^6.0.1", "@semantic-release/exec": "^6.0.3", + "conventional-changelog": "^3.1.25", "conventional-changelog-cli": "^2.2.2", "conventional-changelog-conventionalcommits": "^5.0.0", "cz-conventional-changelog": "^3.3.0",