From 55e8862f175cf05a7550c87bdbca1b440aeb1000 Mon Sep 17 00:00:00 2001 From: cycjimmy Date: Fri, 1 Nov 2019 00:06:27 +0800 Subject: [PATCH] feat(inputs): add semantic_version to specify version range(#3) semantic_version: Specify specifying version range for semantic-release. If no version range is specified, semantic-release@^15 will be used by default. --- README.md | 2 ++ action.yml | 2 ++ src/index.js | 4 +++- src/inputs.json | 1 + src/installSpecifyingVersionSemantic.task.js | 25 ++++++++++++++++++++ 5 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/installSpecifyingVersionSemantic.task.js diff --git a/README.md b/README.md index 901b566..677fe98 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ GitHub Action for [Semantic Release](https://github.com/semantic-release/semanti #### Step3: Add a [Workflow File](https://help.github.com/en/articles/workflow-syntax-for-github-actions) to your repository to create custom automated processes. * inputs: * `branch`: [Optional] The branch on which releases should happen. It will override the branch attribute in your configuration file. If the attribute is not configured on both sides, the default is master. + * `semantic_version`: [Optional] Specify specifying version range for semantic-release. If no version range is specified, semantic-release@^15 will be used by default. * `extra_plugins`: [Optional] Extra plugins for pre-install. You can also specify specifying version range for the extra plugins if you prefer. * `dry_run`: [Optional] Whether to run semantic release in "dry-run" mode. It will override the dryRun attribute in your configuration file. * outputs: @@ -45,6 +46,7 @@ steps: id: semantic # Need an `id` for output variables with: branch: master + semantic_version: 15.13.28 # You can specify specifying version range for the extra plugins if you prefer. extra_plugins: | @semantic-release/git diff --git a/action.yml b/action.yml index 4862c12..6238f9c 100644 --- a/action.yml +++ b/action.yml @@ -7,6 +7,8 @@ branding: inputs: branch: description: 'The branch on which releases should happen. It will override the branch attribute in your configuration file. If the attribute is not configured on both sides, the default is master.' + semantic_version: + description: 'Specify specifying version range for semantic-release. If no version range is specified, semantic-release@^15 will be used by default.' extra_plugins: description: 'Extra plugins for pre-install. You can also specify specifying version range for the extra plugins if you prefer.' dry_run: diff --git a/src/index.js b/src/index.js index fb87500..90ff105 100644 --- a/src/index.js +++ b/src/index.js @@ -1,7 +1,7 @@ const core = require('@actions/core'); -const semanticRelease = require('semantic-release'); const {handleBranchOption, handleDryRunOption} = require('./handleOptions'); const setUpJob = require('./setUpJob.task'); +const installSpecifyingVersionSemantic = require('./installSpecifyingVersionSemantic.task'); const preInstallPlugins = require('./preInstallPlugins.task'); const cleanupNpmrc = require('./cleanupNpmrc.task'); const windUpJob = require('./windUpJob.task'); @@ -12,8 +12,10 @@ const windUpJob = require('./windUpJob.task'); */ const release = async () => { await setUpJob(); + await installSpecifyingVersionSemantic(); await preInstallPlugins(); + const semanticRelease = require('semantic-release'); const result = await semanticRelease({ ...(handleBranchOption()), ...(handleDryRunOption()), diff --git a/src/inputs.json b/src/inputs.json index 3e63d83..5f32226 100644 --- a/src/inputs.json +++ b/src/inputs.json @@ -1,5 +1,6 @@ { "branch": "branch", + "semantic_version": "semantic_version", "extra_plugins": "extra_plugins", "dry_run": "dry_run" } diff --git a/src/installSpecifyingVersionSemantic.task.js b/src/installSpecifyingVersionSemantic.task.js new file mode 100644 index 0000000..ea18828 --- /dev/null +++ b/src/installSpecifyingVersionSemantic.task.js @@ -0,0 +1,25 @@ +const path = require('path'); +const core = require('@actions/core'); +const exec = require('./_exec'); +const inputs = require('./inputs.json'); + +/** + * Install Specifying Version semantic-release + * @returns {Promise} + */ +module.exports = async () => { + const semantic_version = core.getInput(inputs.semantic_version); + + if (!semantic_version) { + return Promise.resolve(); + } + + const {stdout, stderr} = await exec(`npm install semantic-release@${semantic_version}`, { + cwd: path.resolve(__dirname) + }); + core.debug(stdout); + + if (stderr) { + return Promise.reject(stderr); + } +};