Skip to content

Commit

Permalink
fix: allow plugins to set environment variables to be used by other p…
Browse files Browse the repository at this point in the history
…lugins
  • Loading branch information
pvdlg authored and gr2m committed Feb 7, 2020
1 parent 8ce2d6e commit 68f7e92
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 2 deletions.
5 changes: 3 additions & 2 deletions lib/plugins/normalize.js
Expand Up @@ -6,7 +6,7 @@ const PLUGINS_DEFINITIONS = require('../definitions/plugins');
const {loadPlugin, parseConfig} = require('./utils');

module.exports = (context, type, pluginOpt, pluginsPath) => {
const {stdout, stderr, options, logger} = context;
const {stdout, stderr, options, logger, env} = context;
if (!pluginOpt) {
return noop;
}
Expand All @@ -32,10 +32,11 @@ module.exports = (context, type, pluginOpt, pluginsPath) => {
if (!input.options.dryRun || dryRun) {
logger.log(`Start step "${type}" of plugin "${pluginName}"`);
const result = await func({
...cloneDeep(omit(input, ['stdout', 'stderr', 'logger'])),
...cloneDeep(omit(input, ['stdout', 'stderr', 'logger', 'env'])),
stdout,
stderr,
logger: logger.scope(logger.scopeName, pluginName),
env,
});
if (outputValidator && !outputValidator(result)) {
throw getError(`E${type.toUpperCase()}OUTPUT`, {result, pluginName});
Expand Down
48 changes: 48 additions & 0 deletions test/index.test.js
Expand Up @@ -1941,3 +1941,51 @@ test('Get all commits including the ones not in the shallow clone', async t => {

t.is(analyzeCommits.args[0][1].commits.length, 3);
});

test('Allow plugins to set environment variables', async t => {
const {cwd, repositoryUrl} = await gitRepo(true);
await gitCommits(['First'], {cwd});
await gitTagVersion('v1.0.0', undefined, {cwd});
await gitCommits(['Second'], {cwd});
await gitPush(repositoryUrl, 'master', {cwd});

const nextRelease = {type: 'major', version: '2.0.0', gitHead: await getGitHead({cwd}), gitTag: 'v2.0.0'};
const verifyConditions = stub().resolves();
const analyzeCommits = stub().resolves(nextRelease.type);
const verifyRelease = stub().resolves();
const generateNotes = stub().resolves();
const prepare = stub().resolves();
const publish1 = async (_, context) => {
context.env.TEST_VAR = 'test-value';
};

const publish2 = stub().resolves();
const success = stub().resolves();
const env = {...process.env};
const config = {branch: 'master', repositoryUrl};
const options = {
...config,
plugins: false,
verifyConditions,
analyzeCommits,
verifyRelease,
generateNotes,
prepare,
publish: [publish1, publish2],
success,
};

const semanticRelease = requireNoCache('..', {
'./lib/get-logger': () => t.context.logger,
'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
});
await semanticRelease(options, {
cwd,
env,
stdout: new WritableStreamBuffer(),
stderr: new WritableStreamBuffer(),
});

t.is(publish2.args[0][1].env.TEST_VAR, 'test-value');
t.is(env.TEST_VAR, 'test-value');
});

0 comments on commit 68f7e92

Please sign in to comment.