From 4559f971f0a349a25d07fcd563da8ea713292892 Mon Sep 17 00:00:00 2001 From: Laxman Date: Mon, 14 Sep 2020 21:54:58 +0530 Subject: [PATCH 1/4] Add release templates --- action.yml | 25 +++++++++++-------------- distribution/index.js | 39 +++++++++++++++------------------------ index.js | 39 +++++++++++++++------------------------ readme.md | 27 +++++++++++---------------- 4 files changed, 52 insertions(+), 78 deletions(-) diff --git a/action.yml b/action.yml index 1bb7942..5f71db6 100644 --- a/action.yml +++ b/action.yml @@ -11,26 +11,23 @@ inputs: token: description: Personal access token (PAT) used to create releases required: true - include-hash: - description: Prepend and link commit hash to each entry - required: false - default: false - include-range: - description: Adds a compare link between tags at end of release roles - required: false - default: true exclude: description: Regex to exclude commits based on their title (don't include the initial and final `/`) required: false default: '' - header: - description: Content to prepend at the start of release notes + template: + description: Markdown template to be included in release notes required: false - default: '' - footer: - description: Content to append at the end of release notes + default: | + ### Changelog + + {commits} + + {range} + commit-template: + description: Template for each commit entry in release notes required: false - default: '' + default: '- {hash} {title}' runs: using: 'node12' main: 'distribution/index.js' diff --git a/distribution/index.js b/distribution/index.js index e7ddd63..1e156e1 100644 --- a/distribution/index.js +++ b/distribution/index.js @@ -172,13 +172,10 @@ async function run() { try { const {owner, repo} = context.repo; - const header = core.getInput('header'); - const footer = core.getInput('footer'); - - // @TODO: Fix boolean checks when https://github.com/actions/toolkit/issues/361 gets resolved - const includeHash = core.getInput('include-hash') === 'true'; - const includeRange = core.getInput('include-range') === 'true'; + const repoURL = process.env.GITHUB_SERVER_URL + '/' + process.env.GITHUB_REPOSITORY; + const releaseTemplate = core.getInput('template'); + const commitTemplate = core.getInput('commit-template'); const exclude = core.getInput('exclude'); // Fetch tags from remote @@ -212,7 +209,7 @@ async function run() { // Get commits between computed range let {stdout: commits} = await execFile('git', ['log', '--format=%H%s', range]); commits = commits.split('\n').filter(Boolean).map(line => ({ - hash: includeHash ? line.slice(0, 8) : '', + hash: line.slice(0, 8), title: line.slice(40) })); @@ -222,34 +219,28 @@ async function run() { } // Generate markdown content - const releaseBody = []; - - if (header) { - releaseBody.push(header + '\n'); - } - + const commitEntries = []; if (commits.length === 0) { - releaseBody.push('_Maintenance release_'); + commitEntries.push('_Maintenance release_'); } else { for (const {hash, title} of commits) { - releaseBody.push(`- ${hash} ${title}`); + const line = commitTemplate + .replace('{hash}', hash) + .replace('{title}', title) + .replace('{url}', repoURL + '/commit/' + hash); + commitEntries.push(line); } } - if (footer) { - releaseBody.push('\n' + footer); - } - - if (includeRange) { - releaseBody.push(`\n[\`${range}\`](https://github.com/${owner}/${repo}/compare/${range})`); - } - const octokit = getOctokit(core.getInput('token')); const createReleaseResponse = await octokit.repos.createRelease({ repo, owner, tag_name: pushedTag, // eslint-disable-line camelcase - body: releaseBody.join('\n'), + body: releaseTemplate + .replace('{version}', pushedTag) + .replace('{commits}', commitEntries.join('\n')) + .replace('{range}', `[\`${range}\`](${repoURL}/compare/${range})`), draft: false, prerelease: false }); diff --git a/index.js b/index.js index e665b50..db56efe 100644 --- a/index.js +++ b/index.js @@ -7,13 +7,10 @@ async function run() { try { const {owner, repo} = context.repo; - const header = core.getInput('header'); - const footer = core.getInput('footer'); - - // @TODO: Fix boolean checks when https://github.com/actions/toolkit/issues/361 gets resolved - const includeHash = core.getInput('include-hash') === 'true'; - const includeRange = core.getInput('include-range') === 'true'; + const repoURL = process.env.GITHUB_SERVER_URL + '/' + process.env.GITHUB_REPOSITORY; + const releaseTemplate = core.getInput('template'); + const commitTemplate = core.getInput('commit-template'); const exclude = core.getInput('exclude'); // Fetch tags from remote @@ -47,7 +44,7 @@ async function run() { // Get commits between computed range let {stdout: commits} = await execFile('git', ['log', '--format=%H%s', range]); commits = commits.split('\n').filter(Boolean).map(line => ({ - hash: includeHash ? line.slice(0, 8) : '', + hash: line.slice(0, 8), title: line.slice(40) })); @@ -57,34 +54,28 @@ async function run() { } // Generate markdown content - const releaseBody = []; - - if (header) { - releaseBody.push(header + '\n'); - } - + const commitEntries = []; if (commits.length === 0) { - releaseBody.push('_Maintenance release_'); + commitEntries.push('_Maintenance release_'); } else { for (const {hash, title} of commits) { - releaseBody.push(`- ${hash} ${title}`); + const line = commitTemplate + .replace('{hash}', hash) + .replace('{title}', title) + .replace('{url}', repoURL + '/commit/' + hash); + commitEntries.push(line); } } - if (footer) { - releaseBody.push('\n' + footer); - } - - if (includeRange) { - releaseBody.push(`\n[\`${range}\`](https://github.com/${owner}/${repo}/compare/${range})`); - } - const octokit = getOctokit(core.getInput('token')); const createReleaseResponse = await octokit.repos.createRelease({ repo, owner, tag_name: pushedTag, // eslint-disable-line camelcase - body: releaseBody.join('\n'), + body: releaseTemplate + .replace('{version}', pushedTag) + .replace('{commits}', commitEntries.join('\n')) + .replace('{range}', `[\`${range}\`](${repoURL}/compare/${range})`), draft: false, prerelease: false }); diff --git a/readme.md b/readme.md index 950c953..61887e9 100644 --- a/readme.md +++ b/readme.md @@ -31,33 +31,28 @@ The action expects you to do a deep clone of the repository using `actions/check ## Inputs -### header - -Default: `''` - -Content to prepend at the start of release notes. - ### token Required: [Personal access token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) used to create releases. -### footer +### template -Default: `''` - -Content to append at the end of release notes. +Default: +``` yml +### Changelog -### include-hash +{commits} -Default: `false` +{range} +``` -Prepend and link commit hash to each entry. +Markdown template to be included in release notes. -### include-range +### commit-template -Default: `true` +Default: `'- {hash} {title}'` -Adds a compare link between tags at end of release roles. +Template for each commit entry in release notes. ### exclude From 964a4c534342650a26b3c7301f7c661a9dc029c8 Mon Sep 17 00:00:00 2001 From: Laxman Date: Mon, 14 Sep 2020 22:31:09 +0530 Subject: [PATCH 2/4] Update screenshot in readme --- media/releases.png | Bin 20572 -> 36604 bytes readme.md | 2 ++ 2 files changed, 2 insertions(+) diff --git a/media/releases.png b/media/releases.png index ca0a04b79287d1bb20a1dab8ee4cfc4ecbaf945a..b0720f8d0ee18e35cbd5c77576deb31f344e1e33 100644 GIT binary patch literal 36604 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%0AAc?@-Dk5)N{zrm>q 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 p9$+G1_;XzW_gSuIK;& literal 20572 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 XKrco@7%BY&si+KeO>}CtTrvL#C4Z?z diff --git a/readme.md b/readme.md index 61887e9..4cf2912 100644 --- a/readme.md +++ b/readme.md @@ -4,6 +4,8 @@ Creates reasonable enough GitHub releases for pushed tags, with the commit log as release body. +The action also has customizable release body, that support markdown, and template fields. See [template](#template) option to see how that works. + By no means is this an action with extensive configurable options except for the ones already provided. But I would love to add some more in the future. ## Usage From ea33c85be4dcf72d2324488f10e3edbdb46c2a32 Mon Sep 17 00:00:00 2001 From: Laxman Date: Tue, 15 Sep 2020 20:11:48 +0530 Subject: [PATCH 3/4] Drop `{version}`, improve readme ever so slightly --- action.yml | 4 +--- distribution/index.js | 1 - index.js | 1 - readme.md | 8 ++++++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/action.yml b/action.yml index 5f71db6..f6469f0 100644 --- a/action.yml +++ b/action.yml @@ -19,13 +19,11 @@ inputs: description: Markdown template to be included in release notes required: false default: | - ### Changelog - {commits} {range} commit-template: - description: Template for each commit entry in release notes + description: Markdown template for each commit entry in release notes required: false default: '- {hash} {title}' runs: diff --git a/distribution/index.js b/distribution/index.js index 1e156e1..3a61b32 100644 --- a/distribution/index.js +++ b/distribution/index.js @@ -238,7 +238,6 @@ async function run() { owner, tag_name: pushedTag, // eslint-disable-line camelcase body: releaseTemplate - .replace('{version}', pushedTag) .replace('{commits}', commitEntries.join('\n')) .replace('{range}', `[\`${range}\`](${repoURL}/compare/${range})`), draft: false, diff --git a/index.js b/index.js index db56efe..3620579 100644 --- a/index.js +++ b/index.js @@ -73,7 +73,6 @@ async function run() { owner, tag_name: pushedTag, // eslint-disable-line camelcase body: releaseTemplate - .replace('{version}', pushedTag) .replace('{commits}', commitEntries.join('\n')) .replace('{range}', `[\`${range}\`](${repoURL}/compare/${range})`), draft: false, diff --git a/readme.md b/readme.md index 4cf2912..ce26114 100644 --- a/readme.md +++ b/readme.md @@ -48,13 +48,17 @@ Default: {range} ``` -Markdown template to be included in release notes. +Markdown template to be included in release notes. Available replacements: + +- `{commits}` description here +- `{range}` description here +- etc ### commit-template Default: `'- {hash} {title}'` -Template for each commit entry in release notes. +Markdown template for each commit entry in release notes. ### exclude From b2130ae4a99c699035709024c5927faafb475a49 Mon Sep 17 00:00:00 2001 From: Laxman Date: Wed, 16 Sep 2020 17:23:40 +0530 Subject: [PATCH 4/4] Fix documentation --- readme.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index ce26114..136f844 100644 --- a/readme.md +++ b/readme.md @@ -41,8 +41,6 @@ Required: [Personal access token](https://docs.github.com/en/github/authenticati Default: ``` yml -### Changelog - {commits} {range} @@ -50,15 +48,18 @@ Default: Markdown template to be included in release notes. Available replacements: -- `{commits}` description here -- `{range}` description here -- etc +- `{commits}` List of commits for this release, see [`commit-template`](#commit-template) below for format of each entry. +- `{range}` A link to diff on GitHub between the last and current release. ### commit-template Default: `'- {hash} {title}'` -Markdown template for each commit entry in release notes. +Markdown template for each commit entry in release notes. Available replacements: + +- `{title}` A single line title of the commit. +- `{hash}` Abbreviated commit hash, gets linkified automatically in release notes. +- `{url}` Plain link to commit on GitHub. ### exclude