build-raptor 0.117.0 → 0.118.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,7 @@ import { RepoProtocol } from 'repo-protocol';
5
5
  import { Breakdown } from './breakdown';
6
6
  import { EngineOptions } from './engine';
7
7
  import { EngineEventScheme } from './engine-event-scheme';
8
+ import { StepByStepTransmitter } from './step-by-step-transmitter';
8
9
  export interface TaskSelector {
9
10
  /**
10
11
  * units the units whose tasks are to be built. An empty array means "all units".
@@ -22,6 +23,7 @@ export declare class EngineBootstrapper {
22
23
  readonly storageClient: StorageClient;
23
24
  readonly repoProtocol: RepoProtocol;
24
25
  private readonly eventPublisher;
26
+ readonly transmitter: StepByStepTransmitter;
25
27
  readonly rootDir: {
26
28
  resolve: (pathInRepo?: PathInRepo | undefined) => string;
27
29
  unresolve: (absolutePath: string) => PathInRepo;
@@ -43,6 +43,7 @@ class EngineBootstrapper {
43
43
  this.repoProtocol = repoProtocol;
44
44
  this.eventPublisher = new misc_1.TypedPublisher();
45
45
  this.rootDir = (0, core_types_1.RepoRoot)(rootDir);
46
+ this.transmitter = new step_by_step_transmitter_1.StepByStepTransmitter(logger);
46
47
  }
47
48
  async makeEngine(selector, configFile, optionsSansConfig) {
48
49
  const taskOutputDir = (await Tmp.dir()).path;
@@ -54,8 +55,11 @@ class EngineBootstrapper {
54
55
  };
55
56
  const taskStore = new task_store_1.TaskStore(this.rootDir, this.storageClient, this.logger, this.eventPublisher);
56
57
  const stepByStepFile = path.join(options.buildRaptorDir, 'step-by-step.json');
57
- const transmitter = await step_by_step_transmitter_1.StepByStepTransmitter.create(stepByStepFile, options.stepByStepProcessorModuleName, this.logger);
58
- const engine = new engine_1.Engine(this.logger, this.rootDir, this.repoProtocol, taskStore, taskOutputDir, selector, this.eventPublisher, transmitter, options);
58
+ this.transmitter.setOutputFile(stepByStepFile);
59
+ if (options.stepByStepProcessorModuleName) {
60
+ this.transmitter.dynamicallyLoadProcessor(options.stepByStepProcessorModuleName);
61
+ }
62
+ const engine = new engine_1.Engine(this.logger, this.rootDir, this.repoProtocol, taskStore, taskOutputDir, selector, this.eventPublisher, this.transmitter, options);
59
63
  return engine;
60
64
  }
61
65
  readConfigFile(pathToConfigFile) {
@@ -148,4 +152,4 @@ function summarizeTask(t) {
148
152
  rootCause: t.record.rootCause,
149
153
  };
150
154
  }
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLWJvb3RzdHJhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbmdpbmUtYm9vdHN0cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyREFBcUQ7QUFDckQsK0NBQXlDO0FBQ3pDLDJDQUFpRDtBQUNqRCx1Q0FBd0I7QUFDeEIsbUNBQWlFO0FBQ2pFLCtCQUF1RjtBQUN2RiwyQ0FBNEI7QUFFNUIsaURBQWtDO0FBQ2xDLDJDQUE0QjtBQUM1QiwyQ0FBNEI7QUFFNUIsMkNBQXVDO0FBQ3ZDLCtEQUF5RDtBQUN6RCxxQ0FBZ0Q7QUFFaEQseUVBQWtFO0FBRWxFLDZDQUF3QztBQWV4QyxNQUFhLGtCQUFrQjtJQUc3QixZQUNFLE9BQWUsRUFDTixFQUFVLEVBQ1YsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLFlBQTBCO1FBSDFCLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDVixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFQcEIsbUJBQWMsR0FBRyxJQUFJLHFCQUFjLEVBQXFCLENBQUE7UUFTdkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLHFCQUFRLEVBQUMsT0FBTyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxVQUFVLENBQ3RCLFFBQXNCLEVBQ3RCLFVBQThCLEVBQzlCLGlCQUFnRDtRQUVoRCxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUVBQWlFLGFBQWEsRUFBRSxDQUFDLENBQUE7UUFF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
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLWJvb3RzdHJhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbmdpbmUtYm9vdHN0cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyREFBcUQ7QUFDckQsK0NBQXlDO0FBQ3pDLDJDQUFpRDtBQUNqRCx1Q0FBd0I7QUFDeEIsbUNBQWlFO0FBQ2pFLCtCQUF1RjtBQUN2RiwyQ0FBNEI7QUFFNUIsaURBQWtDO0FBQ2xDLDJDQUE0QjtBQUM1QiwyQ0FBNEI7QUFFNUIsMkNBQXVDO0FBQ3ZDLCtEQUF5RDtBQUN6RCxxQ0FBZ0Q7QUFFaEQseUVBQWtFO0FBRWxFLDZDQUF3QztBQWV4QyxNQUFhLGtCQUFrQjtJQUs3QixZQUNFLE9BQWUsRUFDTixFQUFVLEVBQ1YsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLFlBQTBCO1FBSDFCLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDVixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFUcEIsbUJBQWMsR0FBRyxJQUFJLHFCQUFjLEVBQXFCLENBQUE7UUFXdkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLHFCQUFRLEVBQUMsT0FBTyxDQUFDLENBQUE7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGdEQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3RELENBQUM7SUFFTyxLQUFLLENBQUMsVUFBVSxDQUN0QixRQUFzQixFQUN0QixVQUE4QixFQUM5QixpQkFBZ0Q7UUFFaEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQzlDLElB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
@@ -1,13 +1,15 @@
1
- import { Step } from 'build-raptor-api';
1
+ import { Step, StepByStepProcessor } from 'build-raptor-api';
2
2
  import { Logger } from 'logger';
3
3
  export declare class StepByStepTransmitter {
4
- private readonly stepByStepFile;
5
- private readonly stepByStepProcessor;
6
4
  private readonly logger;
7
5
  private readonly steps;
8
6
  private readonly promises;
9
- private constructor();
7
+ private readonly stepByStepProcessors;
8
+ private stepByStepFile;
9
+ constructor(logger: Logger);
10
+ setOutputFile(f: string): void;
11
+ addProcessor(p: StepByStepProcessor): void;
10
12
  transmit(step: Step): void;
11
13
  close(): Promise<void>;
12
- static create(stepByStepFile: string, stepByStepProcessorModuleName: string | undefined, logger: Logger, lookFor?: string): Promise<StepByStepTransmitter>;
14
+ dynamicallyLoadProcessor(stepByStepProcessorModuleName: string, lookFor?: string): Promise<void>;
13
15
  }
@@ -25,42 +25,48 @@ const build_raptor_dynamic_loader_1 = require("build-raptor-dynamic-loader");
25
25
  const fs = __importStar(require("fs"));
26
26
  const util = __importStar(require("util"));
27
27
  class StepByStepTransmitter {
28
- constructor(stepByStepFile, stepByStepProcessor, logger) {
29
- this.stepByStepFile = stepByStepFile;
30
- this.stepByStepProcessor = stepByStepProcessor;
28
+ constructor(logger) {
31
29
  this.logger = logger;
32
30
  this.steps = [];
33
31
  this.promises = [];
32
+ this.stepByStepProcessors = [];
33
+ this.stepByStepFile = undefined;
34
+ }
35
+ setOutputFile(f) {
36
+ this.stepByStepFile = f;
37
+ }
38
+ addProcessor(p) {
39
+ this.stepByStepProcessors.push(p);
34
40
  }
35
41
  transmit(step) {
36
42
  const parsed = build_raptor_api_1.Step.parse(step);
37
43
  this.steps.push(parsed);
38
- if (this.stepByStepProcessor) {
39
- this.promises.push(Promise.resolve(this.stepByStepProcessor(parsed)));
44
+ for (const p of this.stepByStepProcessors) {
45
+ this.promises.push(Promise.resolve(p(parsed)));
40
46
  }
41
47
  }
42
48
  async close() {
43
49
  await Promise.all(this.promises);
50
+ if (!this.stepByStepFile) {
51
+ return;
52
+ }
44
53
  const parsed = build_raptor_api_1.StepByStep.parse(this.steps);
45
54
  fs.writeFileSync(this.stepByStepFile, JSON.stringify(parsed));
46
55
  this.logger.info(`step by step written to ${this.stepByStepFile}`);
47
56
  }
48
- static async create(stepByStepFile, stepByStepProcessorModuleName, logger, lookFor = 'processor') {
49
- let processor;
50
- if (stepByStepProcessorModuleName) {
51
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
52
- const imported = (0, build_raptor_dynamic_loader_1.loadDynamically)(stepByStepProcessorModuleName);
53
- const temp = Object.entries(imported)
54
- .flatMap(([k, v]) => (k === lookFor ? [v] : []))
55
- .find(Boolean);
56
- if (!temp) {
57
- throw new Error(`could not find ${lookFor} in module ${stepByStepProcessorModuleName} which exports ${util.inspect(imported)}`);
58
- }
59
- processor = temp; // eslint-disable-line @typescript-eslint/consistent-type-assertions
57
+ async dynamicallyLoadProcessor(stepByStepProcessorModuleName, lookFor = 'processor') {
58
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
59
+ const imported = (0, build_raptor_dynamic_loader_1.loadDynamically)(stepByStepProcessorModuleName);
60
+ const temp = Object.entries(imported)
61
+ .flatMap(([k, v]) => (k === lookFor ? [v] : []))
62
+ .find(Boolean);
63
+ if (!temp) {
64
+ throw new Error(`could not find ${lookFor} in module ${stepByStepProcessorModuleName} which exports ${util.inspect(imported)}`);
60
65
  }
61
- logger.info(`processor=${util.inspect(processor)}`);
62
- return new StepByStepTransmitter(stepByStepFile, processor, logger);
66
+ const processor = temp; // eslint-disable-line @typescript-eslint/consistent-type-assertions
67
+ this.logger.info(`processor=${util.inspect(processor)}`);
68
+ this.addProcessor(processor);
63
69
  }
64
70
  }
65
71
  exports.StepByStepTransmitter = StepByStepTransmitter;
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1ieS1zdGVwLXRyYW5zbWl0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAtYnktc3RlcC10cmFuc21pdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXdFO0FBQ3hFLDZFQUE2RDtBQUM3RCx1Q0FBd0I7QUFFeEIsMkNBQTRCO0FBRTVCLE1BQWEscUJBQXFCO0lBSWhDLFlBQ21CLGNBQXNCLEVBQ3RCLG1CQUFvRCxFQUNwRCxNQUFjO1FBRmQsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFDdEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFpQztRQUNwRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTmhCLFVBQUssR0FBVyxFQUFFLENBQUE7UUFDbEIsYUFBUSxHQUFvQixFQUFFLENBQUE7SUFNNUMsQ0FBQztJQUVKLFFBQVEsQ0FBQyxJQUFVO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLHVCQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXZCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUN0RTtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDaEMsTUFBTSxNQUFNLEdBQUcsNkJBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFBO0lBQ3BFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDakIsY0FBc0IsRUFDdEIsNkJBQWlELEVBQ2pELE1BQWMsRUFDZCxPQUFPLEdBQUcsV0FBVztRQUVyQixJQUFJLFNBQVMsQ0FBQTtRQUNiLElBQUksNkJBQTZCLEVBQUU7WUFDakMseUVBQXlFO1lBQ3pFLE1BQU0sUUFBUSxHQUFHLElBQUEsNkNBQWUsRUFBQyw2QkFBNkIsQ0FBVyxDQUFBO1lBQ3pFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2lCQUNsQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ2hCLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsTUFBTSxJQUFJLEtBQUssQ0FDYixrQkFBa0IsT0FBTyxjQUFjLDZCQUE2QixrQkFBa0IsSUFBSSxDQUFDLE9BQU8sQ0FDaEcsUUFBUSxDQUNULEVBQUUsQ0FDSixDQUFBO2FBQ0Y7WUFDRCxTQUFTLEdBQUcsSUFBMkIsQ0FBQSxDQUFDLG9FQUFvRTtTQUM3RztRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNuRCxPQUFPLElBQUkscUJBQXFCLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNyRSxDQUFDO0NBQ0Y7QUFwREQsc0RBb0RDIn0=
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1ieS1zdGVwLXRyYW5zbWl0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAtYnktc3RlcC10cmFuc21pdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXdFO0FBQ3hFLDZFQUE2RDtBQUM3RCx1Q0FBd0I7QUFFeEIsMkNBQTRCO0FBRTVCLE1BQWEscUJBQXFCO0lBTWhDLFlBQTZCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTDFCLFVBQUssR0FBVyxFQUFFLENBQUE7UUFDbEIsYUFBUSxHQUFvQixFQUFFLENBQUE7UUFDOUIseUJBQW9CLEdBQTBCLEVBQUUsQ0FBQTtRQUN6RCxtQkFBYyxHQUF1QixTQUFTLENBQUE7SUFFUixDQUFDO0lBRS9DLGFBQWEsQ0FBQyxDQUFTO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBc0I7UUFDakMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVU7UUFDakIsTUFBTSxNQUFNLEdBQUcsdUJBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFdkIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQy9DO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4QixPQUFNO1NBQ1A7UUFDRCxNQUFNLE1BQU0sR0FBRyw2QkFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDM0MsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQUVELEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyw2QkFBcUMsRUFBRSxPQUFPLEdBQUcsV0FBVztRQUN6Rix5RUFBeUU7UUFDekUsTUFBTSxRQUFRLEdBQUcsSUFBQSw2Q0FBZSxFQUFDLDZCQUE2QixDQUFXLENBQUE7UUFDekUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7YUFDbEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2hCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxNQUFNLElBQUksS0FBSyxDQUNiLGtCQUFrQixPQUFPLGNBQWMsNkJBQTZCLGtCQUFrQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQy9HLENBQUE7U0FDRjtRQUNELE1BQU0sU0FBUyxHQUFHLElBQTJCLENBQUEsQ0FBQyxvRUFBb0U7UUFFbEgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQzlCLENBQUM7Q0FDRjtBQW5ERCxzREFtREMifQ==
@@ -1,5 +1,5 @@
1
1
  import { Criticality } from 'logger';
2
- declare type TestReporting = 'just-failing' | 'tree' | 'tree-just-failing';
2
+ declare type TestReporting = 'tree-all' | 'tree-just-failing';
3
3
  interface Options {
4
4
  units: string[];
5
5
  goals: string[];
@@ -24,6 +24,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.main = exports.run = exports.getEnv = void 0;
26
26
  const build_raptor_core_1 = require("build-raptor-core");
27
+ const fs_1 = __importDefault(require("fs"));
27
28
  const fse = __importStar(require("fs-extra"));
28
29
  const logger_1 = require("logger");
29
30
  const misc_1 = require("misc");
@@ -82,26 +83,63 @@ async function run(options) {
82
83
  const repoProtocol = new yarn_repo_protocol_1.YarnRepoProtocol(logger, assetPublisher);
83
84
  const bootstrapper = await build_raptor_core_1.EngineBootstrapper.create(rootDir, storageClient, repoProtocol, t0, options.criticality, '', logger);
84
85
  const testOutput = new Map();
85
- const visualizer = new task_execution_visualizer_1.TaskExecutionVisualizer();
86
+ const visualizer = options.taskProgressOutput ? new task_execution_visualizer_1.TaskExecutionVisualizer() : undefined;
87
+ // TODO(imaman): use a writable stream?
88
+ const allTestsFile = path.join(buildRaptorDir, 'all-tests');
89
+ // Wipe out the file
90
+ fs_1.default.writeFileSync(allTestsFile, '');
91
+ let atLeastOneTest = false;
92
+ bootstrapper.transmitter.addProcessor(s => {
93
+ if (s.step === 'ASSET_PUBLISHED' ||
94
+ s.step === 'BUILD_RUN_STARTED' ||
95
+ s.step === 'PUBLIC_FILES' ||
96
+ s.step === 'TASK_STORE_GET' ||
97
+ s.step === 'TASK_STORE_PUT') {
98
+ return;
99
+ }
100
+ if (s.step === 'TEST_ENDED') {
101
+ atLeastOneTest = true;
102
+ return;
103
+ }
104
+ if (s.step === 'PLAN_PREPARED') {
105
+ visualizer?.addTasks(s.taskNames);
106
+ return;
107
+ }
108
+ if (s.step === 'TASK_ENDED') {
109
+ if (visualizer) {
110
+ const line = visualizer.ended(s.taskName, s.verdict, s.executionType);
111
+ if (line) {
112
+ logger.print(line);
113
+ }
114
+ }
115
+ return;
116
+ }
117
+ if (s.step === 'BUILD_RUN_ENDED') {
118
+ // If there are no tests, don't print the message asbout the location of the all-test-logs file.
119
+ // If there is no summary message, do not print it.
120
+ // If one of them is printed, add a prefix of three blank lines
121
+ const line = visualizer?.summary(Date.now() - t0) ?? '';
122
+ const whereIsTheLogMessage = atLeastOneTest ? `All test logs were written to ${allTestsFile}\n\n` : ``;
123
+ if (whereIsTheLogMessage || line) {
124
+ // The logger does .trim() on the message so we use "." instead of a "pure" blank line
125
+ logger.print(`.\n.\n.\n${whereIsTheLogMessage}${line}`);
126
+ }
127
+ return;
128
+ }
129
+ (0, misc_1.shouldNeverHappen)(s);
130
+ });
86
131
  bootstrapper.subscribable.on('testEnded', arg => {
87
132
  (0, misc_1.assigningGet)(testOutput, arg.taskName, () => []).push(arg);
88
133
  });
89
134
  bootstrapper.subscribable.on('executionStarted', arg => {
90
- if (options.taskProgressOutput) {
91
- logger.print(visualizer.begin(arg));
135
+ if (visualizer) {
136
+ visualizer.begin(arg);
92
137
  }
93
138
  else {
94
139
  logger.print(`=============================== ${arg} =================================`);
95
140
  }
96
141
  });
97
142
  bootstrapper.subscribable.on('executionEnded', async (arg) => {
98
- if (options.taskProgressOutput) {
99
- logger.print(visualizer.ended(arg.taskName, (0, misc_1.switchOn)(arg.status, {
100
- OK: () => '🏁',
101
- FAIL: () => '🏁',
102
- CRASH: () => '🏁',
103
- })));
104
- }
105
143
  // TODO(imaman): cover (output is indeed written in file structure)
106
144
  await fse.ensureDir(buildRaptorDirTasks);
107
145
  const fileName = path.join(buildRaptorDirTasks, (0, misc_1.toReasonableFileName)(arg.taskName));
@@ -116,19 +154,19 @@ async function run(options) {
116
154
  finally {
117
155
  stream.end();
118
156
  }
119
- reportTests(logger, testOutput.get(arg.taskName) ?? [], options.testReporting ?? 'tree');
120
- const doPrint = options.printPassing ||
157
+ reportTests(logger, testOutput.get(arg.taskName) ?? [], options.testReporting ?? 'tree-all', allTestsFile);
158
+ const dumpTaskOutputToTerminal = options.printPassing ||
121
159
  (0, misc_1.switchOn)(arg.status, {
122
160
  CRASH: () => false,
123
161
  OK: () => false,
124
162
  FAIL: () => true,
125
163
  });
126
- if (!doPrint) {
127
- return;
164
+ if (dumpTaskOutputToTerminal) {
165
+ await (0, misc_1.dumpFile)(arg.outputFile, process.stdout);
166
+ logger.print(`\n\n`);
128
167
  }
129
- await (0, misc_1.dumpFile)(arg.outputFile, process.stdout);
168
+ fs_1.default.appendFileSync(allTestsFile, fs_1.default.readFileSync(arg.outputFile) + '\n');
130
169
  logger.info(`output of ${arg.taskName} dumped`);
131
- logger.print(`\n\n`);
132
170
  });
133
171
  bootstrapper.subscribable.on('executionSkipped', tn => {
134
172
  logger.print(`Task ${tn} succeeded earlier. Skipping.\n`, 'low');
@@ -159,16 +197,13 @@ async function run(options) {
159
197
  process.exitCode = exitCode;
160
198
  }
161
199
  exports.run = run;
162
- function reportTests(logger, arr, tr) {
163
- if (tr === 'just-failing') {
164
- return;
165
- }
166
- let printPassing;
167
- if (tr === 'tree') {
168
- printPassing = true;
200
+ function reportTests(logger, arr, tr, allTasksFile) {
201
+ let renderPassingTests;
202
+ if (tr === 'tree-all') {
203
+ renderPassingTests = true;
169
204
  }
170
205
  else if (tr === 'tree-just-failing') {
171
- printPassing = false;
206
+ renderPassingTests = false;
172
207
  }
173
208
  else {
174
209
  (0, misc_1.shouldNeverHappen)(tr);
@@ -209,19 +244,25 @@ function reportTests(logger, arr, tr) {
209
244
  TEST_TIMEDOUT: () => '⏲️ [timedout]',
210
245
  });
211
246
  const duration = at.durationMillis === undefined ? '' : ` (${at.durationMillis} ms)`;
212
- logger.print(`${spaces}${v} ${at.testPath.at(-1)}${duration}`, 'high');
247
+ const message = `${spaces}${v} ${at.testPath.at(-1)}${duration}`;
248
+ // TODO(imaman): create a dedicate logger that write to the allTasksFile
249
+ logger.print(message, 'high');
250
+ fs_1.default.appendFileSync(allTasksFile, message + '\n');
213
251
  prev = k;
214
252
  }
215
253
  }
216
254
  const list = Object.entries((0, misc_1.groupBy)(arr, at => at.fileName)).map(([fileName, tests]) => ({ fileName, tests }));
217
255
  const sorted = (0, misc_1.sortBy)(list, at => at.fileName);
218
256
  const passing = sorted.filter(at => isPassing(at.tests));
219
- if (printPassing) {
220
- for (const at of passing) {
221
- logger.print(`✅ PASSED ${at.fileName}`, 'high');
257
+ for (const at of passing) {
258
+ const message = `✅ PASSED ${at.fileName}`;
259
+ fs_1.default.appendFileSync(allTasksFile, message + '\n');
260
+ if (renderPassingTests) {
261
+ logger.print(message, 'high');
222
262
  }
223
263
  }
224
264
  for (const at of sorted.filter(at => !isPassing(at.tests))) {
265
+ fs_1.default.appendFileSync(allTasksFile, at.fileName + '\n');
225
266
  logger.print(at.fileName, 'high');
226
267
  printTests(at.tests);
227
268
  }
@@ -253,7 +294,7 @@ function main() {
253
294
  default: [],
254
295
  })
255
296
  .option('print-passing', {
256
- describe: 'whether to print the output of passing tasks to the terminal.',
297
+ describe: 'whether to dump the output of passing tasks to the terminal.',
257
298
  type: 'boolean',
258
299
  default: false,
259
300
  })
@@ -263,6 +304,7 @@ function main() {
263
304
  demandOption: false,
264
305
  default: 8,
265
306
  })
307
+ // TODO(imaman): seems like --compact, --loudness can be replaced by --task-progress-output
266
308
  .options('compact', {
267
309
  describe: 'whether to list only executing tasks (i.e., do not print skipped tasks)',
268
310
  type: 'boolean',
@@ -286,9 +328,9 @@ function main() {
286
328
  demandOption: false,
287
329
  })
288
330
  .option('test-reporting', {
289
- choices: ['just-failing', 'tree', 'tree-just-failing'],
331
+ choices: ['tree-all', 'tree-just-failing'],
290
332
  describe: 'test reporing policy',
291
- default: 'tree',
333
+ default: 'tree-just-failing',
292
334
  })
293
335
  .option('test-caching', {
294
336
  describe: 'whether to skip running tests that have already passed',
@@ -296,7 +338,7 @@ function main() {
296
338
  default: true,
297
339
  })
298
340
  .option('task-progress-output', {
299
- describe: 'whether to print number of tasks ended/started',
341
+ describe: 'whether to print a line indicating verdict/execution-type for each task',
300
342
  type: 'boolean',
301
343
  default: false,
302
344
  })
@@ -327,7 +369,7 @@ function main() {
327
369
  compact: argv.compact,
328
370
  criticality: stringToLoudness(argv.loudness),
329
371
  testCaching: argv.testCaching,
330
- testReporting: tr === 'just-failing' || tr === 'tree' || tr === 'tree-just-failing' || tr === undefined
372
+ testReporting: tr === 'tree-all' || tr === 'tree-just-failing' || tr === undefined
331
373
  ? tr
332
374
  : (0, misc_1.failMe)(`unsupported value: ${tr}`),
333
375
  stepByStepProcessor: argv.stepByStepProcessor,
@@ -363,7 +405,7 @@ function main() {
363
405
  compact: argv.compact,
364
406
  criticality: stringToLoudness(argv.loudness),
365
407
  testCaching: argv.testCaching,
366
- testReporting: tr === 'just-failing' || tr === 'tree' || tr === 'tree-just-failing' || tr === undefined
408
+ testReporting: tr === 'tree-all' || tr === 'tree-just-failing' || tr === undefined
367
409
  ? tr
368
410
  : (0, misc_1.failMe)(`unsupported value: ${tr}`),
369
411
  stepByStepProcessor: argv.stepByStepProcessor,
@@ -409,4 +451,4 @@ function stringToLoudness(s) {
409
451
  }
410
452
  throw new Error(`illegal loudness value: "${s}"`);
411
453
  }
412
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtcmFwdG9yLWNsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZC1yYXB0b3ItY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBd0c7QUFDeEcsOENBQStCO0FBQy9CLG1DQUFpRTtBQUNqRSwrQkFZYTtBQUNiLHVDQUF3QjtBQUN4QiwyQ0FBNEI7QUFFNUIseURBQTZEO0FBRTdELGtEQUF5QjtBQUN6QiwyQ0FBdUM7QUFDdkMsMkRBQXFEO0FBRXJELDJFQUFxRTtBQXlCckUsU0FBZ0IsTUFBTSxDQUFDLFVBQXNCO0lBQzNDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQSxDQUFDLHFDQUFxQztBQUN0RSxDQUFDO0FBRkQsd0JBRUM7QUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQTtBQUM3QixLQUFLLFVBQVUsbUJBQW1CO0lBQ2hDLE9BQU8sTUFBTSw4QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsdUJBQXVCLENBQUMsRUFBRTtRQUM1RiwrQkFBK0IsRUFBRSxDQUFDLEdBQUcsRUFBRTtLQUN4QyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRU0sS0FBSyxVQUFVLEdBQUcsQ0FBQyxPQUFnQjtJQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxHQUFHLEdBQUcsQ0FBQSxDQUFDLHFDQUFxQztJQUNwRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1FBQ2pDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7S0FDM0Q7SUFDRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7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
454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtcmFwdG9yLWNsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZC1yYXB0b3ItY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBd0c7QUFDeEcsNENBQW1CO0FBQ25CLDhDQUErQjtBQUMvQixtQ0FBaUU7QUFDakUsK0JBWWE7QUFDYix1Q0FBd0I7QUFDeEIsMkNBQTRCO0FBRTVCLHlEQUE2RDtBQUU3RCxrREFBeUI7QUFDekIsMkNBQXVDO0FBQ3ZDLDJEQUFxRDtBQUVyRCwyRUFBcUU7QUF5QnJFLFNBQWdCLE1BQU0sQ0FBQyxVQUFzQjtJQUMzQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUEsQ0FBQyxxQ0FBcUM7QUFDdEUsQ0FBQztBQUZELHdCQUVDO0FBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUE7QUFDN0IsS0FBSyxVQUFVLG1CQUFtQjtJQUNoQyxPQUFPLE1BQU0sOEJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLHVCQUF1QixDQUFDLEVBQUU7UUFDNUYsK0JBQStCLEVBQUUsQ0FBQyxHQUFHLEVBQUU7S0FDeEMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVNLEtBQUssVUFBVSxHQUFHLENBQUMsT0FBZ0I7SUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0Q0FBNEMsR0FBRyxHQUFHLENBQUEsQ0FBQyxxQ0FBcUM7SUFDcEcsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtRQUNqQyxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0tBQzNEO0lBQ0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdB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
@@ -1,7 +1,15 @@
1
1
  export declare class TaskExecutionVisualizer {
2
2
  private numStarted;
3
3
  private numEnded;
4
+ private numBlocked;
5
+ private numFailed;
6
+ private numSucceeded;
7
+ private numExectuted;
8
+ private numCached;
9
+ private all;
10
+ addTasks(names: string[]): void;
4
11
  private getLine;
5
12
  begin(taskName: string): string;
6
- ended(taskName: string, verdict: string): string;
13
+ ended(taskName: string, verdict: 'OK' | 'FAIL' | 'UNKNOWN' | 'CRASH', executionType: 'EXECUTED' | 'CACHED' | 'UNKNOWN' | 'CANNOT_START'): string | undefined;
14
+ summary(durationInMillis: number): string;
7
15
  }
@@ -1,10 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TaskExecutionVisualizer = void 0;
4
+ const misc_1 = require("misc");
4
5
  class TaskExecutionVisualizer {
5
6
  constructor() {
6
7
  this.numStarted = 0;
7
8
  this.numEnded = 0;
9
+ this.numBlocked = 0;
10
+ this.numFailed = 0;
11
+ this.numSucceeded = 0;
12
+ this.numExectuted = 0;
13
+ this.numCached = 0;
14
+ this.all = 0;
15
+ }
16
+ addTasks(names) {
17
+ this.all += names.length;
8
18
  }
9
19
  getLine(taskName, text) {
10
20
  if (text === undefined) {
@@ -16,11 +26,60 @@ class TaskExecutionVisualizer {
16
26
  ++this.numStarted;
17
27
  return this.getLine(taskName);
18
28
  }
19
- ended(taskName, verdict) {
29
+ ended(taskName, verdict, executionType) {
30
+ if (executionType === 'CANNOT_START' || executionType === 'UNKNOWN') {
31
+ // It looks like UNKNOWN cannot really happen once the task is started, so we ignore it.
32
+ // CANNOT_START can happen but it clutters the output: after a (single) task that failed to build, there can be
33
+ // long chain of dependent tasks that will be CANNOT_START. printing these tasks will distract the user.
34
+ ++this.numBlocked;
35
+ return undefined;
36
+ }
20
37
  ++this.numEnded;
21
- const ret = this.getLine(taskName, verdict);
22
- return ret;
38
+ const cacheIndicator = (0, misc_1.switchOn)(executionType, {
39
+ CACHED: () => {
40
+ ++this.numCached;
41
+ return '🗃️ ';
42
+ },
43
+ EXECUTED: () => {
44
+ ++this.numExectuted;
45
+ return '󠀠✨';
46
+ },
47
+ });
48
+ const verdictIndicator = (0, misc_1.switchOn)(verdict, {
49
+ CRASH: () => {
50
+ ++this.numFailed;
51
+ return '❌';
52
+ },
53
+ FAIL: () => {
54
+ ++this.numFailed;
55
+ return '❌';
56
+ },
57
+ OK: () => {
58
+ ++this.numSucceeded;
59
+ return '✅';
60
+ },
61
+ UNKNOWN: () => '',
62
+ });
63
+ const full = `[${this.all}/${this.all}]`.length;
64
+ const progress = `[${this.numEnded}/${this.all}]`;
65
+ return `${progress.padStart(full, '.')} ${verdictIndicator} ${cacheIndicator} ${taskName}`;
66
+ }
67
+ summary(durationInMillis) {
68
+ const tried = this.numExectuted + this.numCached;
69
+ const width = this.all.toString().length;
70
+ return [
71
+ `Build Summary (${(durationInMillis / 1000).toFixed(1)}s):`,
72
+ `✅ Succeeded: ${this.numSucceeded.toString().padStart(width)}/${this.all}`,
73
+ this.numFailed > 0 ? `❌ Failed: ${this.numFailed.toString().padStart(width)}/${this.all}` : undefined,
74
+ this.numBlocked > 0 ? `⛔ Could not start: ${this.numBlocked.toString().padStart(width)}/${this.all}` : undefined,
75
+ ``,
76
+ `✨ Executed: ${this.numExectuted.toString().padStart(width)}/${tried}`,
77
+ `🗃️ Cache hit: ${this.numCached.toString().padStart(width)}/${tried} (${((100 * this.numCached) /
78
+ tried).toFixed(1)}%)`,
79
+ ]
80
+ .filter(at => at !== undefined)
81
+ .join('\n');
23
82
  }
24
83
  }
25
84
  exports.TaskExecutionVisualizer = TaskExecutionVisualizer;
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1leGVjdXRpb24tdmlzdWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrLWV4ZWN1dGlvbi12aXN1YWxpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQWEsdUJBQXVCO0lBQXBDO1FBQ1UsZUFBVSxHQUFHLENBQUMsQ0FBQTtRQUNkLGFBQVEsR0FBRyxDQUFDLENBQUE7SUFvQnRCLENBQUM7SUFsQlMsT0FBTyxDQUFDLFFBQWdCLEVBQUUsSUFBYTtRQUM3QyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDdEIsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsU0FBUyxRQUFRLEVBQUUsQ0FBQTtTQUMvRDtRQUVELE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLFNBQVMsUUFBUSxFQUFFLENBQUE7SUFDaEUsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFnQjtRQUNwQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUE7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBZ0IsRUFBRSxPQUFlO1FBQ3JDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQTtRQUNmLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzNDLE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztDQUNGO0FBdEJELDBEQXNCQyJ9
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1leGVjdXRpb24tdmlzdWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrLWV4ZWN1dGlvbi12aXN1YWxpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUUvQixNQUFhLHVCQUF1QjtJQUFwQztRQUNVLGVBQVUsR0FBRyxDQUFDLENBQUE7UUFDZCxhQUFRLEdBQUcsQ0FBQyxDQUFBO1FBQ1osZUFBVSxHQUFHLENBQUMsQ0FBQTtRQUNkLGNBQVMsR0FBRyxDQUFDLENBQUE7UUFDYixpQkFBWSxHQUFHLENBQUMsQ0FBQTtRQUNoQixpQkFBWSxHQUFHLENBQUMsQ0FBQTtRQUNoQixjQUFTLEdBQUcsQ0FBQyxDQUFBO1FBQ2IsUUFBRyxHQUFHLENBQUMsQ0FBQTtJQW9GakIsQ0FBQztJQWxGQyxRQUFRLENBQUMsS0FBZTtRQUN0QixJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUE7SUFDMUIsQ0FBQztJQUVPLE9BQU8sQ0FBQyxRQUFnQixFQUFFLElBQWE7UUFDN0MsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLFNBQVMsUUFBUSxFQUFFLENBQUE7U0FDL0Q7UUFFRCxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxTQUFTLFFBQVEsRUFBRSxDQUFBO0lBQ2hFLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBZ0I7UUFDcEIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFBO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBRUQsS0FBSyxDQUNILFFBQWdCLEVBQ2hCLE9BQTRDLEVBQzVDLGFBQWlFO1FBRWpFLElBQUksYUFBYSxLQUFLLGNBQWMsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFF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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "build-raptor",
3
- "version": "0.117.0",
3
+ "version": "0.118.0",
4
4
  "description": "CLI for super-fast monorepo builds",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -18,7 +18,7 @@
18
18
  "@aws-sdk/client-s3": "^3.623.0",
19
19
  "aws-sdk": "^2.1667.0",
20
20
  "build-raptor-dynamic-loader": "^0.62.0",
21
- "build-raptor-jest-reporter": "0.117.0",
21
+ "build-raptor-jest-reporter": "0.118.0",
22
22
  "escape-string-regexp": "^4.0.0",
23
23
  "execa": "^5.0.0",
24
24
  "fs-extra": "^9.0.0",