@tinymce/beehive-flow
Version:
A CLI tool implementing the beehive flow git branching process
42 lines (34 loc) • 1.79 kB
text/typescript
import { gitP, SimpleGit } from 'simple-git';
import { AdvanceArgs, AdvanceCiArgs, BeehiveArgs } from '../args/BeehiveArgs';
import { Version } from '../core/Version';
import * as Git from '../utils/Git';
import { BranchState, getBranchDetails, Module } from '../core/BranchLogic';
import * as PromiseUtils from '../utils/PromiseUtils';
import * as AdvanceVersion from '../core/AdvanceVersion';
import { printHeaderMessage } from '../core/Messages';
const go = async (version: Version, module: Module, git: SimpleGit, args: BeehiveArgs, dir: string): Promise<void> => {
await AdvanceVersion.advancePatch(version, module.packageJson, module.packageJsonFile, git);
await Git.pushUnlessDryRun(dir, git, args.dryRun);
};
export const advance = async (args: AdvanceArgs): Promise<void> => {
printHeaderMessage(args);
const gitUrl = await Git.resolveGitUrl(args.gitUrl, args.workingDir);
const { dir, git } = await Git.cloneInTempFolder(gitUrl, args.temp);
await Git.checkout(git, args.branchName);
const branchDetails = await getBranchDetails(dir);
if (branchDetails.branchState !== BranchState.ReleaseReady) {
return PromiseUtils.fail('Branch is not in release ready state - can\'t advance. Check that the version is x.y.z with no suffix.');
}
await go(branchDetails.version, branchDetails.rootModule, git, args, dir);
};
export const advanceCi = async (args: AdvanceCiArgs): Promise<void> => {
printHeaderMessage(args);
const dir = args.workingDir;
const branchDetails = await getBranchDetails(dir);
if (branchDetails.branchState !== BranchState.ReleaseReady) {
console.log('Not in release ready state - not advancing version.');
} else {
const git = gitP(dir);
await go(branchDetails.version, branchDetails.rootModule, git, args, dir);
}
};