@grunnverk/tree-execution 1.0.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.
- package/LICENSE +22 -0
- package/README.md +1576 -0
- package/dist/TreeExecutor.d.ts +113 -0
- package/dist/TreeExecutor.d.ts.map +1 -0
- package/dist/TreeExecutor.js +113 -0
- package/dist/TreeExecutor.js.map +1 -0
- package/dist/checkpoint/CheckpointManager.d.ts +18 -0
- package/dist/checkpoint/CheckpointManager.d.ts.map +1 -0
- package/dist/checkpoint/CheckpointManager.js +156 -0
- package/dist/checkpoint/CheckpointManager.js.map +1 -0
- package/dist/checkpoint/index.d.ts +5 -0
- package/dist/checkpoint/index.d.ts.map +1 -0
- package/dist/checkpoint/index.js +5 -0
- package/dist/checkpoint/index.js.map +1 -0
- package/dist/execution/CommandValidator.d.ts +25 -0
- package/dist/execution/CommandValidator.d.ts.map +1 -0
- package/dist/execution/CommandValidator.js +129 -0
- package/dist/execution/CommandValidator.js.map +1 -0
- package/dist/execution/DependencyChecker.d.ts +47 -0
- package/dist/execution/DependencyChecker.d.ts.map +1 -0
- package/dist/execution/DependencyChecker.js +95 -0
- package/dist/execution/DependencyChecker.js.map +1 -0
- package/dist/execution/DynamicTaskPool.d.ts +118 -0
- package/dist/execution/DynamicTaskPool.d.ts.map +1 -0
- package/dist/execution/DynamicTaskPool.js +658 -0
- package/dist/execution/DynamicTaskPool.js.map +1 -0
- package/dist/execution/RecoveryManager.d.ts +89 -0
- package/dist/execution/RecoveryManager.d.ts.map +1 -0
- package/dist/execution/RecoveryManager.js +592 -0
- package/dist/execution/RecoveryManager.js.map +1 -0
- package/dist/execution/ResourceMonitor.d.ts +73 -0
- package/dist/execution/ResourceMonitor.d.ts.map +1 -0
- package/dist/execution/ResourceMonitor.js +148 -0
- package/dist/execution/ResourceMonitor.js.map +1 -0
- package/dist/execution/Scheduler.d.ts +36 -0
- package/dist/execution/Scheduler.d.ts.map +1 -0
- package/dist/execution/Scheduler.js +83 -0
- package/dist/execution/Scheduler.js.map +1 -0
- package/dist/execution/TreeExecutionAdapter.d.ts +45 -0
- package/dist/execution/TreeExecutionAdapter.d.ts.map +1 -0
- package/dist/execution/TreeExecutionAdapter.js +260 -0
- package/dist/execution/TreeExecutionAdapter.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/tree.d.ts +13 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +2510 -0
- package/dist/tree.js.map +1 -0
- package/dist/types/config.d.ts +174 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/parallelExecution.d.ts +108 -0
- package/dist/types/parallelExecution.d.ts.map +1 -0
- package/dist/types/parallelExecution.js +2 -0
- package/dist/types/parallelExecution.js.map +1 -0
- package/dist/util/commandStubs.d.ts +22 -0
- package/dist/util/commandStubs.d.ts.map +1 -0
- package/dist/util/commandStubs.js +49 -0
- package/dist/util/commandStubs.js.map +1 -0
- package/dist/util/logger.d.ts +14 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +30 -0
- package/dist/util/logger.js.map +1 -0
- package/dist/util/mutex.d.ts +38 -0
- package/dist/util/mutex.d.ts.map +1 -0
- package/dist/util/mutex.js +101 -0
- package/dist/util/mutex.js.map +1 -0
- package/dist/util/treeUtils.d.ts +46 -0
- package/dist/util/treeUtils.d.ts.map +1 -0
- package/dist/util/treeUtils.js +74 -0
- package/dist/util/treeUtils.js.map +1 -0
- package/guide/index.md +84 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DependencyChecker.d.ts","sourceRoot":"","sources":["../../src/execution/DependencyChecker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;GAGG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,KAAK,CAAkB;gBAEnB,KAAK,EAAE,eAAe;IAIlC;;;OAGG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO;IAkB5D;;;OAGG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAI9C;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAgBrC;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAIjD;;OAEG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAI/C;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAK7C;;OAEG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAK3C;;OAEG;IACH,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC;CAehF"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DependencyChecker validates package readiness and provides dependency information
|
|
3
|
+
* for the task pool scheduler.
|
|
4
|
+
*/
|
|
5
|
+
export class DependencyChecker {
|
|
6
|
+
graph;
|
|
7
|
+
constructor(graph) {
|
|
8
|
+
this.graph = graph;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Check if a package is ready to execute
|
|
12
|
+
* A package is ready when all its dependencies are completed and none have failed
|
|
13
|
+
*/
|
|
14
|
+
isReady(packageName, state) {
|
|
15
|
+
const dependencies = this.graph.edges.get(packageName) || new Set();
|
|
16
|
+
for (const dep of dependencies) {
|
|
17
|
+
// If any dependency is not completed, not ready
|
|
18
|
+
if (!state.completed.includes(dep)) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
// If any dependency failed, should be skipped (not ready)
|
|
22
|
+
if (state.failed.some(f => f.name === dep)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get count of packages that depend on this one
|
|
30
|
+
* Higher count = higher priority (unlocks more packages)
|
|
31
|
+
*/
|
|
32
|
+
getDependentCount(packageName) {
|
|
33
|
+
return (this.graph.reverseEdges.get(packageName) || new Set()).size;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get depth of package in dependency tree
|
|
37
|
+
* Depth = longest path from a root package (package with no dependencies)
|
|
38
|
+
* Lower depth = higher priority (can unlock dependent packages sooner)
|
|
39
|
+
*/
|
|
40
|
+
getDepth(packageName) {
|
|
41
|
+
const visited = new Set();
|
|
42
|
+
const calculateDepth = (pkg) => {
|
|
43
|
+
if (visited.has(pkg))
|
|
44
|
+
return 0;
|
|
45
|
+
visited.add(pkg);
|
|
46
|
+
const deps = this.graph.edges.get(pkg) || new Set();
|
|
47
|
+
if (deps.size === 0)
|
|
48
|
+
return 0;
|
|
49
|
+
return 1 + Math.max(...Array.from(deps).map(dep => calculateDepth(dep)));
|
|
50
|
+
};
|
|
51
|
+
return calculateDepth(packageName);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get all dependencies for a package
|
|
55
|
+
*/
|
|
56
|
+
getDependencies(packageName) {
|
|
57
|
+
return this.graph.edges.get(packageName) || new Set();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get all dependents (packages that depend on this one)
|
|
61
|
+
*/
|
|
62
|
+
getDependents(packageName) {
|
|
63
|
+
return this.graph.reverseEdges.get(packageName) || new Set();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if package has any dependencies
|
|
67
|
+
*/
|
|
68
|
+
hasDependencies(packageName) {
|
|
69
|
+
const deps = this.graph.edges.get(packageName);
|
|
70
|
+
return deps !== undefined && deps.size > 0;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if package has any dependents
|
|
74
|
+
*/
|
|
75
|
+
hasDependents(packageName) {
|
|
76
|
+
const dependents = this.graph.reverseEdges.get(packageName);
|
|
77
|
+
return dependents !== undefined && dependents.size > 0;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get packages that are blocked by a failed package
|
|
81
|
+
*/
|
|
82
|
+
getBlockedPackages(failedPackage, state) {
|
|
83
|
+
const blocked = new Set();
|
|
84
|
+
// Add all pending and ready packages that depend on the failed package
|
|
85
|
+
const allPending = [...state.pending, ...state.ready];
|
|
86
|
+
for (const pkg of allPending) {
|
|
87
|
+
const deps = this.graph.edges.get(pkg) || new Set();
|
|
88
|
+
if (deps.has(failedPackage)) {
|
|
89
|
+
blocked.add(pkg);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return blocked;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=DependencyChecker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DependencyChecker.js","sourceRoot":"","sources":["../../src/execution/DependencyChecker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import type { TreeExecutionConfig } from '../types/config.js';
|
|
3
|
+
import type { DependencyGraph } from '@grunnverk/tree-core';
|
|
4
|
+
import type { ExecutionResult } from '../types/index.js';
|
|
5
|
+
export interface PoolConfig {
|
|
6
|
+
graph: DependencyGraph;
|
|
7
|
+
maxConcurrency: number;
|
|
8
|
+
command: string;
|
|
9
|
+
config: TreeExecutionConfig;
|
|
10
|
+
checkpointPath?: string;
|
|
11
|
+
continue?: boolean;
|
|
12
|
+
maxRetries?: number;
|
|
13
|
+
initialRetryDelay?: number;
|
|
14
|
+
maxRetryDelay?: number;
|
|
15
|
+
backoffMultiplier?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* DynamicTaskPool manages parallel execution of packages with dependency awareness
|
|
19
|
+
*/
|
|
20
|
+
export declare class DynamicTaskPool extends EventEmitter {
|
|
21
|
+
private config;
|
|
22
|
+
private graph;
|
|
23
|
+
private state;
|
|
24
|
+
private dependencyChecker;
|
|
25
|
+
private resourceMonitor;
|
|
26
|
+
private scheduler;
|
|
27
|
+
private checkpointManager;
|
|
28
|
+
private logger;
|
|
29
|
+
private executionId;
|
|
30
|
+
private startTime;
|
|
31
|
+
private runningTasks;
|
|
32
|
+
private packageStartTimes;
|
|
33
|
+
private packageEndTimes;
|
|
34
|
+
private packageDurations;
|
|
35
|
+
private retryAttempts;
|
|
36
|
+
private publishedVersions;
|
|
37
|
+
constructor(config: PoolConfig);
|
|
38
|
+
/**
|
|
39
|
+
* Main execution entry point
|
|
40
|
+
*/
|
|
41
|
+
execute(): Promise<ExecutionResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Initialize execution state
|
|
44
|
+
*/
|
|
45
|
+
private initializeState;
|
|
46
|
+
/**
|
|
47
|
+
* Schedule a package for execution
|
|
48
|
+
*/
|
|
49
|
+
private schedulePackage;
|
|
50
|
+
/**
|
|
51
|
+
* Execute a single package (placeholder - will be overridden or use callback)
|
|
52
|
+
*/
|
|
53
|
+
private executePackage;
|
|
54
|
+
/**
|
|
55
|
+
* Wait for next task to complete
|
|
56
|
+
*/
|
|
57
|
+
private waitForNext;
|
|
58
|
+
/**
|
|
59
|
+
* Handle task completion
|
|
60
|
+
*/
|
|
61
|
+
private handleTaskCompletion;
|
|
62
|
+
/**
|
|
63
|
+
* Handle successful package completion
|
|
64
|
+
*/
|
|
65
|
+
private handleSuccess;
|
|
66
|
+
/**
|
|
67
|
+
* Handle package failure
|
|
68
|
+
*/
|
|
69
|
+
private handleFailure;
|
|
70
|
+
/**
|
|
71
|
+
* Cascade failure to dependent packages
|
|
72
|
+
*/
|
|
73
|
+
private cascadeFailure;
|
|
74
|
+
/**
|
|
75
|
+
* Update ready queue
|
|
76
|
+
*/
|
|
77
|
+
private updateReadyQueue;
|
|
78
|
+
/**
|
|
79
|
+
* Check if execution is complete
|
|
80
|
+
*/
|
|
81
|
+
private isComplete;
|
|
82
|
+
/**
|
|
83
|
+
* Determine if should save checkpoint
|
|
84
|
+
*/
|
|
85
|
+
private shouldCheckpoint;
|
|
86
|
+
/**
|
|
87
|
+
* Save checkpoint
|
|
88
|
+
*/
|
|
89
|
+
private saveCheckpoint;
|
|
90
|
+
/**
|
|
91
|
+
* Load checkpoint
|
|
92
|
+
*/
|
|
93
|
+
private loadCheckpoint;
|
|
94
|
+
/**
|
|
95
|
+
* Build execution result
|
|
96
|
+
*/
|
|
97
|
+
private buildExecutionResult;
|
|
98
|
+
/**
|
|
99
|
+
* Check if error is retriable
|
|
100
|
+
*/
|
|
101
|
+
private isRetriableError;
|
|
102
|
+
/**
|
|
103
|
+
* Calculate retry delay with exponential backoff
|
|
104
|
+
*/
|
|
105
|
+
private calculateRetryDelay;
|
|
106
|
+
/**
|
|
107
|
+
* Format duration in human-readable format
|
|
108
|
+
*/
|
|
109
|
+
private formatDuration;
|
|
110
|
+
/**
|
|
111
|
+
* Extract detailed error information from error message and stack
|
|
112
|
+
*/
|
|
113
|
+
private extractErrorDetails;
|
|
114
|
+
private extractFirstErrorLine;
|
|
115
|
+
private getPackagePath;
|
|
116
|
+
private getLogFilePath;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=DynamicTaskPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicTaskPool.d.ts","sourceRoot":"","sources":["../../src/execution/DynamicTaskPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,KAAK,EAGR,eAAe,EAIlB,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,eAAe,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAeD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,MAAM,CAAe;IAG7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,iBAAiB,CAA2B;IACpD,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,iBAAiB,CAA0D;gBAEvE,MAAM,EAAE,UAAU;IAmB9B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAoEzC;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;YACW,eAAe;IA2C7B;;OAEG;YACW,cAAc;IAS5B;;OAEG;YACW,WAAW;IAYzB;;OAEG;YACW,oBAAoB;IAuBlC;;OAEG;YACW,aAAa;IAwB3B;;OAEG;YACW,aAAa;IAkD3B;;OAEG;YACW,cAAc;IAoB5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;YACW,cAAc;IAsD5B;;OAEG;YACW,cAAc;IAwE5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmExB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwH3B,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;CAOzB"}
|