const {isNil} = require('lodash'); const parseJson = require('parse-json'); const debug = require('debug')('semantic-release:exec'); const SemanticReleaseError = require('@semantic-release/error'); const exec = require('./lib/exec'); const verifyConfig = require('./lib/verify-config'); async function verifyConditions(pluginConfig, context) { if (!isNil(pluginConfig.verifyConditionsCmd) || !isNil(pluginConfig.cmd)) { verifyConfig('verifyConditionsCmd', pluginConfig); try { await exec('verifyConditionsCmd', pluginConfig, context); } catch (error) { throw new SemanticReleaseError(error.stdout, 'EVERIFYCONDITIONS'); } } } async function analyzeCommits(pluginConfig, context) { if (!isNil(pluginConfig.analyzeCommitsCmd) || !isNil(pluginConfig.cmd)) { verifyConfig('analyzeCommitsCmd', pluginConfig); const stdout = await exec('analyzeCommitsCmd', pluginConfig, context); return stdout || undefined; } } async function verifyRelease(pluginConfig, context) { if (!isNil(pluginConfig.verifyReleaseCmd) || !isNil(pluginConfig.cmd)) { verifyConfig('verifyReleaseCmd', pluginConfig); try { await exec('verifyReleaseCmd', pluginConfig, context); } catch (error) { throw new SemanticReleaseError(error.stdout, 'EVERIFYRELEASE'); } } } async function generateNotes(pluginConfig, context) { if (!isNil(pluginConfig.generateNotesCmd) || !isNil(pluginConfig.cmd)) { verifyConfig('generateNotesCmd', pluginConfig); const stdout = await exec('generateNotesCmd', pluginConfig, context); return stdout; } } async function prepare(pluginConfig, context) { if (!isNil(pluginConfig.prepareCmd) || !isNil(pluginConfig.cmd)) { verifyConfig('prepareCmd', pluginConfig); await exec('prepareCmd', pluginConfig, context); } } async function publish(pluginConfig, context) { if (!isNil(pluginConfig.publishCmd) || !isNil(pluginConfig.cmd)) { verifyConfig('publishCmd', pluginConfig); const stdout = await exec('publishCmd', pluginConfig, context); try { return stdout ? parseJson(stdout) : undefined; } catch (error) { debug(stdout); debug(error); context.logger.log( `The command ${pluginConfig.publishCmd || pluginConfig.cmd} wrote invalid JSON to stdout. The stdout content will be ignored.` ); } } } async function success(pluginConfig, context) { if (!isNil(pluginConfig.successCmd) || !isNil(pluginConfig.cmd)) { verifyConfig('successCmd', pluginConfig); await exec('successCmd', pluginConfig, context); } } async function fail(pluginConfig, context) { if (!isNil(pluginConfig.failCmd) || !isNil(pluginConfig.cmd)) { verifyConfig('failCmd', pluginConfig); await exec('failCmd', pluginConfig, context); } } module.exports = {verifyConditions, analyzeCommits, verifyRelease, generateNotes, prepare, publish, success, fail};