5
0
Fork 0
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:
cycjimmy 2019-10-26 19:19:39 +08:00
parent 9d624df62a
commit feb118b68d
7 changed files with 123 additions and 82 deletions

15
src/cleanupNpmrc.task.js Normal file
View 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
View 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 {};
}
};

View file

@ -1,103 +1,34 @@
const exec = require('./_exec');
const path = require('path');
const core = require('@actions/core');
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 = {
newReleasePublished: 'new_release_published',
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 {};
}
};
const outputs = require('./outputs.json');
const inputs = require('./inputs.json');
/**
* Release main task
* @returns {Promise<Promise<never>|undefined>}
* @returns {Promise<void>}
*/
const release = async () => {
const branch = core.getInput('branch', {required: false}) || 'master';
const extraPlugins = core.getInput('extra_plugins', {required: false}) || '';
// set outputs default
core.setOutput(OutputKeys.newReleasePublished, 'false');
core.setOutput(outputs.new_release_published, 'false');
// pre-install plugins
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);
}
}
const branch = core.getInput(inputs.branch, {required: false}) || 'master';
await preInstallPlugins();
const result = await semanticRelease({
branch,
...(handleDryRunOption()),
});
// Clean up `.npmrc` file in the repo after releasing
{
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);
await cleanupNpmrc();
await windUpJob(result);
};
module.exports = () => {
core.debug('Initialization successful');
release().catch(core.setFailed);

5
src/inputs.json Normal file
View file

@ -0,0 +1,5 @@
{
"branch": "branch",
"extra_plugins": "extra_plugins",
"dry_run": "dry_run"
}

7
src/outputs.json Normal file
View 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"
}

View 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
View 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);
};