44 lines
1.4 KiB
JavaScript
44 lines
1.4 KiB
JavaScript
import {template, isString, isPlainObject} from 'lodash';
|
|
import AggregateError from 'aggregate-error';
|
|
import {isGitRepo, verifyTagName} from './git.js';
|
|
import getError from './get-error.js';
|
|
|
|
export default 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);
|
|
}
|
|
};
|