mirror of
https://github.com/cycjimmy/semantic-release-action.git
synced 2025-11-07 18:56:56 +00:00
refactor(*): split tasks and modules
This commit is contained in:
parent
9d624df62a
commit
feb118b68d
7 changed files with 123 additions and 82 deletions
15
src/cleanupNpmrc.task.js
Normal file
15
src/cleanupNpmrc.task.js
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
const core = require('@actions/core');
|
||||||
|
const exec = require('./_exec');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean up `.npmrc` file in the repo after releasing
|
||||||
|
* @returns {Promise<never>}
|
||||||
|
*/
|
||||||
|
module.exports = async () => {
|
||||||
|
const {stdout, stderr} = await exec(`rm -f .npmrc`);
|
||||||
|
core.debug(stdout);
|
||||||
|
|
||||||
|
if (stderr) {
|
||||||
|
return Promise.reject(stderr);
|
||||||
|
}
|
||||||
|
};
|
||||||
21
src/handleOptions.js
Normal file
21
src/handleOptions.js
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
const core = require('@actions/core');
|
||||||
|
const inputs = require('./inputs.json');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* handleDryRunOption
|
||||||
|
* @returns {{}|{dryRun: boolean}}
|
||||||
|
*/
|
||||||
|
exports.handleDryRunOption = () => {
|
||||||
|
const dryRun = core.getInput(inputs.dry_run, {required: false}) || '';
|
||||||
|
|
||||||
|
switch (dryRun) {
|
||||||
|
case 'true':
|
||||||
|
return {dryRun: true};
|
||||||
|
|
||||||
|
case 'false':
|
||||||
|
return {dryRun: false};
|
||||||
|
|
||||||
|
default:
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
};
|
||||||
95
src/index.js
95
src/index.js
|
|
@ -1,103 +1,34 @@
|
||||||
const exec = require('./_exec');
|
|
||||||
const path = require('path');
|
|
||||||
const core = require('@actions/core');
|
const core = require('@actions/core');
|
||||||
const semanticRelease = require('semantic-release');
|
const semanticRelease = require('semantic-release');
|
||||||
|
const {handleDryRunOption} = require('./handleOptions');
|
||||||
|
const preInstallPlugins = require('./preInstallPlugins.task');
|
||||||
|
const cleanupNpmrc = require('./cleanupNpmrc.task');
|
||||||
|
const windUpJob = require('./windUpJob.task');
|
||||||
|
|
||||||
const OutputKeys = {
|
const outputs = require('./outputs.json');
|
||||||
newReleasePublished: 'new_release_published',
|
const inputs = require('./inputs.json');
|
||||||
newReleaseVersion: 'new_release_version',
|
|
||||||
newReleaseMajor: 'new_release_major_version',
|
|
||||||
newReleaseMinor: 'new_release_minor_version',
|
|
||||||
newReleasePatch: 'new_release_patch_version',
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* handleDryRunOption
|
|
||||||
* @returns {{}|{dryRun: boolean}}
|
|
||||||
*/
|
|
||||||
const handleDryRunOption = () => {
|
|
||||||
const dryRun = core.getInput('dry_run', {required: false}) || '';
|
|
||||||
|
|
||||||
switch (dryRun) {
|
|
||||||
case 'true':
|
|
||||||
return {dryRun: true};
|
|
||||||
|
|
||||||
case 'false':
|
|
||||||
return {dryRun: false};
|
|
||||||
|
|
||||||
default:
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Release main task
|
* Release main task
|
||||||
* @returns {Promise<Promise<never>|undefined>}
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
const release = async () => {
|
const release = async () => {
|
||||||
const branch = core.getInput('branch', {required: false}) || 'master';
|
|
||||||
const extraPlugins = core.getInput('extra_plugins', {required: false}) || '';
|
|
||||||
|
|
||||||
// set outputs default
|
// set outputs default
|
||||||
core.setOutput(OutputKeys.newReleasePublished, 'false');
|
core.setOutput(outputs.new_release_published, 'false');
|
||||||
|
|
||||||
// pre-install plugins
|
const branch = core.getInput(inputs.branch, {required: false}) || 'master';
|
||||||
if (extraPlugins) {
|
|
||||||
const _extraPlugins = extraPlugins
|
await preInstallPlugins();
|
||||||
.replace(/['"]/g, '')
|
|
||||||
.replace(/[\n\r]/g, ' ');
|
|
||||||
const {stdout, stderr} = await exec(`npm install ${_extraPlugins}`, {
|
|
||||||
cwd: path.resolve(__dirname)
|
|
||||||
});
|
|
||||||
core.debug(stdout);
|
|
||||||
if (stderr) {
|
|
||||||
return Promise.reject(stderr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = await semanticRelease({
|
const result = await semanticRelease({
|
||||||
branch,
|
branch,
|
||||||
...(handleDryRunOption()),
|
...(handleDryRunOption()),
|
||||||
});
|
});
|
||||||
|
|
||||||
// Clean up `.npmrc` file in the repo after releasing
|
await cleanupNpmrc();
|
||||||
{
|
await windUpJob(result);
|
||||||
const {stdout, stderr} = await exec(`rm -f .npmrc`);
|
|
||||||
core.debug(stdout);
|
|
||||||
if (stderr) {
|
|
||||||
core.debug(stderr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!result) {
|
|
||||||
core.debug('No release published.');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const {lastRelease, commits, nextRelease, releases} = result;
|
|
||||||
|
|
||||||
core.debug(`Published ${nextRelease.type} release version ${nextRelease.version} containing ${commits.length} commits.`);
|
|
||||||
|
|
||||||
if (lastRelease.version) {
|
|
||||||
core.debug(`The last release was "${lastRelease.version}".`);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const release of releases) {
|
|
||||||
core.debug(`The release was published with plugin "${release.pluginName}".`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const {version} = nextRelease;
|
|
||||||
const [major, minor, patch] = version.split('.');
|
|
||||||
|
|
||||||
// set outputs
|
|
||||||
core.setOutput(OutputKeys.newReleasePublished, 'true');
|
|
||||||
core.setOutput(OutputKeys.newReleaseVersion, version);
|
|
||||||
core.setOutput(OutputKeys.newReleaseMajor, major);
|
|
||||||
core.setOutput(OutputKeys.newReleaseMinor, minor);
|
|
||||||
core.setOutput(OutputKeys.newReleasePatch, patch);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
module.exports = () => {
|
module.exports = () => {
|
||||||
core.debug('Initialization successful');
|
core.debug('Initialization successful');
|
||||||
release().catch(core.setFailed);
|
release().catch(core.setFailed);
|
||||||
|
|
|
||||||
5
src/inputs.json
Normal file
5
src/inputs.json
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"branch": "branch",
|
||||||
|
"extra_plugins": "extra_plugins",
|
||||||
|
"dry_run": "dry_run"
|
||||||
|
}
|
||||||
7
src/outputs.json
Normal file
7
src/outputs.json
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"new_release_published": "new_release_published",
|
||||||
|
"new_release_version": "new_release_version",
|
||||||
|
"new_release_major_version": "new_release_major_version",
|
||||||
|
"new_release_minor_version": "new_release_minor_version",
|
||||||
|
"new_release_patch_version": "new_release_patch_version"
|
||||||
|
}
|
||||||
26
src/preInstallPlugins.task.js
Normal file
26
src/preInstallPlugins.task.js
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
const path = require('path');
|
||||||
|
const core = require('@actions/core');
|
||||||
|
const exec = require('./_exec');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pre-install plugins
|
||||||
|
* @returns {Promise<never>}
|
||||||
|
*/
|
||||||
|
module.exports = async () => {
|
||||||
|
const extraPlugins = core.getInput('extra_plugins', {required: false}) || '';
|
||||||
|
|
||||||
|
if (extraPlugins) {
|
||||||
|
const _extraPlugins = extraPlugins
|
||||||
|
.replace(/['"]/g, '')
|
||||||
|
.replace(/[\n\r]/g, ' ');
|
||||||
|
|
||||||
|
const {stdout, stderr} = await exec(`npm install ${_extraPlugins}`, {
|
||||||
|
cwd: path.resolve(__dirname)
|
||||||
|
});
|
||||||
|
core.debug(stdout);
|
||||||
|
|
||||||
|
if (stderr) {
|
||||||
|
return Promise.reject(stderr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
36
src/windUpJob.task.js
Normal file
36
src/windUpJob.task.js
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
const core = require('@actions/core');
|
||||||
|
const outputs = require('./outputs.json');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* windUpJob
|
||||||
|
* @param result
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
module.exports = async (result) => {
|
||||||
|
if (!result) {
|
||||||
|
core.debug('No release published.');
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
const {lastRelease, commits, nextRelease, releases} = result;
|
||||||
|
|
||||||
|
core.debug(`Published ${nextRelease.type} release version ${nextRelease.version} containing ${commits.length} commits.`);
|
||||||
|
|
||||||
|
if (lastRelease.version) {
|
||||||
|
core.debug(`The last release was "${lastRelease.version}".`);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const release of releases) {
|
||||||
|
core.debug(`The release was published with plugin "${release.pluginName}".`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const {version} = nextRelease;
|
||||||
|
const [major, minor, patch] = version.split('.');
|
||||||
|
|
||||||
|
// set outputs
|
||||||
|
core.setOutput(outputs.new_release_published, 'true');
|
||||||
|
core.setOutput(outputs.new_release_version, version);
|
||||||
|
core.setOutput(outputs.new_release_major_version, major);
|
||||||
|
core.setOutput(outputs.new_release_minor_version, minor);
|
||||||
|
core.setOutput(outputs.new_release_patch_version, patch);
|
||||||
|
};
|
||||||
Loading…
Reference in a new issue