fix: verify branch first
This commit is contained in:
		
							parent
							
								
									305f4ee8eb
								
							
						
					
					
						commit
						1966f0e3e2
					
				
							
								
								
									
										11
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								index.js
									
									
									
									
									
								
							| @ -29,10 +29,17 @@ async function run(options, plugins) { | |||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   if (!await verify(options, branch, logger)) { |   if (branch !== options.branch) { | ||||||
|     return; |     logger.log( | ||||||
|  |       `This test run was triggered on the branch ${branch}, while semantic-release is configured to only publish from ${ | ||||||
|  |         options.branch | ||||||
|  |       }, therefore a new version won’t be published.` | ||||||
|  |     ); | ||||||
|  |     return false; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   await verify(options); | ||||||
|  | 
 | ||||||
|   logger.log('Run automated release from branch %s', options.branch); |   logger.log('Run automated release from branch %s', options.branch); | ||||||
| 
 | 
 | ||||||
|   logger.log('Call plugin %s', 'verify-conditions'); |   logger.log('Call plugin %s', 'verify-conditions'); | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ const AggregateError = require('aggregate-error'); | |||||||
| const {isGitRepo, verifyAuth, verifyTagName} = require('./git'); | const {isGitRepo, verifyAuth, verifyTagName} = require('./git'); | ||||||
| const getError = require('./get-error'); | const getError = require('./get-error'); | ||||||
| 
 | 
 | ||||||
| module.exports = async (options, branch, logger) => { | module.exports = async options => { | ||||||
|   const errors = []; |   const errors = []; | ||||||
| 
 | 
 | ||||||
|   if (!await isGitRepo()) { |   if (!await isGitRepo()) { | ||||||
| @ -29,15 +29,4 @@ module.exports = async (options, branch, logger) => { | |||||||
|   if (errors.length > 0) { |   if (errors.length > 0) { | ||||||
|     throw new AggregateError(errors); |     throw new AggregateError(errors); | ||||||
|   } |   } | ||||||
| 
 |  | ||||||
|   if (branch !== options.branch) { |  | ||||||
|     logger.log( |  | ||||||
|       `This test run was triggered on the branch ${branch}, while semantic-release is configured to only publish from ${ |  | ||||||
|         options.branch |  | ||||||
|       }, therefore a new version won’t be published.` |  | ||||||
|     ); |  | ||||||
|     return false; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   return true; |  | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -302,9 +302,9 @@ test.serial('Log all "verifyConditions" errors', async t => { | |||||||
|     './lib/logger': t.context.logger, |     './lib/logger': t.context.logger, | ||||||
|     'env-ci': () => ({isCi: true, branch: 'master', isPr: false}), |     'env-ci': () => ({isCi: true, branch: 'master', isPr: false}), | ||||||
|   }); |   }); | ||||||
|   const errors = await t.throws(semanticRelease(options)); |   const errors = [...(await t.throws(semanticRelease(options)))]; | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(Array.from(errors), [error1, error2, error3]); |   t.deepEqual(errors, [error1, error2, error3]); | ||||||
|   t.deepEqual(t.context.log.args[t.context.log.args.length - 2], ['%s error 2', 'ERR2']); |   t.deepEqual(t.context.log.args[t.context.log.args.length - 2], ['%s error 2', 'ERR2']); | ||||||
|   t.deepEqual(t.context.log.args[t.context.log.args.length - 1], ['%s error 3', 'ERR3']); |   t.deepEqual(t.context.log.args[t.context.log.args.length - 1], ['%s error 3', 'ERR3']); | ||||||
|   t.deepEqual(t.context.error.args[t.context.error.args.length - 1], [ |   t.deepEqual(t.context.error.args[t.context.error.args.length - 1], [ | ||||||
| @ -345,9 +345,9 @@ test.serial('Log all "verifyRelease" errors', async t => { | |||||||
|     './lib/logger': t.context.logger, |     './lib/logger': t.context.logger, | ||||||
|     'env-ci': () => ({isCi: true, branch: 'master', isPr: false}), |     'env-ci': () => ({isCi: true, branch: 'master', isPr: false}), | ||||||
|   }); |   }); | ||||||
|   const errors = await t.throws(semanticRelease(options)); |   const errors = [...(await t.throws(semanticRelease(options)))]; | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(Array.from(errors), [error1, error2]); |   t.deepEqual(errors, [error1, error2]); | ||||||
|   t.deepEqual(t.context.log.args[t.context.log.args.length - 2], ['%s error 1', 'ERR1']); |   t.deepEqual(t.context.log.args[t.context.log.args.length - 2], ['%s error 1', 'ERR1']); | ||||||
|   t.deepEqual(t.context.log.args[t.context.log.args.length - 1], ['%s error 2', 'ERR2']); |   t.deepEqual(t.context.log.args[t.context.log.args.length - 1], ['%s error 2', 'ERR2']); | ||||||
|   t.is(fail.callCount, 1); |   t.is(fail.callCount, 1); | ||||||
| @ -428,9 +428,9 @@ test.serial('Dry-run skips fail', async t => { | |||||||
|     './lib/logger': t.context.logger, |     './lib/logger': t.context.logger, | ||||||
|     'env-ci': () => ({isCi: true, branch: 'master', isPr: false}), |     'env-ci': () => ({isCi: true, branch: 'master', isPr: false}), | ||||||
|   }); |   }); | ||||||
|   const errors = await t.throws(semanticRelease(options)); |   const errors = [...(await t.throws(semanticRelease(options)))]; | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(Array.from(errors), [error1, error2]); |   t.deepEqual(errors, [error1, error2]); | ||||||
|   t.deepEqual(t.context.log.args[t.context.log.args.length - 2], ['%s error 1', 'ERR1']); |   t.deepEqual(t.context.log.args[t.context.log.args.length - 2], ['%s error 1', 'ERR1']); | ||||||
|   t.deepEqual(t.context.log.args[t.context.log.args.length - 1], ['%s error 2', 'ERR2']); |   t.deepEqual(t.context.log.args[t.context.log.args.length - 1], ['%s error 2', 'ERR2']); | ||||||
|   t.is(fail.callCount, 0); |   t.is(fail.callCount, 0); | ||||||
| @ -785,7 +785,7 @@ test.serial('Throw SemanticReleaseError if repositoryUrl is not set and cannot b | |||||||
|     './lib/logger': t.context.logger, |     './lib/logger': t.context.logger, | ||||||
|     'env-ci': () => ({isCi: true, branch: 'master', isPr: false}), |     'env-ci': () => ({isCi: true, branch: 'master', isPr: false}), | ||||||
|   }); |   }); | ||||||
|   const errors = Array.from(await t.throws(semanticRelease())); |   const errors = [...(await t.throws(semanticRelease()))]; | ||||||
| 
 | 
 | ||||||
|   // Verify error code and type
 |   // Verify error code and type
 | ||||||
|   t.is(errors[0].code, 'ENOREPOURL'); |   t.is(errors[0].code, 'ENOREPOURL'); | ||||||
|  | |||||||
| @ -1,5 +1,4 @@ | |||||||
| import test from 'ava'; | import test from 'ava'; | ||||||
| import {stub} from 'sinon'; |  | ||||||
| import tempy from 'tempy'; | import tempy from 'tempy'; | ||||||
| import verify from '../lib/verify'; | import verify from '../lib/verify'; | ||||||
| import {gitRepo} from './helpers/git-utils'; | import {gitRepo} from './helpers/git-utils'; | ||||||
| @ -9,17 +8,13 @@ const envBackup = Object.assign({}, process.env); | |||||||
| // Save the current working diretory
 | // Save the current working diretory
 | ||||||
| const cwd = process.cwd(); | const cwd = process.cwd(); | ||||||
| 
 | 
 | ||||||
| test.beforeEach(t => { | test.beforeEach(() => { | ||||||
|   // Delete environment variables that could have been set on the machine running the tests
 |   // Delete environment variables that could have been set on the machine running the tests
 | ||||||
|   delete process.env.GIT_CREDENTIALS; |   delete process.env.GIT_CREDENTIALS; | ||||||
|   delete process.env.GH_TOKEN; |   delete process.env.GH_TOKEN; | ||||||
|   delete process.env.GITHUB_TOKEN; |   delete process.env.GITHUB_TOKEN; | ||||||
|   delete process.env.GL_TOKEN; |   delete process.env.GL_TOKEN; | ||||||
|   delete process.env.GITLAB_TOKEN; |   delete process.env.GITLAB_TOKEN; | ||||||
|   // Stub the logger functions
 |  | ||||||
|   t.context.log = stub(); |  | ||||||
|   t.context.error = stub(); |  | ||||||
|   t.context.logger = {log: t.context.log, error: t.context.error}; |  | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test.afterEach.always(() => { | test.afterEach.always(() => { | ||||||
| @ -32,7 +27,7 @@ test.afterEach.always(() => { | |||||||
| test.serial('Throw a AggregateError', async t => { | test.serial('Throw a AggregateError', async t => { | ||||||
|   await gitRepo(); |   await gitRepo(); | ||||||
| 
 | 
 | ||||||
|   const errors = Array.from(await t.throws(verify({}, 'master', t.context.logger))); |   const errors = [...(await t.throws(verify({})))]; | ||||||
| 
 | 
 | ||||||
|   t.is(errors[0].name, 'SemanticReleaseError'); |   t.is(errors[0].name, 'SemanticReleaseError'); | ||||||
|   t.is(errors[0].code, 'ENOREPOURL'); |   t.is(errors[0].code, 'ENOREPOURL'); | ||||||
| @ -46,7 +41,7 @@ test.serial('Throw a SemanticReleaseError if does not run on a git repository', | |||||||
|   const dir = tempy.directory(); |   const dir = tempy.directory(); | ||||||
|   process.chdir(dir); |   process.chdir(dir); | ||||||
| 
 | 
 | ||||||
|   const errors = Array.from(await t.throws(verify({}, 'master', t.context.logger))); |   const errors = [...(await t.throws(verify({})))]; | ||||||
| 
 | 
 | ||||||
|   t.is(errors[0].name, 'SemanticReleaseError'); |   t.is(errors[0].name, 'SemanticReleaseError'); | ||||||
|   t.is(errors[0].code, 'ENOGITREPO'); |   t.is(errors[0].code, 'ENOGITREPO'); | ||||||
| @ -56,7 +51,7 @@ test.serial('Throw a SemanticReleaseError if the "tagFormat" is not valid', asyn | |||||||
|   const repositoryUrl = await gitRepo(true); |   const repositoryUrl = await gitRepo(true); | ||||||
|   const options = {repositoryUrl, tagFormat: `?\${version}`}; |   const options = {repositoryUrl, tagFormat: `?\${version}`}; | ||||||
| 
 | 
 | ||||||
|   const errors = Array.from(await t.throws(verify(options, 'master', t.context.logger))); |   const errors = [...(await t.throws(verify(options, 'master', t.context.logger)))]; | ||||||
| 
 | 
 | ||||||
|   t.is(errors[0].name, 'SemanticReleaseError'); |   t.is(errors[0].name, 'SemanticReleaseError'); | ||||||
|   t.is(errors[0].code, 'EINVALIDTAGFORMAT'); |   t.is(errors[0].code, 'EINVALIDTAGFORMAT'); | ||||||
| @ -66,7 +61,7 @@ test.serial('Throw a SemanticReleaseError if the "tagFormat" does not contains t | |||||||
|   const repositoryUrl = await gitRepo(true); |   const repositoryUrl = await gitRepo(true); | ||||||
|   const options = {repositoryUrl, tagFormat: 'test'}; |   const options = {repositoryUrl, tagFormat: 'test'}; | ||||||
| 
 | 
 | ||||||
|   const errors = Array.from(await t.throws(verify(options, 'master', t.context.logger))); |   const errors = [...(await t.throws(verify(options, 'master', t.context.logger)))]; | ||||||
| 
 | 
 | ||||||
|   t.is(errors[0].name, 'SemanticReleaseError'); |   t.is(errors[0].name, 'SemanticReleaseError'); | ||||||
|   t.is(errors[0].code, 'ETAGNOVERSION'); |   t.is(errors[0].code, 'ETAGNOVERSION'); | ||||||
| @ -76,22 +71,15 @@ test.serial('Throw a SemanticReleaseError if the "tagFormat" contains multiple " | |||||||
|   const repositoryUrl = await gitRepo(true); |   const repositoryUrl = await gitRepo(true); | ||||||
|   const options = {repositoryUrl, tagFormat: `\${version}v\${version}`}; |   const options = {repositoryUrl, tagFormat: `\${version}v\${version}`}; | ||||||
| 
 | 
 | ||||||
|   const errors = Array.from(await t.throws(verify(options, 'master', t.context.logger))); |   const errors = [...(await t.throws(verify(options)))]; | ||||||
| 
 | 
 | ||||||
|   t.is(errors[0].name, 'SemanticReleaseError'); |   t.is(errors[0].name, 'SemanticReleaseError'); | ||||||
|   t.is(errors[0].code, 'ETAGNOVERSION'); |   t.is(errors[0].code, 'ETAGNOVERSION'); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test.serial('Return "false" if the current branch is not the once configured', async t => { |  | ||||||
|   const repositoryUrl = await gitRepo(true); |  | ||||||
|   const options = {repositoryUrl, tagFormat: `v\${version}`, branch: 'master'}; |  | ||||||
| 
 |  | ||||||
|   t.false(await verify(options, 'other', t.context.logger)); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| test.serial('Return "true" if all verification pass', async t => { | test.serial('Return "true" if all verification pass', async t => { | ||||||
|   const repositoryUrl = await gitRepo(true); |   const repositoryUrl = await gitRepo(true); | ||||||
|   const options = {repositoryUrl, tagFormat: `v\${version}`, branch: 'master'}; |   const options = {repositoryUrl, tagFormat: `v\${version}`, branch: 'master'}; | ||||||
| 
 | 
 | ||||||
|   t.true(await verify(options, 'master', t.context.logger)); |   await t.notThrows(verify(options)); | ||||||
| }); | }); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user