feat: add logs about prepare, publish, success and fail plugins skipped in dry-run mode
				
					
				
			This commit is contained in:
		
							parent
							
								
									90b497464e
								
							
						
					
					
						commit
						90da6a0bc1
					
				
							
								
								
									
										24
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								index.js
									
									
									
									
									
								
							| @ -24,7 +24,7 @@ async function run(context, plugins) { | |||||||
|   const {isCi, branch: ciBranch, isPr} = envCi({env, cwd}); |   const {isCi, branch: ciBranch, isPr} = envCi({env, cwd}); | ||||||
| 
 | 
 | ||||||
|   if (!isCi && !options.dryRun && !options.noCi) { |   if (!isCi && !options.dryRun && !options.noCi) { | ||||||
|     logger.log('This run was not triggered in a known CI environment, running in dry-run mode.'); |     logger.warn('This run was not triggered in a known CI environment, running in dry-run mode.'); | ||||||
|     options.dryRun = true; |     options.dryRun = true; | ||||||
|   } else { |   } else { | ||||||
|     // When running on CI, set the commits author and commiter info and prevent the `git` CLI to prompt for username/password. See #703.
 |     // When running on CI, set the commits author and commiter info and prevent the `git` CLI to prompt for username/password. See #703.
 | ||||||
| @ -52,7 +52,9 @@ async function run(context, plugins) { | |||||||
|     ); |     ); | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   logger.success(`Run automated release from branch ${ciBranch}${options.dryRun ? ' in dry-run mode' : ''}`); |   logger[options.dryRun ? 'warn' : 'success']( | ||||||
|  |     `Run automated release from branch ${ciBranch}${options.dryRun ? ' in dry-run mode' : ''}` | ||||||
|  |   ); | ||||||
| 
 | 
 | ||||||
|   await verify(context); |   await verify(context); | ||||||
| 
 | 
 | ||||||
| @ -98,24 +100,28 @@ async function run(context, plugins) { | |||||||
| 
 | 
 | ||||||
|   nextRelease.notes = await plugins.generateNotes(context); |   nextRelease.notes = await plugins.generateNotes(context); | ||||||
| 
 | 
 | ||||||
|   if (options.dryRun) { |  | ||||||
|     logger.log(`Release note for version ${nextRelease.version}:`); |  | ||||||
|     if (nextRelease.notes) { |  | ||||||
|       context.stdout.write(marked(nextRelease.notes)); |  | ||||||
|     } |  | ||||||
|   } else { |  | ||||||
|   await plugins.prepare(context); |   await plugins.prepare(context); | ||||||
| 
 | 
 | ||||||
|  |   if (options.dryRun) { | ||||||
|  |     logger.warn(`Skip ${nextRelease.gitTag} tag creation in dry-run mode`); | ||||||
|  |   } else { | ||||||
|     // Create the tag before calling the publish plugins as some require the tag to exists
 |     // Create the tag before calling the publish plugins as some require the tag to exists
 | ||||||
|     await tag(nextRelease.gitTag, {cwd, env}); |     await tag(nextRelease.gitTag, {cwd, env}); | ||||||
|     await push(options.repositoryUrl, options.branch, {cwd, env}); |     await push(options.repositoryUrl, options.branch, {cwd, env}); | ||||||
|     logger.success(`Created tag ${nextRelease.gitTag}`); |     logger.success(`Created tag ${nextRelease.gitTag}`); | ||||||
|  |   } | ||||||
| 
 | 
 | ||||||
|   context.releases = await plugins.publish(context); |   context.releases = await plugins.publish(context); | ||||||
| 
 | 
 | ||||||
|   await plugins.success(context); |   await plugins.success(context); | ||||||
| 
 | 
 | ||||||
|   logger.success(`Published release ${nextRelease.version}`); |   logger.success(`Published release ${nextRelease.version}`); | ||||||
|  | 
 | ||||||
|  |   if (options.dryRun) { | ||||||
|  |     logger.log(`Release note for version ${nextRelease.version}:`); | ||||||
|  |     if (nextRelease.notes) { | ||||||
|  |       context.stdout.write(marked(nextRelease.notes)); | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   return pick(context, ['lastRelease', 'commits', 'nextRelease', 'releases']); |   return pick(context, ['lastRelease', 'commits', 'nextRelease', 'releases']); | ||||||
| @ -162,9 +168,7 @@ module.exports = async (opts = {}, {cwd = process.cwd(), env = process.env, stdo | |||||||
|       unhook(); |       unhook(); | ||||||
|       return result; |       return result; | ||||||
|     } catch (error) { |     } catch (error) { | ||||||
|       if (!options.dryRun) { |  | ||||||
|       await callFail(context, plugins, error); |       await callFail(context, plugins, error); | ||||||
|       } |  | ||||||
|       throw error; |       throw error; | ||||||
|     } |     } | ||||||
|   } catch (error) { |   } catch (error) { | ||||||
|  | |||||||
| @ -7,11 +7,13 @@ const {RELEASE_TYPE, RELEASE_NOTES_SEPARATOR} = require('./constants'); | |||||||
| module.exports = { | module.exports = { | ||||||
|   verifyConditions: { |   verifyConditions: { | ||||||
|     required: false, |     required: false, | ||||||
|  |     dryRun: true, | ||||||
|     pipelineConfig: () => ({settleAll: true}), |     pipelineConfig: () => ({settleAll: true}), | ||||||
|   }, |   }, | ||||||
|   analyzeCommits: { |   analyzeCommits: { | ||||||
|     default: ['@semantic-release/commit-analyzer'], |     default: ['@semantic-release/commit-analyzer'], | ||||||
|     required: true, |     required: true, | ||||||
|  |     dryRun: true, | ||||||
|     outputValidator: output => !output || RELEASE_TYPE.includes(output), |     outputValidator: output => !output || RELEASE_TYPE.includes(output), | ||||||
|     preprocess: ({commits, ...inputs}) => ({ |     preprocess: ({commits, ...inputs}) => ({ | ||||||
|       ...inputs, |       ...inputs, | ||||||
| @ -27,10 +29,12 @@ module.exports = { | |||||||
|   }, |   }, | ||||||
|   verifyRelease: { |   verifyRelease: { | ||||||
|     required: false, |     required: false, | ||||||
|  |     dryRun: true, | ||||||
|     pipelineConfig: () => ({settleAll: true}), |     pipelineConfig: () => ({settleAll: true}), | ||||||
|   }, |   }, | ||||||
|   generateNotes: { |   generateNotes: { | ||||||
|     required: false, |     required: false, | ||||||
|  |     dryRun: true, | ||||||
|     outputValidator: output => !output || isString(output), |     outputValidator: output => !output || isString(output), | ||||||
|     pipelineConfig: () => ({ |     pipelineConfig: () => ({ | ||||||
|       getNextInput: ({nextRelease, ...context}, notes) => ({ |       getNextInput: ({nextRelease, ...context}, notes) => ({ | ||||||
| @ -45,6 +49,7 @@ module.exports = { | |||||||
|   }, |   }, | ||||||
|   prepare: { |   prepare: { | ||||||
|     required: false, |     required: false, | ||||||
|  |     dryRun: false, | ||||||
|     pipelineConfig: ({generateNotes}) => ({ |     pipelineConfig: ({generateNotes}) => ({ | ||||||
|       getNextInput: async context => { |       getNextInput: async context => { | ||||||
|         const newGitHead = await gitHead({cwd: context.cwd}); |         const newGitHead = await gitHead({cwd: context.cwd}); | ||||||
| @ -61,6 +66,7 @@ module.exports = { | |||||||
|   }, |   }, | ||||||
|   publish: { |   publish: { | ||||||
|     required: false, |     required: false, | ||||||
|  |     dryRun: false, | ||||||
|     outputValidator: output => !output || isPlainObject(output), |     outputValidator: output => !output || isPlainObject(output), | ||||||
|     pipelineConfig: () => ({ |     pipelineConfig: () => ({ | ||||||
|       // Add `nextRelease` and plugin properties to published release
 |       // Add `nextRelease` and plugin properties to published release
 | ||||||
| @ -73,11 +79,13 @@ module.exports = { | |||||||
|   }, |   }, | ||||||
|   success: { |   success: { | ||||||
|     required: false, |     required: false, | ||||||
|  |     dryRun: false, | ||||||
|     pipelineConfig: () => ({settleAll: true}), |     pipelineConfig: () => ({settleAll: true}), | ||||||
|     preprocess: ({releases, env, ...inputs}) => ({...inputs, env, releases: hideSensitiveValues(env, releases)}), |     preprocess: ({releases, env, ...inputs}) => ({...inputs, env, releases: hideSensitiveValues(env, releases)}), | ||||||
|   }, |   }, | ||||||
|   fail: { |   fail: { | ||||||
|     required: false, |     required: false, | ||||||
|  |     dryRun: false, | ||||||
|     pipelineConfig: () => ({settleAll: true}), |     pipelineConfig: () => ({settleAll: true}), | ||||||
|     preprocess: ({errors, env, ...inputs}) => ({...inputs, env, errors: hideSensitiveValues(env, errors)}), |     preprocess: ({errors, env, ...inputs}) => ({...inputs, env, errors: hideSensitiveValues(env, errors)}), | ||||||
|   }, |   }, | ||||||
|  | |||||||
| @ -27,8 +27,9 @@ module.exports = (context, type, pluginOpt, pluginsPath) => { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   const validator = async input => { |   const validator = async input => { | ||||||
|     const {outputValidator} = PLUGINS_DEFINITIONS[type] || {}; |     const {dryRun, outputValidator} = PLUGINS_DEFINITIONS[type] || {}; | ||||||
|     try { |     try { | ||||||
|  |       if (!input.options.dryRun || dryRun) { | ||||||
|         logger.log(`Start step "${type}" of plugin "${pluginName}"`); |         logger.log(`Start step "${type}" of plugin "${pluginName}"`); | ||||||
|         const result = await func({ |         const result = await func({ | ||||||
|           ...cloneDeep(omit(input, ['stdout', 'stderr', 'logger'])), |           ...cloneDeep(omit(input, ['stdout', 'stderr', 'logger'])), | ||||||
| @ -41,6 +42,8 @@ module.exports = (context, type, pluginOpt, pluginsPath) => { | |||||||
|         } |         } | ||||||
|         logger.success(`Completed step "${type}" of plugin "${pluginName}"`); |         logger.success(`Completed step "${type}" of plugin "${pluginName}"`); | ||||||
|         return result; |         return result; | ||||||
|  |       } | ||||||
|  |       logger.warn(`Skip step "${type}" of plugin "${pluginName}" in dry-run mode`); | ||||||
|     } catch (error) { |     } catch (error) { | ||||||
|       logger.error(`Failed step "${type}" of plugin "${pluginName}"`); |       logger.error(`Failed step "${type}" of plugin "${pluginName}"`); | ||||||
|       extractErrors(error).forEach(err => Object.assign(err, {pluginName})); |       extractErrors(error).forEach(err => Object.assign(err, {pluginName})); | ||||||
|  | |||||||
| @ -25,10 +25,12 @@ test.beforeEach(t => { | |||||||
|   t.context.log = spy(); |   t.context.log = spy(); | ||||||
|   t.context.error = spy(); |   t.context.error = spy(); | ||||||
|   t.context.success = spy(); |   t.context.success = spy(); | ||||||
|  |   t.context.warn = spy(); | ||||||
|   t.context.logger = { |   t.context.logger = { | ||||||
|     log: t.context.log, |     log: t.context.log, | ||||||
|     error: t.context.error, |     error: t.context.error, | ||||||
|     success: t.context.success, |     success: t.context.success, | ||||||
|  |     warn: t.context.warn, | ||||||
|     scope: () => t.context.logger, |     scope: () => t.context.logger, | ||||||
|   }; |   }; | ||||||
| }); | }); | ||||||
| @ -476,14 +478,17 @@ test('Dry-run skips prepare, publish and success', async t => { | |||||||
|     }) |     }) | ||||||
|   ); |   ); | ||||||
| 
 | 
 | ||||||
|   t.not(t.context.log.args[0][0], 'This run was not triggered in a known CI environment, running in dry-run mode.'); |   t.not(t.context.warn.args[0][0], 'This run was not triggered in a known CI environment, running in dry-run mode.'); | ||||||
|   t.is(verifyConditions.callCount, 1); |   t.is(verifyConditions.callCount, 1); | ||||||
|   t.is(analyzeCommits.callCount, 1); |   t.is(analyzeCommits.callCount, 1); | ||||||
|   t.is(verifyRelease.callCount, 1); |   t.is(verifyRelease.callCount, 1); | ||||||
|   t.is(generateNotes.callCount, 1); |   t.is(generateNotes.callCount, 1); | ||||||
|   t.is(prepare.callCount, 0); |   t.is(prepare.callCount, 0); | ||||||
|  |   t.true(t.context.warn.calledWith(`Skip step "prepare" of plugin "[Function: ${prepare.name}]" in dry-run mode`)); | ||||||
|   t.is(publish.callCount, 0); |   t.is(publish.callCount, 0); | ||||||
|  |   t.true(t.context.warn.calledWith(`Skip step "publish" of plugin "[Function: ${publish.name}]" in dry-run mode`)); | ||||||
|   t.is(success.callCount, 0); |   t.is(success.callCount, 0); | ||||||
|  |   t.true(t.context.warn.calledWith(`Skip step "success" of plugin "[Function: ${success.name}]" in dry-run mode`)); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Dry-run skips fail', async t => { | test('Dry-run skips fail', async t => { | ||||||
| @ -523,6 +528,7 @@ test('Dry-run skips fail', async t => { | |||||||
|   t.true(t.context.error.calledWith('ERR1 error 1')); |   t.true(t.context.error.calledWith('ERR1 error 1')); | ||||||
|   t.true(t.context.error.calledWith('ERR2 error 2')); |   t.true(t.context.error.calledWith('ERR2 error 2')); | ||||||
|   t.is(fail.callCount, 0); |   t.is(fail.callCount, 0); | ||||||
|  |   t.true(t.context.warn.calledWith(`Skip step "fail" of plugin "[Function: ${fail.name}]" in dry-run mode`)); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Force a dry-run if not on a CI and "noCi" is not explicitly set', async t => { | test('Force a dry-run if not on a CI and "noCi" is not explicitly set', async t => { | ||||||
| @ -573,7 +579,7 @@ test('Force a dry-run if not on a CI and "noCi" is not explicitly set', async t | |||||||
|     }) |     }) | ||||||
|   ); |   ); | ||||||
| 
 | 
 | ||||||
|   t.is(t.context.log.args[1][0], 'This run was not triggered in a known CI environment, running in dry-run mode.'); |   t.true(t.context.warn.calledWith('This run was not triggered in a known CI environment, running in dry-run mode.')); | ||||||
|   t.is(verifyConditions.callCount, 1); |   t.is(verifyConditions.callCount, 1); | ||||||
|   t.is(analyzeCommits.callCount, 1); |   t.is(analyzeCommits.callCount, 1); | ||||||
|   t.is(verifyRelease.callCount, 1); |   t.is(verifyRelease.callCount, 1); | ||||||
|  | |||||||
| @ -62,7 +62,7 @@ test('Wrap plugin in a function that add the "pluginName" to the error"', async | |||||||
|     './plugin-error': './test/fixtures', |     './plugin-error': './test/fixtures', | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   const error = await t.throws(plugin()); |   const error = await t.throws(plugin({options: {}})); | ||||||
| 
 | 
 | ||||||
|   t.is(error.pluginName, './plugin-error'); |   t.is(error.pluginName, './plugin-error'); | ||||||
| }); | }); | ||||||
| @ -72,7 +72,7 @@ test('Wrap plugin in a function that add the "pluginName" to multiple errors"', | |||||||
|     './plugin-errors': './test/fixtures', |     './plugin-errors': './test/fixtures', | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   const errors = [...(await t.throws(plugin()))]; |   const errors = [...(await t.throws(plugin({options: {}})))]; | ||||||
|   for (const error of errors) { |   for (const error of errors) { | ||||||
|     t.is(error.pluginName, './plugin-errors'); |     t.is(error.pluginName, './plugin-errors'); | ||||||
|   } |   } | ||||||
| @ -107,7 +107,7 @@ test('Wrap "analyzeCommits" plugin in a function that validate the output of the | |||||||
|     {} |     {} | ||||||
|   ); |   ); | ||||||
| 
 | 
 | ||||||
|   const error = await t.throws(plugin()); |   const error = await t.throws(plugin({options: {}})); | ||||||
| 
 | 
 | ||||||
|   t.is(error.code, 'EANALYZECOMMITSOUTPUT'); |   t.is(error.code, 'EANALYZECOMMITSOUTPUT'); | ||||||
|   t.is(error.name, 'SemanticReleaseError'); |   t.is(error.name, 'SemanticReleaseError'); | ||||||
| @ -125,7 +125,7 @@ test('Wrap "generateNotes" plugin in a function that validate the output of the | |||||||
|     {} |     {} | ||||||
|   ); |   ); | ||||||
| 
 | 
 | ||||||
|   const error = await t.throws(plugin()); |   const error = await t.throws(plugin({options: {}})); | ||||||
| 
 | 
 | ||||||
|   t.is(error.code, 'EGENERATENOTESOUTPUT'); |   t.is(error.code, 'EGENERATENOTESOUTPUT'); | ||||||
|   t.is(error.name, 'SemanticReleaseError'); |   t.is(error.name, 'SemanticReleaseError'); | ||||||
| @ -143,7 +143,7 @@ test('Wrap "publish" plugin in a function that validate the output of the plugin | |||||||
|     {} |     {} | ||||||
|   ); |   ); | ||||||
| 
 | 
 | ||||||
|   const error = await t.throws(plugin()); |   const error = await t.throws(plugin({options: {}})); | ||||||
| 
 | 
 | ||||||
|   t.is(error.code, 'EPUBLISHOUTPUT'); |   t.is(error.code, 'EPUBLISHOUTPUT'); | ||||||
|   t.is(error.name, 'SemanticReleaseError'); |   t.is(error.name, 'SemanticReleaseError'); | ||||||
| @ -157,7 +157,7 @@ test('Plugin is called with "pluginConfig" (with object definition) and input', | |||||||
|   const pluginConf = {path: pluginFunction, conf: 'confValue'}; |   const pluginConf = {path: pluginFunction, conf: 'confValue'}; | ||||||
|   const options = {global: 'globalValue'}; |   const options = {global: 'globalValue'}; | ||||||
|   const plugin = normalize({cwd, options, logger: t.context.logger}, '', pluginConf, {}); |   const plugin = normalize({cwd, options, logger: t.context.logger}, '', pluginConf, {}); | ||||||
|   await plugin({param: 'param'}); |   await plugin({options: {}, param: 'param'}); | ||||||
| 
 | 
 | ||||||
|   t.true( |   t.true( | ||||||
|     pluginFunction.calledWithMatch( |     pluginFunction.calledWithMatch( | ||||||
| @ -172,7 +172,7 @@ test('Plugin is called with "pluginConfig" (with array definition) and input', a | |||||||
|   const pluginConf = [pluginFunction, {conf: 'confValue'}]; |   const pluginConf = [pluginFunction, {conf: 'confValue'}]; | ||||||
|   const options = {global: 'globalValue'}; |   const options = {global: 'globalValue'}; | ||||||
|   const plugin = normalize({cwd, options, logger: t.context.logger}, '', pluginConf, {}); |   const plugin = normalize({cwd, options, logger: t.context.logger}, '', pluginConf, {}); | ||||||
|   await plugin({param: 'param'}); |   await plugin({options: {}, param: 'param'}); | ||||||
| 
 | 
 | ||||||
|   t.true( |   t.true( | ||||||
|     pluginFunction.calledWithMatch( |     pluginFunction.calledWithMatch( | ||||||
| @ -189,7 +189,7 @@ test('Prevent plugins to modify "pluginConfig"', async t => { | |||||||
|   const pluginConf = {path: pluginFunction, conf: {subConf: 'originalConf'}}; |   const pluginConf = {path: pluginFunction, conf: {subConf: 'originalConf'}}; | ||||||
|   const options = {globalConf: {globalSubConf: 'originalGlobalConf'}}; |   const options = {globalConf: {globalSubConf: 'originalGlobalConf'}}; | ||||||
|   const plugin = normalize({cwd, options, logger: t.context.logger}, '', pluginConf, {}); |   const plugin = normalize({cwd, options, logger: t.context.logger}, '', pluginConf, {}); | ||||||
|   await plugin(); |   await plugin({options: {}}); | ||||||
| 
 | 
 | ||||||
|   t.is(pluginConf.conf.subConf, 'originalConf'); |   t.is(pluginConf.conf.subConf, 'originalConf'); | ||||||
|   t.is(options.globalConf.globalSubConf, 'originalGlobalConf'); |   t.is(options.globalConf.globalSubConf, 'originalGlobalConf'); | ||||||
| @ -199,7 +199,7 @@ test('Prevent plugins to modify its input', async t => { | |||||||
|   const pluginFunction = stub().callsFake((pluginConfig, options) => { |   const pluginFunction = stub().callsFake((pluginConfig, options) => { | ||||||
|     options.param.subParam = 'otherParam'; |     options.param.subParam = 'otherParam'; | ||||||
|   }); |   }); | ||||||
|   const input = {param: {subParam: 'originalSubParam'}}; |   const input = {param: {subParam: 'originalSubParam'}, options: {}}; | ||||||
|   const plugin = normalize({cwd, options: {}, logger: t.context.logger}, '', pluginFunction, {}); |   const plugin = normalize({cwd, options: {}, logger: t.context.logger}, '', pluginFunction, {}); | ||||||
|   await plugin(input); |   await plugin(input); | ||||||
| 
 | 
 | ||||||
| @ -220,7 +220,7 @@ test('Always pass a defined "pluginConfig" for plugin defined with string', asyn | |||||||
|     './test/fixtures/plugin-result-config', |     './test/fixtures/plugin-result-config', | ||||||
|     {} |     {} | ||||||
|   ); |   ); | ||||||
|   const pluginResult = await plugin(); |   const pluginResult = await plugin({options: {}}); | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(pluginResult.pluginConfig, {}); |   t.deepEqual(pluginResult.pluginConfig, {}); | ||||||
| }); | }); | ||||||
| @ -233,7 +233,7 @@ test('Always pass a defined "pluginConfig" for plugin defined with path', async | |||||||
|     {path: './test/fixtures/plugin-result-config'}, |     {path: './test/fixtures/plugin-result-config'}, | ||||||
|     {} |     {} | ||||||
|   ); |   ); | ||||||
|   const pluginResult = await plugin(); |   const pluginResult = await plugin({options: {}}); | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(pluginResult.pluginConfig, {}); |   t.deepEqual(pluginResult.pluginConfig, {}); | ||||||
| }); | }); | ||||||
|  | |||||||
| @ -63,14 +63,14 @@ test('Export plugins based on "plugins" config (array)', async t => { | |||||||
|     {} |     {} | ||||||
|   ); |   ); | ||||||
| 
 | 
 | ||||||
|   await plugins.verifyConditions({}); |   await plugins.verifyConditions({options: {}}); | ||||||
|   t.true(plugin1.verifyConditions.calledOnce); |   t.true(plugin1.verifyConditions.calledOnce); | ||||||
|   t.true(plugin2.verifyConditions.calledOnce); |   t.true(plugin2.verifyConditions.calledOnce); | ||||||
| 
 | 
 | ||||||
|   await plugins.publish({}); |   await plugins.publish({options: {}}); | ||||||
|   t.true(plugin1.publish.calledOnce); |   t.true(plugin1.publish.calledOnce); | ||||||
| 
 | 
 | ||||||
|   await plugins.verifyRelease({}); |   await plugins.verifyRelease({options: {}}); | ||||||
|   t.true(plugin2.verifyRelease.notCalled); |   t.true(plugin2.verifyRelease.notCalled); | ||||||
| 
 | 
 | ||||||
|   // Verify the module returns a function for each plugin
 |   // Verify the module returns a function for each plugin
 | ||||||
| @ -88,10 +88,10 @@ test('Export plugins based on "plugins" config (single definition)', async t => | |||||||
|   const plugin1 = {verifyConditions: stub(), publish: stub()}; |   const plugin1 = {verifyConditions: stub(), publish: stub()}; | ||||||
|   const plugins = getPlugins({cwd, logger: t.context.logger, options: {plugins: plugin1}}, {}); |   const plugins = getPlugins({cwd, logger: t.context.logger, options: {plugins: plugin1}}, {}); | ||||||
| 
 | 
 | ||||||
|   await plugins.verifyConditions({}); |   await plugins.verifyConditions({options: {}}); | ||||||
|   t.true(plugin1.verifyConditions.calledOnce); |   t.true(plugin1.verifyConditions.calledOnce); | ||||||
| 
 | 
 | ||||||
|   await plugins.publish({}); |   await plugins.publish({options: {}}); | ||||||
|   t.true(plugin1.publish.calledOnce); |   t.true(plugin1.publish.calledOnce); | ||||||
| 
 | 
 | ||||||
|   // Verify the module returns a function for each plugin
 |   // Verify the module returns a function for each plugin
 | ||||||
| @ -118,14 +118,14 @@ test('Merge global options, "plugins" options and step options', async t => { | |||||||
|     {} |     {} | ||||||
|   ); |   ); | ||||||
| 
 | 
 | ||||||
|   await plugins.verifyConditions({}); |   await plugins.verifyConditions({options: {}}); | ||||||
|   t.deepEqual(plugin1[0].verifyConditions.args[0][0], {globalOpt: 'global', pluginOpt1: 'plugin1'}); |   t.deepEqual(plugin1[0].verifyConditions.args[0][0], {globalOpt: 'global', pluginOpt1: 'plugin1'}); | ||||||
|   t.deepEqual(plugin2[0].verifyConditions.args[0][0], {globalOpt: 'global', pluginOpt2: 'plugin2'}); |   t.deepEqual(plugin2[0].verifyConditions.args[0][0], {globalOpt: 'global', pluginOpt2: 'plugin2'}); | ||||||
| 
 | 
 | ||||||
|   await plugins.publish({}); |   await plugins.publish({options: {}}); | ||||||
|   t.deepEqual(plugin1[0].publish.args[0][0], {globalOpt: 'global', pluginOpt1: 'plugin1'}); |   t.deepEqual(plugin1[0].publish.args[0][0], {globalOpt: 'global', pluginOpt1: 'plugin1'}); | ||||||
| 
 | 
 | ||||||
|   await plugins.verifyRelease({}); |   await plugins.verifyRelease({options: {}}); | ||||||
|   t.deepEqual(plugin3[0].args[0][0], {globalOpt: 'global', pluginOpt3: 'plugin3'}); |   t.deepEqual(plugin3[0].args[0][0], {globalOpt: 'global', pluginOpt3: 'plugin3'}); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| @ -248,7 +248,7 @@ test('Merge global options with plugin options', async t => { | |||||||
|     {} |     {} | ||||||
|   ); |   ); | ||||||
| 
 | 
 | ||||||
|   const [result] = await plugins.verifyRelease(); |   const [result] = await plugins.verifyRelease({options: {}}); | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(result.pluginConfig, {localOpt: 'local', globalOpt: 'global', otherOpt: 'locally-defined'}); |   t.deepEqual(result.pluginConfig, {localOpt: 'local', globalOpt: 'global', otherOpt: 'locally-defined'}); | ||||||
| }); | }); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user