44 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { isPlainObject, isString, template } from "lodash-es";
 | 
						|
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);
 | 
						|
  }
 | 
						|
};
 |