takos-actions-engine 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/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +3477 -0
- package/coverage/coverage-final.json +20 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +176 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/src/context/base.ts.html +1792 -0
- package/coverage/src/context/env.ts.html +1243 -0
- package/coverage/src/context/index.html +161 -0
- package/coverage/src/context/index.ts.html +229 -0
- package/coverage/src/context/secrets.ts.html +1276 -0
- package/coverage/src/index.html +131 -0
- package/coverage/src/index.ts.html +502 -0
- package/coverage/src/parser/expression.ts.html +2854 -0
- package/coverage/src/parser/index.html +161 -0
- package/coverage/src/parser/index.ts.html +163 -0
- package/coverage/src/parser/validator.ts.html +1588 -0
- package/coverage/src/parser/workflow.ts.html +616 -0
- package/coverage/src/scheduler/dependency.ts.html +1138 -0
- package/coverage/src/scheduler/index.html +221 -0
- package/coverage/src/scheduler/index.ts.html +214 -0
- package/coverage/src/scheduler/job-context.ts.html +265 -0
- package/coverage/src/scheduler/job-policy.ts.html +559 -0
- package/coverage/src/scheduler/job.ts.html +1816 -0
- package/coverage/src/scheduler/listener-registry.ts.html +199 -0
- package/coverage/src/scheduler/step.ts.html +2206 -0
- package/coverage/src/scheduler/steps-context.ts.html +217 -0
- package/coverage/src/types.ts.html +1897 -0
- package/coverage/src/utils/index.html +116 -0
- package/coverage/src/utils/needs.ts.html +127 -0
- package/dist/__tests__/context/env.test.d.ts +2 -0
- package/dist/__tests__/context/env.test.d.ts.map +1 -0
- package/dist/__tests__/context/env.test.js +28 -0
- package/dist/__tests__/context/env.test.js.map +1 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +50 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/__tests__/parser/expression.test.d.ts +2 -0
- package/dist/__tests__/parser/expression.test.d.ts.map +1 -0
- package/dist/__tests__/parser/expression.test.js +116 -0
- package/dist/__tests__/parser/expression.test.js.map +1 -0
- package/dist/__tests__/parser/workflow.test.d.ts +2 -0
- package/dist/__tests__/parser/workflow.test.d.ts.map +1 -0
- package/dist/__tests__/parser/workflow.test.js +134 -0
- package/dist/__tests__/parser/workflow.test.js.map +1 -0
- package/dist/__tests__/scheduler/dependency.test.d.ts +2 -0
- package/dist/__tests__/scheduler/dependency.test.d.ts.map +1 -0
- package/dist/__tests__/scheduler/dependency.test.js +41 -0
- package/dist/__tests__/scheduler/dependency.test.js.map +1 -0
- package/dist/__tests__/scheduler/job-context.test.d.ts +2 -0
- package/dist/__tests__/scheduler/job-context.test.d.ts.map +1 -0
- package/dist/__tests__/scheduler/job-context.test.js +108 -0
- package/dist/__tests__/scheduler/job-context.test.js.map +1 -0
- package/dist/__tests__/scheduler/job-policy.test.d.ts +2 -0
- package/dist/__tests__/scheduler/job-policy.test.d.ts.map +1 -0
- package/dist/__tests__/scheduler/job-policy.test.js +159 -0
- package/dist/__tests__/scheduler/job-policy.test.js.map +1 -0
- package/dist/__tests__/scheduler/job.test.d.ts +2 -0
- package/dist/__tests__/scheduler/job.test.d.ts.map +1 -0
- package/dist/__tests__/scheduler/job.test.js +826 -0
- package/dist/__tests__/scheduler/job.test.js.map +1 -0
- package/dist/__tests__/scheduler/listener-registry.test.d.ts +2 -0
- package/dist/__tests__/scheduler/listener-registry.test.d.ts.map +1 -0
- package/dist/__tests__/scheduler/listener-registry.test.js +79 -0
- package/dist/__tests__/scheduler/listener-registry.test.js.map +1 -0
- package/dist/__tests__/scheduler/step.test.d.ts +2 -0
- package/dist/__tests__/scheduler/step.test.d.ts.map +1 -0
- package/dist/__tests__/scheduler/step.test.js +209 -0
- package/dist/__tests__/scheduler/step.test.js.map +1 -0
- package/dist/__tests__/scheduler/steps-context.test.d.ts +2 -0
- package/dist/__tests__/scheduler/steps-context.test.d.ts.map +1 -0
- package/dist/__tests__/scheduler/steps-context.test.js +43 -0
- package/dist/__tests__/scheduler/steps-context.test.js.map +1 -0
- package/dist/constants.d.ts +47 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +53 -0
- package/dist/constants.js.map +1 -0
- package/dist/context.d.ts +37 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +105 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/evaluator-builtins.d.ts +14 -0
- package/dist/parser/evaluator-builtins.d.ts.map +1 -0
- package/dist/parser/evaluator-builtins.js +258 -0
- package/dist/parser/evaluator-builtins.js.map +1 -0
- package/dist/parser/evaluator.d.ts +38 -0
- package/dist/parser/evaluator.d.ts.map +1 -0
- package/dist/parser/evaluator.js +257 -0
- package/dist/parser/evaluator.js.map +1 -0
- package/dist/parser/expression.d.ts +20 -0
- package/dist/parser/expression.d.ts.map +1 -0
- package/dist/parser/expression.js +128 -0
- package/dist/parser/expression.js.map +1 -0
- package/dist/parser/tokenizer.d.ts +26 -0
- package/dist/parser/tokenizer.d.ts.map +1 -0
- package/dist/parser/tokenizer.js +162 -0
- package/dist/parser/tokenizer.js.map +1 -0
- package/dist/parser/validator.d.ts +13 -0
- package/dist/parser/validator.d.ts.map +1 -0
- package/dist/parser/validator.js +383 -0
- package/dist/parser/validator.js.map +1 -0
- package/dist/parser/workflow.d.ts +30 -0
- package/dist/parser/workflow.d.ts.map +1 -0
- package/dist/parser/workflow.js +152 -0
- package/dist/parser/workflow.js.map +1 -0
- package/dist/scheduler/dependency.d.ts +37 -0
- package/dist/scheduler/dependency.d.ts.map +1 -0
- package/dist/scheduler/dependency.js +133 -0
- package/dist/scheduler/dependency.js.map +1 -0
- package/dist/scheduler/job-policy.d.ts +23 -0
- package/dist/scheduler/job-policy.d.ts.map +1 -0
- package/dist/scheduler/job-policy.js +117 -0
- package/dist/scheduler/job-policy.js.map +1 -0
- package/dist/scheduler/job.d.ts +151 -0
- package/dist/scheduler/job.d.ts.map +1 -0
- package/dist/scheduler/job.js +348 -0
- package/dist/scheduler/job.js.map +1 -0
- package/dist/scheduler/step-output-parser.d.ts +14 -0
- package/dist/scheduler/step-output-parser.d.ts.map +1 -0
- package/dist/scheduler/step-output-parser.js +70 -0
- package/dist/scheduler/step-output-parser.js.map +1 -0
- package/dist/scheduler/step.d.ts +74 -0
- package/dist/scheduler/step.d.ts.map +1 -0
- package/dist/scheduler/step.js +387 -0
- package/dist/scheduler/step.js.map +1 -0
- package/dist/types.d.ts +499 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/workflow-models.d.ts +504 -0
- package/dist/workflow-models.d.ts.map +1 -0
- package/dist/workflow-models.js +5 -0
- package/dist/workflow-models.js.map +1 -0
- package/package.json +29 -0
- package/src/__tests__/context/env.test.ts +38 -0
- package/src/__tests__/index.test.ts +55 -0
- package/src/__tests__/parser/expression.test.ts +151 -0
- package/src/__tests__/parser/workflow.test.ts +151 -0
- package/src/__tests__/scheduler/dependency.test.ts +51 -0
- package/src/__tests__/scheduler/job-context.test.ts +119 -0
- package/src/__tests__/scheduler/job-policy.test.ts +195 -0
- package/src/__tests__/scheduler/job.test.ts +1014 -0
- package/src/__tests__/scheduler/listener-registry.test.ts +95 -0
- package/src/__tests__/scheduler/step.test.ts +258 -0
- package/src/__tests__/scheduler/steps-context.test.ts +49 -0
- package/src/constants.ts +61 -0
- package/src/context.ts +153 -0
- package/src/index.ts +64 -0
- package/src/parser/evaluator-builtins.ts +315 -0
- package/src/parser/evaluator.ts +333 -0
- package/src/parser/expression.ts +154 -0
- package/src/parser/tokenizer.ts +191 -0
- package/src/parser/validator.ts +444 -0
- package/src/parser/workflow.ts +176 -0
- package/src/scheduler/dependency.ts +180 -0
- package/src/scheduler/job-policy.ts +198 -0
- package/src/scheduler/job.ts +523 -0
- package/src/scheduler/step-output-parser.ts +94 -0
- package/src/scheduler/step.ts +543 -0
- package/src/workflow-models.ts +593 -0
- package/tsconfig.json +14 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { normalizeNeedsInput } from './job.js';
|
|
2
|
+
/**
|
|
3
|
+
* Error thrown when dependency resolution fails
|
|
4
|
+
*/
|
|
5
|
+
export class DependencyError extends Error {
|
|
6
|
+
jobs;
|
|
7
|
+
constructor(message, jobs) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.jobs = jobs;
|
|
10
|
+
this.name = 'DependencyError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function getOrCreateGraphSet(map, key) {
|
|
14
|
+
const existing = map.get(key);
|
|
15
|
+
if (existing) {
|
|
16
|
+
return existing;
|
|
17
|
+
}
|
|
18
|
+
const created = new Set();
|
|
19
|
+
map.set(key, created);
|
|
20
|
+
return created;
|
|
21
|
+
}
|
|
22
|
+
const EMPTY_JOB_SET = new Set();
|
|
23
|
+
/**
|
|
24
|
+
* Build dependency graph from workflow
|
|
25
|
+
*/
|
|
26
|
+
export function buildDependencyGraph(workflow) {
|
|
27
|
+
const nodes = new Set();
|
|
28
|
+
const edges = new Map();
|
|
29
|
+
const reverseEdges = new Map();
|
|
30
|
+
// Initialize all nodes
|
|
31
|
+
for (const jobId of Object.keys(workflow.jobs)) {
|
|
32
|
+
nodes.add(jobId);
|
|
33
|
+
edges.set(jobId, new Set());
|
|
34
|
+
reverseEdges.set(jobId, new Set());
|
|
35
|
+
}
|
|
36
|
+
// Build edges from 'needs' declarations
|
|
37
|
+
for (const [jobId, job] of Object.entries(workflow.jobs)) {
|
|
38
|
+
const needs = normalizeNeedsInput(job.needs);
|
|
39
|
+
for (const need of needs) {
|
|
40
|
+
if (!nodes.has(need)) {
|
|
41
|
+
throw new DependencyError(`Job "${jobId}" depends on unknown job "${need}"`, [jobId, need]);
|
|
42
|
+
}
|
|
43
|
+
getOrCreateGraphSet(edges, jobId).add(need);
|
|
44
|
+
getOrCreateGraphSet(reverseEdges, need).add(jobId);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { nodes, edges, reverseEdges };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Detect circular dependencies in graph
|
|
51
|
+
* Returns the cycle path if found, empty array otherwise
|
|
52
|
+
*/
|
|
53
|
+
export function detectCycle(graph) {
|
|
54
|
+
const visited = new Set();
|
|
55
|
+
const recursionStack = new Set();
|
|
56
|
+
const path = [];
|
|
57
|
+
function dfs(node) {
|
|
58
|
+
visited.add(node);
|
|
59
|
+
recursionStack.add(node);
|
|
60
|
+
path.push(node);
|
|
61
|
+
const dependencies = graph.edges.get(node) || EMPTY_JOB_SET;
|
|
62
|
+
for (const dep of dependencies) {
|
|
63
|
+
if (!visited.has(dep)) {
|
|
64
|
+
const cycle = dfs(dep);
|
|
65
|
+
if (cycle)
|
|
66
|
+
return cycle;
|
|
67
|
+
}
|
|
68
|
+
else if (recursionStack.has(dep)) {
|
|
69
|
+
// Found cycle - return the cycle path
|
|
70
|
+
const cycleStart = path.indexOf(dep);
|
|
71
|
+
return [...path.slice(cycleStart), dep];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
path.pop();
|
|
75
|
+
recursionStack.delete(node);
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
for (const node of graph.nodes) {
|
|
79
|
+
if (!visited.has(node)) {
|
|
80
|
+
const cycle = dfs(node);
|
|
81
|
+
if (cycle)
|
|
82
|
+
return cycle;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
function assertAcyclic(graph) {
|
|
88
|
+
const cycle = detectCycle(graph);
|
|
89
|
+
if (cycle.length > 0) {
|
|
90
|
+
throw new DependencyError(`Circular dependency detected: ${cycle.join(' -> ')}`, cycle);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Group jobs into parallel execution phases
|
|
95
|
+
* Jobs in the same phase can run in parallel
|
|
96
|
+
*/
|
|
97
|
+
export function groupIntoPhases(graph) {
|
|
98
|
+
// Check for cycles first
|
|
99
|
+
assertAcyclic(graph);
|
|
100
|
+
const phases = [];
|
|
101
|
+
const assigned = new Set();
|
|
102
|
+
while (assigned.size < graph.nodes.size) {
|
|
103
|
+
const phase = [];
|
|
104
|
+
for (const node of graph.nodes) {
|
|
105
|
+
if (assigned.has(node))
|
|
106
|
+
continue;
|
|
107
|
+
// Check if all dependencies are assigned
|
|
108
|
+
const dependencies = graph.edges.get(node) || EMPTY_JOB_SET;
|
|
109
|
+
let canAdd = true;
|
|
110
|
+
for (const dep of dependencies) {
|
|
111
|
+
if (!assigned.has(dep)) {
|
|
112
|
+
canAdd = false;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (canAdd) {
|
|
117
|
+
phase.push(node);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (phase.length === 0) {
|
|
121
|
+
// This should not happen if cycle detection works
|
|
122
|
+
throw new DependencyError('Unable to resolve dependencies');
|
|
123
|
+
}
|
|
124
|
+
// Sort phase for deterministic order
|
|
125
|
+
phase.sort();
|
|
126
|
+
phases.push(phase);
|
|
127
|
+
for (const node of phase) {
|
|
128
|
+
assigned.add(node);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return phases;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=dependency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency.js","sourceRoot":"","sources":["../../src/scheduler/dependency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Job policy helpers — context builders, result factories, and step-control logic.
|
|
3
|
+
*/
|
|
4
|
+
import type { JobResult, ExecutionContext, Conclusion, Step, StepResult } from '../workflow-models.js';
|
|
5
|
+
export interface JobExecutionState {
|
|
6
|
+
failed: boolean;
|
|
7
|
+
cancelled: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface StepControl {
|
|
10
|
+
shouldStopJob: boolean;
|
|
11
|
+
shouldMarkJobFailed: boolean;
|
|
12
|
+
shouldCancelWorkflow: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function buildNeedsContext(needs: string[], results: ReadonlyMap<string, JobResult>): ExecutionContext['needs'];
|
|
15
|
+
export declare function buildJobExecutionContext(context: ExecutionContext, needsContext: ExecutionContext['needs'], envSources: Array<Record<string, string> | undefined>): ExecutionContext;
|
|
16
|
+
export declare function buildStepsContext(stepResults: StepResult[]): ExecutionContext['steps'];
|
|
17
|
+
export declare function createCompletedJobResult(id: string, name: string | undefined, conclusion: Conclusion): JobResult;
|
|
18
|
+
export declare function createInProgressJobResult(id: string, name: string | undefined): JobResult;
|
|
19
|
+
export declare function classifyStepControl(step: Step, result: StepResult, failFast: boolean): StepControl;
|
|
20
|
+
export declare function collectStepOutputs(steps: StepResult[]): Record<string, string>;
|
|
21
|
+
export declare function finalizeJobResult(result: JobResult, executionState: JobExecutionState): void;
|
|
22
|
+
export declare function getDependencySkipReason(needs: string[], results: ReadonlyMap<string, JobResult>): string | null;
|
|
23
|
+
//# sourceMappingURL=job-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-policy.d.ts","sourceRoot":"","sources":["../../src/scheduler/job-policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,IAAI,EACJ,UAAU,EACX,MAAM,uBAAuB,CAAC;AAI/B,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAiBD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,GACtC,gBAAgB,CAAC,OAAO,CAAC,CAgB3B;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACvC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,GACpD,gBAAgB,CAgBlB;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAetF;AAID,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,UAAU,EAAE,UAAU,GACrB,SAAS,CASX;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,SAAS,CASX;AAID,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,OAAO,GAChB,WAAW,CAOb;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAW9E;AAID,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,iBAAiB,GAChC,IAAI,CASN;AAID,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,GACtC,MAAM,GAAG,IAAI,CAgBf"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
function normalizeNeedsResult(conclusion) {
|
|
2
|
+
if (conclusion === 'failure' ||
|
|
3
|
+
conclusion === 'cancelled' ||
|
|
4
|
+
conclusion === 'skipped') {
|
|
5
|
+
return conclusion;
|
|
6
|
+
}
|
|
7
|
+
return 'success';
|
|
8
|
+
}
|
|
9
|
+
export function buildNeedsContext(needs, results) {
|
|
10
|
+
const needsContext = {};
|
|
11
|
+
for (const need of needs) {
|
|
12
|
+
const needResult = results.get(need);
|
|
13
|
+
if (!needResult) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
needsContext[need] = {
|
|
17
|
+
outputs: { ...needResult.outputs },
|
|
18
|
+
result: normalizeNeedsResult(needResult.conclusion),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return needsContext;
|
|
22
|
+
}
|
|
23
|
+
export function buildJobExecutionContext(context, needsContext, envSources) {
|
|
24
|
+
const env = Object.assign({}, ...envSources.filter((source) => Boolean(source)));
|
|
25
|
+
return {
|
|
26
|
+
...context,
|
|
27
|
+
env,
|
|
28
|
+
needs: needsContext,
|
|
29
|
+
job: {
|
|
30
|
+
...context.job,
|
|
31
|
+
status: 'success',
|
|
32
|
+
},
|
|
33
|
+
steps: {},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function buildStepsContext(stepResults) {
|
|
37
|
+
const stepsContext = {};
|
|
38
|
+
for (const stepResult of stepResults) {
|
|
39
|
+
if (stepResult.id) {
|
|
40
|
+
const conclusion = stepResult.conclusion || 'success';
|
|
41
|
+
stepsContext[stepResult.id] = {
|
|
42
|
+
outputs: { ...stepResult.outputs },
|
|
43
|
+
outcome: conclusion,
|
|
44
|
+
conclusion,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return stepsContext;
|
|
49
|
+
}
|
|
50
|
+
// --- Result factories ---
|
|
51
|
+
export function createCompletedJobResult(id, name, conclusion) {
|
|
52
|
+
return {
|
|
53
|
+
id,
|
|
54
|
+
name,
|
|
55
|
+
steps: [],
|
|
56
|
+
outputs: {},
|
|
57
|
+
status: 'completed',
|
|
58
|
+
conclusion,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export function createInProgressJobResult(id, name) {
|
|
62
|
+
return {
|
|
63
|
+
id,
|
|
64
|
+
name,
|
|
65
|
+
steps: [],
|
|
66
|
+
outputs: {},
|
|
67
|
+
status: 'in_progress',
|
|
68
|
+
startedAt: new Date(),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// --- Step control classification ---
|
|
72
|
+
export function classifyStepControl(step, result, failFast) {
|
|
73
|
+
const shouldStopJob = result.conclusion === 'failure' && !step['continue-on-error'];
|
|
74
|
+
return {
|
|
75
|
+
shouldStopJob,
|
|
76
|
+
shouldMarkJobFailed: shouldStopJob,
|
|
77
|
+
shouldCancelWorkflow: shouldStopJob && failFast,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// --- Output collection ---
|
|
81
|
+
export function collectStepOutputs(steps) {
|
|
82
|
+
const outputs = {};
|
|
83
|
+
for (const stepResult of steps) {
|
|
84
|
+
if (!stepResult.id) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
Object.assign(outputs, stepResult.outputs);
|
|
88
|
+
}
|
|
89
|
+
return outputs;
|
|
90
|
+
}
|
|
91
|
+
// --- Job finalization ---
|
|
92
|
+
export function finalizeJobResult(result, executionState) {
|
|
93
|
+
result.status = 'completed';
|
|
94
|
+
result.conclusion = executionState.cancelled
|
|
95
|
+
? 'cancelled'
|
|
96
|
+
: executionState.failed
|
|
97
|
+
? 'failure'
|
|
98
|
+
: 'success';
|
|
99
|
+
result.completedAt = new Date();
|
|
100
|
+
result.outputs = collectStepOutputs(result.steps);
|
|
101
|
+
}
|
|
102
|
+
// --- Dependency skip detection ---
|
|
103
|
+
export function getDependencySkipReason(needs, results) {
|
|
104
|
+
for (const need of needs) {
|
|
105
|
+
const dependencyResult = results.get(need);
|
|
106
|
+
if (!dependencyResult) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (dependencyResult.conclusion === 'success') {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const dependencyOutcome = dependencyResult.conclusion ?? 'did not succeed';
|
|
113
|
+
return `Dependency "${need}" ${dependencyOutcome}`;
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=job-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-policy.js","sourceRoot":"","sources":["../../src/scheduler/job-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Job scheduler and execution management
|
|
3
|
+
*/
|
|
4
|
+
import type { Workflow, Job, JobResult, ExecutionPlan, ExecutionContext, Conclusion } from '../workflow-models.js';
|
|
5
|
+
import { type StepRunnerOptions } from './step.js';
|
|
6
|
+
export declare function normalizeNeedsInput(needs: unknown): string[];
|
|
7
|
+
/**
|
|
8
|
+
* Job scheduler options
|
|
9
|
+
*/
|
|
10
|
+
export interface JobSchedulerOptions {
|
|
11
|
+
/** Maximum parallel jobs (0 = unlimited) */
|
|
12
|
+
maxParallel?: number;
|
|
13
|
+
/** Fail fast - cancel remaining jobs on first failure */
|
|
14
|
+
failFast?: boolean;
|
|
15
|
+
/** Step runner options */
|
|
16
|
+
stepRunner?: StepRunnerOptions;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Job scheduler event types
|
|
20
|
+
*/
|
|
21
|
+
export type JobSchedulerEvent = {
|
|
22
|
+
type: 'job:start';
|
|
23
|
+
jobId: string;
|
|
24
|
+
job: Job;
|
|
25
|
+
} | {
|
|
26
|
+
type: 'job:complete';
|
|
27
|
+
jobId: string;
|
|
28
|
+
result: JobResult;
|
|
29
|
+
} | {
|
|
30
|
+
type: 'job:skip';
|
|
31
|
+
jobId: string;
|
|
32
|
+
reason: string;
|
|
33
|
+
result: JobResult;
|
|
34
|
+
} | {
|
|
35
|
+
type: 'phase:start';
|
|
36
|
+
phase: number;
|
|
37
|
+
jobs: string[];
|
|
38
|
+
} | {
|
|
39
|
+
type: 'phase:complete';
|
|
40
|
+
phase: number;
|
|
41
|
+
} | {
|
|
42
|
+
type: 'workflow:start';
|
|
43
|
+
phases: string[][];
|
|
44
|
+
} | {
|
|
45
|
+
type: 'workflow:complete';
|
|
46
|
+
results: Record<string, JobResult>;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Job scheduler event listener
|
|
50
|
+
*/
|
|
51
|
+
export type JobSchedulerListener = (event: JobSchedulerEvent) => void;
|
|
52
|
+
/**
|
|
53
|
+
* Job scheduler for workflow execution
|
|
54
|
+
*/
|
|
55
|
+
export declare class JobScheduler {
|
|
56
|
+
private workflow;
|
|
57
|
+
private options;
|
|
58
|
+
private graph;
|
|
59
|
+
private results;
|
|
60
|
+
private listeners;
|
|
61
|
+
private cancelled;
|
|
62
|
+
private running;
|
|
63
|
+
private stepRunner;
|
|
64
|
+
constructor(workflow: Workflow, options?: JobSchedulerOptions);
|
|
65
|
+
/**
|
|
66
|
+
* Add event listener. Returns an unsubscribe function.
|
|
67
|
+
*/
|
|
68
|
+
on(listener: JobSchedulerListener): () => void;
|
|
69
|
+
/**
|
|
70
|
+
* Emit event to all listeners
|
|
71
|
+
*/
|
|
72
|
+
private emit;
|
|
73
|
+
/**
|
|
74
|
+
* Cancel workflow execution
|
|
75
|
+
*/
|
|
76
|
+
cancel(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Reset scheduler runtime state for a new run.
|
|
79
|
+
* Keeps listeners and configuration intact.
|
|
80
|
+
*/
|
|
81
|
+
private reset;
|
|
82
|
+
/**
|
|
83
|
+
* Create execution plan
|
|
84
|
+
*/
|
|
85
|
+
createPlan(): ExecutionPlan;
|
|
86
|
+
/**
|
|
87
|
+
* Run all jobs in workflow
|
|
88
|
+
*/
|
|
89
|
+
run(context: ExecutionContext): Promise<Record<string, JobResult>>;
|
|
90
|
+
/**
|
|
91
|
+
* Run jobs in a single phase
|
|
92
|
+
*/
|
|
93
|
+
private runPhase;
|
|
94
|
+
/**
|
|
95
|
+
* Mark pending chunks as cancelled from the specified index.
|
|
96
|
+
*/
|
|
97
|
+
private markPendingChunksCancelled;
|
|
98
|
+
/**
|
|
99
|
+
* Mark jobs as cancelled if they don't already have a result.
|
|
100
|
+
*/
|
|
101
|
+
private markJobsCancelled;
|
|
102
|
+
/**
|
|
103
|
+
* Run a single job
|
|
104
|
+
*/
|
|
105
|
+
private runJob;
|
|
106
|
+
/**
|
|
107
|
+
* Resolve runJob short-circuit result when cancellation state allows bypassing execution.
|
|
108
|
+
*/
|
|
109
|
+
private getCancellationShortCircuitResult;
|
|
110
|
+
/**
|
|
111
|
+
* Execute all steps for a job and return the final execution state.
|
|
112
|
+
*/
|
|
113
|
+
private executeJobSteps;
|
|
114
|
+
/**
|
|
115
|
+
* Finalize and record a completed job result.
|
|
116
|
+
*/
|
|
117
|
+
private finalizeAndStoreJobResult;
|
|
118
|
+
/**
|
|
119
|
+
* Create, store, and emit skip result for a job.
|
|
120
|
+
*/
|
|
121
|
+
private skipJob;
|
|
122
|
+
/**
|
|
123
|
+
* Store terminal job result and emit terminal job events.
|
|
124
|
+
*/
|
|
125
|
+
private completeTerminalJob;
|
|
126
|
+
/**
|
|
127
|
+
* Emit terminal observation events for a job.
|
|
128
|
+
*/
|
|
129
|
+
private emitTerminalObservationEvents;
|
|
130
|
+
/**
|
|
131
|
+
* Build execution context with needs data
|
|
132
|
+
*/
|
|
133
|
+
private buildJobContext;
|
|
134
|
+
/**
|
|
135
|
+
* Build step context with previous step outputs
|
|
136
|
+
*/
|
|
137
|
+
private buildStepContext;
|
|
138
|
+
/**
|
|
139
|
+
* Get current results
|
|
140
|
+
*/
|
|
141
|
+
getResults(): Record<string, JobResult>;
|
|
142
|
+
/**
|
|
143
|
+
* Get overall conclusion
|
|
144
|
+
*/
|
|
145
|
+
getConclusion(): Conclusion;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Create execution plan for workflow
|
|
149
|
+
*/
|
|
150
|
+
export declare function createExecutionPlan(workflow: Workflow): ExecutionPlan;
|
|
151
|
+
//# sourceMappingURL=job.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../src/scheduler/job.ts"],"names":[],"mappings":"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"}
|