changeset-releaser
Version:
Incremental builds and tests runner for monorepo projects based on Atlassian Changesets
43 lines (39 loc) • 1.09 kB
text/typescript
import { MonorepoData } from './core';
export enum TargetGroup {
Test = 'test',
Build = 'build',
Changed = 'changed'
}
export class ExecutionPlanner {
constructor(private monorepoData: MonorepoData) {}
private getPackagesByTargetGroup(group: TargetGroup): string[] {
switch (group) {
case TargetGroup.Build: {
return this.monorepoData.packagesToBuild;
}
case TargetGroup.Changed: {
return this.monorepoData.changedPackages;
}
case TargetGroup.Test: {
return this.monorepoData.packagesToTest;
}
default: {
throw new Error();
}
}
}
createPlan(group: TargetGroup, script: string) {
const pkgs = this.getPackagesByTargetGroup(group);
const usedPackages = pkgs.filter(pkg =>
this.monorepoData.packageScripts?.[pkg]?.has(script)
);
const skippedPackages = pkgs.filter(
pkg => !this.monorepoData.packageScripts?.[pkg]?.has(script)
);
return {
changedPackages: this.monorepoData.changedPackages,
usedPackages,
skippedPackages
};
}
}