44 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const {template, isString, isPlainObject} = require('lodash');
 | |
| const AggregateError = require('aggregate-error');
 | |
| const {isGitRepo, verifyTagName} = require('./git');
 | |
| const getError = require('./get-error');
 | |
| 
 | |
| module.exports = async (context) => {
 | |
|   const {
 | |
|     cwd,
 | |
|     env,
 | |
|     options: {repositoryUrl, tagFormat, branches},
 | |
|   } = context;
 | |
|   const errors = [];
 | |
| 
 | |
|   if (!(await isGitRepo({cwd, env}))) {
 | |
|     errors.push(getError('ENOGITREPO', {cwd}));
 | |
|   } else if (!repositoryUrl) {
 | |
|     errors.push(getError('ENOREPOURL'));
 | |
|   }
 | |
| 
 | |
|   // Verify that compiling the `tagFormat` produce a valid Git tag
 | |
|   if (!(await verifyTagName(template(tagFormat)({version: '0.0.0'})))) {
 | |
|     errors.push(getError('EINVALIDTAGFORMAT', context));
 | |
|   }
 | |
| 
 | |
|   // Verify the `tagFormat` contains the variable `version` by compiling the `tagFormat` template
 | |
|   // with a space as the `version` value and verify the result contains the space.
 | |
|   // The space is used as it's an invalid tag character, so it's guaranteed to no be present in the `tagFormat`.
 | |
|   if ((template(tagFormat)({version: ' '}).match(/ /g) || []).length !== 1) {
 | |
|     errors.push(getError('ETAGNOVERSION', context));
 | |
|   }
 | |
| 
 | |
|   branches.forEach((branch) => {
 | |
|     if (
 | |
|       !((isString(branch) && branch.trim()) || (isPlainObject(branch) && isString(branch.name) && branch.name.trim()))
 | |
|     ) {
 | |
|       errors.push(getError('EINVALIDBRANCH', {branch}));
 | |
|     }
 | |
|   });
 | |
| 
 | |
|   if (errors.length > 0) {
 | |
|     throw new AggregateError(errors);
 | |
|   }
 | |
| };
 |