@travetto/repo
Version:
Monorepo utilities
58 lines (46 loc) • 1.46 kB
text/typescript
import { spawn } from 'node:child_process';
import { CliCommand, type CliCommandShape, type ParsedState } from '@travetto/cli';
import { WorkPool } from '@travetto/worker';
import { Env } from '@travetto/runtime';
import { Ignore, Max, Min } from '@travetto/schema';
import { RepoExecUtil } from './bin/exec.ts';
/**
* Repo execution
*/
()
export class RepoExecCommand implements CliCommandShape {
()
_parsed: ParsedState;
/** Only changed modules */
changed = false;
/** Number of concurrent workers */
(1) (WorkPool.MAX_SIZE)
workers = WorkPool.DEFAULT_SIZE;
/** Prefix output by folder */
prefixOutput = true;
/** Show stdout */
showStdout = true;
preMain(): void {
Env.DEBUG.set(false);
}
async main(cmd: string, args: string[] = []): Promise<void> {
const finalArgs = [...args, ...this._parsed.unknown];
await RepoExecUtil.execOnModules(
this.changed ? 'changed' : 'workspace',
module => spawn(cmd, finalArgs, {
cwd: module.sourceFolder,
env: {
...process.env,
...Env.TRV_MODULE.export(module.name),
...Env.TRV_MANIFEST.export(undefined)
}
}),
{
progressMessage: module => `Running '${cmd} ${finalArgs.join(' ')}' [%idx/%total] ${module?.sourceFolder ?? ''}`,
showStdout: this.showStdout,
prefixOutput: this.prefixOutput,
workerCount: this.workers,
}
);
}
}