diff --git a/README.md b/README.md index 460bae59..c7a4254d 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ Automate releases with Conventional Commit Messages. | `version-file` | provide a path to a version file to increment (used by ruby releaser) | | `fork` | Should the PR be created from a fork (does not work with `secrets.GITHUB_TOKEN`) | | `command` | release-please command to run, either `github-release`, or `release-pr` (_defaults to running both_) | +| `default-branch` | branch to open pull release PR against (detected by default) | | output | description | |:---:|---| diff --git a/action.yml b/action.yml index b2240579..05df7a61 100644 --- a/action.yml +++ b/action.yml @@ -38,6 +38,9 @@ inputs: version-file: description: 'provide a path to a version file to increment (used by ruby releaser)' required: false + default-branch: + description: 'branch to open pull release PR against (detected by default)' + required: false runs: using: 'node12' main: 'dist/index.js' diff --git a/index.js b/index.js index 1d2d7ab9..def804db 100644 --- a/index.js +++ b/index.js @@ -16,6 +16,7 @@ async function main () { const changelogTypes = core.getInput('changelog-types') const command = core.getInput('command') ? core.getInput('command') : undefined const versionFile = core.getInput('version-file') ? core.getInput('version-file') : undefined + const defaultBranch = core.getInput('default-branch') ? core.getInput('default-branch') : undefined // Parse the changelogTypes if there are any let changelogSections @@ -60,7 +61,8 @@ async function main () { label: RELEASE_LABEL, bumpMinorPreMajor, changelogSections, - versionFile + versionFile, + defaultBranch }) const pr = await release.run() if (pr) { diff --git a/test/release-please.js b/test/release-please.js index 852fe4ee..61bd2e1c 100644 --- a/test/release-please.js +++ b/test/release-please.js @@ -5,7 +5,7 @@ const core = require('@actions/core') const sinon = require('sinon') describe('release-please-action', () => { - it('both opens PR and tags GitHub releases by default', async () => { + it('both opens PR to the default branch and tags GitHub releases by default', async () => { const output = {} core.setOutput = (name, value) => { output[name] = value @@ -26,17 +26,59 @@ describe('release-please-action', () => { return Release } const releasePR = sinon.stub().returns(25) + const buildStatic = sinon.stub().returns({ + run: releasePR + }) action.getReleasePRFactory = () => { return { - buildStatic: () => { - return { - run: releasePR - } - } + buildStatic + } + } + await action.main() + sinon.assert.calledOnce(createRelease) + sinon.assert.calledWith(buildStatic, 'node', sinon.match.hasOwn('defaultBranch', undefined)) + sinon.assert.calledOnce(releasePR) + assert.deepStrictEqual(output, { + release_created: true, + upload_url: 'http://example.com', + tag_name: 'v1.0.0', + pr: 25 + }) + }) + + it('both opens PR to a different default branch and tags GitHub releases by default', async () => { + const output = {} + core.setOutput = (name, value) => { + output[name] = value + } + const input = { + 'release-type': 'node', + 'default-branch': 'dev' + } + core.getInput = (name) => { + return input[name] + } + const createRelease = sinon.stub().returns({ + upload_url: 'http://example.com', + tag_name: 'v1.0.0' + }) + action.getGitHubRelease = () => { + class Release {} + Release.prototype.createRelease = createRelease + return Release + } + const releasePR = sinon.stub().returns(25) + const buildStatic = sinon.stub().returns({ + run: releasePR + }) + action.getReleasePRFactory = () => { + return { + buildStatic } } await action.main() sinon.assert.calledOnce(createRelease) + sinon.assert.calledWith(buildStatic, 'node', sinon.match.hasOwn('defaultBranch', 'dev')) sinon.assert.calledOnce(releasePR) assert.deepStrictEqual(output, { release_created: true,