@trebired/git-host 3.0.0 → 3.1.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/CHANGELOG.md +7 -0
- package/README.md +1 -1
- package/dist/api/forge/actions/filters.d.ts +10 -0
- package/dist/api/forge/actions/filters.d.ts.map +1 -0
- package/dist/api/forge/actions/filters.js +63 -0
- package/dist/api/forge/actions/filters.js.map +1 -0
- package/dist/api/forge/actions/run.d.ts +8 -0
- package/dist/api/forge/actions/run.d.ts.map +1 -0
- package/dist/api/forge/actions/run.js +129 -0
- package/dist/api/forge/actions/run.js.map +1 -0
- package/dist/api/forge/actions.d.ts +3 -12
- package/dist/api/forge/actions.d.ts.map +1 -1
- package/dist/api/forge/actions.js +2 -216
- package/dist/api/forge/actions.js.map +1 -1
- package/dist/api/handler/response.d.ts.map +1 -1
- package/dist/api/handler/response.js +55 -1
- package/dist/api/handler/response.js.map +1 -1
- package/dist/core/actions/expressions/read.d.ts +7 -0
- package/dist/core/actions/expressions/read.d.ts.map +1 -0
- package/dist/core/actions/expressions/read.js +148 -0
- package/dist/core/actions/expressions/read.js.map +1 -0
- package/dist/core/actions/expressions/tokenize.d.ts +4 -0
- package/dist/core/actions/expressions/tokenize.d.ts.map +1 -0
- package/dist/core/actions/expressions/tokenize.js +112 -0
- package/dist/core/actions/expressions/tokenize.js.map +1 -0
- package/dist/core/actions/expressions/types.d.ts +38 -0
- package/dist/core/actions/expressions/types.d.ts.map +1 -0
- package/dist/core/actions/expressions/types.js +2 -0
- package/dist/core/actions/expressions/types.js.map +1 -0
- package/dist/core/actions/expressions.d.ts +2 -9
- package/dist/core/actions/expressions.d.ts.map +1 -1
- package/dist/core/actions/expressions.js +2 -256
- package/dist/core/actions/expressions.js.map +1 -1
- package/dist/core/actions/normalize/finalize.d.ts +7 -0
- package/dist/core/actions/normalize/finalize.d.ts.map +1 -0
- package/dist/core/actions/normalize/finalize.js +70 -0
- package/dist/core/actions/normalize/finalize.js.map +1 -0
- package/dist/core/actions/normalize/shared.d.ts +19 -0
- package/dist/core/actions/normalize/shared.d.ts.map +1 -0
- package/dist/core/actions/normalize/shared.js +289 -0
- package/dist/core/actions/normalize/shared.js.map +1 -0
- package/dist/core/actions/normalize.d.ts +1 -3
- package/dist/core/actions/normalize.d.ts.map +1 -1
- package/dist/core/actions/normalize.js +2 -354
- package/dist/core/actions/normalize.js.map +1 -1
- package/dist/core/actions/release_assets.d.ts.map +1 -1
- package/dist/core/actions/release_assets.js.map +1 -1
- package/dist/core/actions/runner/launch.d.ts.map +1 -1
- package/dist/core/actions/runner/launch.js +12 -8
- package/dist/core/actions/runner/launch.js.map +1 -1
- package/dist/core/archive/commit.d.ts +6 -0
- package/dist/core/archive/commit.d.ts.map +1 -0
- package/dist/core/archive/commit.js +34 -0
- package/dist/core/archive/commit.js.map +1 -0
- package/dist/core/archive/context.d.ts +32 -0
- package/dist/core/archive/context.d.ts.map +1 -0
- package/dist/core/archive/context.js +61 -0
- package/dist/core/archive/context.js.map +1 -0
- package/dist/core/archive/generation.d.ts +11 -0
- package/dist/core/archive/generation.d.ts.map +1 -0
- package/dist/core/archive/generation.js +62 -0
- package/dist/core/archive/generation.js.map +1 -0
- package/dist/core/archive/links.d.ts +5 -0
- package/dist/core/archive/links.d.ts.map +1 -0
- package/dist/core/archive/links.js +62 -0
- package/dist/core/archive/links.js.map +1 -0
- package/dist/core/archive/open.d.ts +15 -0
- package/dist/core/archive/open.d.ts.map +1 -0
- package/dist/core/archive/open.js +159 -0
- package/dist/core/archive/open.js.map +1 -0
- package/dist/core/archive/read.d.ts +19 -0
- package/dist/core/archive/read.d.ts.map +1 -0
- package/dist/core/archive/read.js +62 -0
- package/dist/core/archive/read.js.map +1 -0
- package/dist/core/archive/resolve.d.ts +8 -0
- package/dist/core/archive/resolve.d.ts.map +1 -0
- package/dist/core/archive/resolve.js +67 -0
- package/dist/core/archive/resolve.js.map +1 -0
- package/dist/core/archive/shared.d.ts +50 -0
- package/dist/core/archive/shared.d.ts.map +1 -0
- package/dist/core/archive/shared.js +119 -0
- package/dist/core/archive/shared.js.map +1 -0
- package/dist/core/archive.d.ts +2 -18
- package/dist/core/archive.d.ts.map +1 -1
- package/dist/core/archive.js +16 -556
- package/dist/core/archive.js.map +1 -1
- package/dist/core/create/git/forge/base_methods.d.ts +5 -0
- package/dist/core/create/git/forge/base_methods.d.ts.map +1 -0
- package/dist/core/create/git/forge/base_methods.js +59 -0
- package/dist/core/create/git/forge/base_methods.js.map +1 -0
- package/dist/core/create/git/forge/context.d.ts +38 -0
- package/dist/core/create/git/forge/context.d.ts.map +1 -0
- package/dist/core/create/git/forge/context.js +174 -0
- package/dist/core/create/git/forge/context.js.map +1 -0
- package/dist/core/create/git/forge/fork_methods.d.ts +5 -0
- package/dist/core/create/git/forge/fork_methods.d.ts.map +1 -0
- package/dist/core/create/git/forge/fork_methods.js +133 -0
- package/dist/core/create/git/forge/fork_methods.js.map +1 -0
- package/dist/core/create/git/forge/release_methods.d.ts +5 -0
- package/dist/core/create/git/forge/release_methods.d.ts.map +1 -0
- package/dist/core/create/git/forge/release_methods.js +116 -0
- package/dist/core/create/git/forge/release_methods.js.map +1 -0
- package/dist/core/create/git/forge/shared.d.ts +9 -0
- package/dist/core/create/git/forge/shared.d.ts.map +1 -0
- package/dist/core/create/git/forge/shared.js +80 -0
- package/dist/core/create/git/forge/shared.js.map +1 -0
- package/dist/core/create/git/forge/social_methods.d.ts +5 -0
- package/dist/core/create/git/forge/social_methods.d.ts.map +1 -0
- package/dist/core/create/git/forge/social_methods.js +31 -0
- package/dist/core/create/git/forge/social_methods.js.map +1 -0
- package/dist/core/create/git/forge.d.ts.map +1 -1
- package/dist/core/create/git/forge.js +10 -594
- package/dist/core/create/git/forge.js.map +1 -1
- package/dist/core/create/git/host.d.ts.map +1 -1
- package/dist/core/create/git/host.js +139 -114
- package/dist/core/create/git/host.js.map +1 -1
- package/dist/core/create_git_host/remote_methods.d.ts.map +1 -1
- package/dist/core/create_git_host/remote_methods.js +92 -97
- package/dist/core/create_git_host/remote_methods.js.map +1 -1
- package/dist/core/forge_actions/job/release_asset.d.ts +17 -0
- package/dist/core/forge_actions/job/release_asset.d.ts.map +1 -0
- package/dist/core/forge_actions/job/release_asset.js +62 -0
- package/dist/core/forge_actions/job/release_asset.js.map +1 -0
- package/dist/core/forge_actions/job/steps.d.ts +37 -0
- package/dist/core/forge_actions/job/steps.d.ts.map +1 -0
- package/dist/core/forge_actions/job/steps.js +228 -0
- package/dist/core/forge_actions/job/steps.js.map +1 -0
- package/dist/core/forge_actions/runtime/api.d.ts +26 -0
- package/dist/core/forge_actions/runtime/api.d.ts.map +1 -0
- package/dist/core/forge_actions/runtime/api.js +210 -0
- package/dist/core/forge_actions/runtime/api.js.map +1 -0
- package/dist/core/forge_actions/runtime/engine.d.ts +25 -0
- package/dist/core/forge_actions/runtime/engine.d.ts.map +1 -0
- package/dist/core/forge_actions/runtime/engine.js +28 -0
- package/dist/core/forge_actions/runtime/engine.js.map +1 -0
- package/dist/core/forge_actions/runtime/job/execute.d.ts +19 -0
- package/dist/core/forge_actions/runtime/job/execute.d.ts.map +1 -0
- package/dist/core/forge_actions/runtime/job/execute.js +191 -0
- package/dist/core/forge_actions/runtime/job/execute.js.map +1 -0
- package/dist/core/forge_actions/runtime/job/step/execute.d.ts +7 -0
- package/dist/core/forge_actions/runtime/job/step/execute.d.ts.map +1 -0
- package/dist/core/forge_actions/runtime/job/step/execute.js +176 -0
- package/dist/core/forge_actions/runtime/job/step/execute.js.map +1 -0
- package/dist/core/forge_actions/runtime/queue.d.ts +11 -0
- package/dist/core/forge_actions/runtime/queue.d.ts.map +1 -0
- package/dist/core/forge_actions/runtime/queue.js +144 -0
- package/dist/core/forge_actions/runtime/queue.js.map +1 -0
- package/dist/core/forge_actions/runtime/run/execute.d.ts +9 -0
- package/dist/core/forge_actions/runtime/run/execute.d.ts.map +1 -0
- package/dist/core/forge_actions/runtime/run/execute.js +191 -0
- package/dist/core/forge_actions/runtime/run/execute.js.map +1 -0
- package/dist/core/forge_actions/runtime/types.d.ts +24 -0
- package/dist/core/forge_actions/runtime/types.d.ts.map +1 -0
- package/dist/core/forge_actions/runtime/types.js +2 -0
- package/dist/core/forge_actions/runtime/types.js.map +1 -0
- package/dist/core/forge_actions/runtime_support.d.ts +57 -0
- package/dist/core/forge_actions/runtime_support.d.ts.map +1 -0
- package/dist/core/forge_actions/runtime_support.js +276 -0
- package/dist/core/forge_actions/runtime_support.js.map +1 -0
- package/dist/core/forge_actions/shared.d.ts +92 -0
- package/dist/core/forge_actions/shared.d.ts.map +1 -0
- package/dist/core/forge_actions/shared.js +204 -0
- package/dist/core/forge_actions/shared.js.map +1 -0
- package/dist/core/forge_actions.d.ts +17 -24
- package/dist/core/forge_actions.d.ts.map +1 -1
- package/dist/core/forge_actions.js +33 -1479
- package/dist/core/forge_actions.js.map +1 -1
- package/dist/core/git_forge/storage_memory/actions.d.ts +5 -0
- package/dist/core/git_forge/storage_memory/actions.d.ts.map +1 -0
- package/dist/core/git_forge/storage_memory/actions.js +155 -0
- package/dist/core/git_forge/storage_memory/actions.js.map +1 -0
- package/dist/core/git_forge/storage_memory/adapter.d.ts +4 -0
- package/dist/core/git_forge/storage_memory/adapter.d.ts.map +1 -0
- package/dist/core/git_forge/storage_memory/adapter.js +118 -0
- package/dist/core/git_forge/storage_memory/adapter.js.map +1 -0
- package/dist/core/git_forge/storage_memory/state.d.ts +27 -0
- package/dist/core/git_forge/storage_memory/state.d.ts.map +1 -0
- package/dist/core/git_forge/storage_memory/state.js +53 -0
- package/dist/core/git_forge/storage_memory/state.js.map +1 -0
- package/dist/core/git_forge/storage_memory.d.ts +1 -3
- package/dist/core/git_forge/storage_memory.d.ts.map +1 -1
- package/dist/core/git_forge/storage_memory.js +1 -352
- package/dist/core/git_forge/storage_memory.js.map +1 -1
- package/dist/core/inspect/history.d.ts +13 -0
- package/dist/core/inspect/history.d.ts.map +1 -0
- package/dist/core/inspect/history.js +176 -0
- package/dist/core/inspect/history.js.map +1 -0
- package/dist/core/inspect/linguist.d.ts +12 -0
- package/dist/core/inspect/linguist.d.ts.map +1 -0
- package/dist/core/inspect/linguist.js +128 -0
- package/dist/core/inspect/linguist.js.map +1 -0
- package/dist/core/inspect/search_archive.d.ts +16 -0
- package/dist/core/inspect/search_archive.d.ts.map +1 -0
- package/dist/core/inspect/search_archive.js +88 -0
- package/dist/core/inspect/search_archive.js.map +1 -0
- package/dist/core/inspect/shared.d.ts +5 -0
- package/dist/core/inspect/shared.d.ts.map +1 -0
- package/dist/core/inspect/shared.js +47 -0
- package/dist/core/inspect/shared.js.map +1 -0
- package/dist/core/inspect/tree_blob.d.ts +16 -0
- package/dist/core/inspect/tree_blob.d.ts.map +1 -0
- package/dist/core/inspect/tree_blob.js +80 -0
- package/dist/core/inspect/tree_blob.js.map +1 -0
- package/dist/core/inspect.d.ts +3 -46
- package/dist/core/inspect.d.ts.map +1 -1
- package/dist/core/inspect.js +3 -546
- package/dist/core/inspect.js.map +1 -1
- package/dist/core/inspection/analysis.d.ts +4 -0
- package/dist/core/inspection/analysis.d.ts.map +1 -0
- package/dist/core/inspection/analysis.js +25 -0
- package/dist/core/inspection/analysis.js.map +1 -0
- package/dist/core/inspection/shared.d.ts +18 -0
- package/dist/core/inspection/shared.d.ts.map +1 -0
- package/dist/core/inspection/shared.js +112 -0
- package/dist/core/inspection/shared.js.map +1 -0
- package/dist/core/inspection/snapshots.d.ts +6 -0
- package/dist/core/inspection/snapshots.d.ts.map +1 -0
- package/dist/core/inspection/snapshots.js +270 -0
- package/dist/core/inspection/snapshots.js.map +1 -0
- package/dist/core/inspection/target.d.ts +4 -0
- package/dist/core/inspection/target.d.ts.map +1 -0
- package/dist/core/inspection/target.js +97 -0
- package/dist/core/inspection/target.js.map +1 -0
- package/dist/core/inspection/tree.d.ts +6 -0
- package/dist/core/inspection/tree.d.ts.map +1 -0
- package/dist/core/inspection/tree.js +103 -0
- package/dist/core/inspection/tree.js.map +1 -0
- package/dist/core/inspection.d.ts +6 -10
- package/dist/core/inspection.d.ts.map +1 -1
- package/dist/core/inspection.js +6 -592
- package/dist/core/inspection.js.map +1 -1
- package/dist/http/handler.d.ts.map +1 -1
- package/dist/http/handler.js +157 -133
- package/dist/http/handler.js.map +1 -1
- package/dist/ssh/server.d.ts.map +1 -1
- package/dist/ssh/server.js +171 -243
- package/dist/ssh/server.js.map +1 -1
- package/dist/types/forge/workflows/actions.d.ts +70 -0
- package/dist/types/forge/workflows/actions.d.ts.map +1 -0
- package/dist/types/forge/workflows/actions.js +3 -0
- package/dist/types/forge/workflows/actions.js.map +1 -0
- package/dist/types/forge/workflows/definition.d.ts +115 -0
- package/dist/types/forge/workflows/definition.d.ts.map +1 -0
- package/dist/types/forge/workflows/definition.js +2 -0
- package/dist/types/forge/workflows/definition.js.map +1 -0
- package/dist/types/forge/workflows/runs.d.ts +184 -0
- package/dist/types/forge/workflows/runs.d.ts.map +1 -0
- package/dist/types/forge/workflows/runs.js +2 -0
- package/dist/types/forge/workflows/runs.js.map +1 -0
- package/dist/types/forge/workflows.d.ts +3 -360
- package/dist/types/forge/workflows.d.ts.map +1 -1
- package/{bin → native}/git-host-actions-runner-darwin-arm64 +0 -0
- package/{bin → native}/git-host-actions-runner-darwin-x64 +0 -0
- package/{bin → native}/git-host-actions-runner-linux-arm64-gnu +0 -0
- package/{bin → native}/git-host-actions-runner-linux-x64-gnu +0 -0
- package/package.json +62 -10
- package/dist/frontend/js/utils/text.d.ts +0 -2
- package/dist/frontend/js/utils/text.d.ts.map +0 -1
- package/dist/frontend/js/utils/text.js +0 -4
- package/dist/frontend/js/utils/text.js.map +0 -1
- /package/{bin → native}/.gitkeep +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../src/core/forge_actions/runtime/engine.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,iBAAS,mBAAmB,CAAC,OAAO,EAAE,cAAc;;;;;;;;;;;aAuBw1L,CAAC;cAAgB,CAAC;;;;gBAA0oB,CAAC;YAAc,CAAC;;;2CAAt/I,4DAAiC;EAHlmE;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createJobExecutor } from "./job/execute.js";
|
|
2
|
+
import { createQueueSupport } from "./queue.js";
|
|
3
|
+
import { createRuntimeApi } from "./api.js";
|
|
4
|
+
import { createRunExecutor } from "./run/execute.js";
|
|
5
|
+
function createRuntimeEngine(context) {
|
|
6
|
+
const executeJob = createJobExecutor(context);
|
|
7
|
+
const { processQueue } = createRunExecutor(context, executeJob);
|
|
8
|
+
const cancelWorkflowRunRef = {
|
|
9
|
+
current: null,
|
|
10
|
+
};
|
|
11
|
+
const scheduleQueueProcessing = () => {
|
|
12
|
+
if (context.processingRef.value)
|
|
13
|
+
return;
|
|
14
|
+
queueMicrotask(() => {
|
|
15
|
+
void processQueue();
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
const queueWorkflowRun = createQueueSupport({
|
|
19
|
+
cancelWorkflowRunRef,
|
|
20
|
+
context,
|
|
21
|
+
scheduleQueueProcessing,
|
|
22
|
+
});
|
|
23
|
+
const runtime = createRuntimeApi(context, queueWorkflowRun);
|
|
24
|
+
cancelWorkflowRunRef.current = runtime.cancelWorkflowRun;
|
|
25
|
+
return runtime;
|
|
26
|
+
}
|
|
27
|
+
export { createRuntimeEngine };
|
|
28
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../src/core/forge_actions/runtime/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAMrD,SAAS,mBAAmB,CAAC,OAAuB;IAClD,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAChE,MAAM,oBAAoB,GAAG;QAC3B,OAAO,EAAE,IAAgC;KAC1C,CAAC;IACF,MAAM,uBAAuB,GAAG,GAAG,EAAE;QACnC,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK;YAAE,OAAO;QACxC,cAAc,CAAC,GAAG,EAAE;YAClB,KAAK,YAAY,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;QAC1C,oBAAoB;QACpB,OAAO;QACP,uBAAuB;KACxB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC5D,oBAAoB,CAAC,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACzD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { GitForgeWorkflow, GitForgeWorkflowRun, GitForgeWorkflowRunJob, GitForgeWorkflowRunJobStatus } from "../../../../types.js";
|
|
2
|
+
import type { ActiveRunState, ResolvedExecutionContext } from "../../shared.js";
|
|
3
|
+
import type { RuntimeContext } from "../types.js";
|
|
4
|
+
type ExecuteJobInput = {
|
|
5
|
+
activeState: ActiveRunState;
|
|
6
|
+
artifactsRoot: string;
|
|
7
|
+
execution: ResolvedExecutionContext;
|
|
8
|
+
jobRun: GitForgeWorkflowRunJob;
|
|
9
|
+
needs: Record<string, {
|
|
10
|
+
result: GitForgeWorkflowRunJobStatus;
|
|
11
|
+
}>;
|
|
12
|
+
repositoryPath: string;
|
|
13
|
+
run: GitForgeWorkflowRun;
|
|
14
|
+
workflow: GitForgeWorkflow;
|
|
15
|
+
};
|
|
16
|
+
declare function createJobExecutor(context: RuntimeContext): (input: ExecuteJobInput) => Promise<GitForgeWorkflowRunJob>;
|
|
17
|
+
export type { ExecuteJobInput };
|
|
18
|
+
export { createJobExecutor };
|
|
19
|
+
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../../src/core/forge_actions/runtime/job/execute.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,4BAA4B,EAE7B,MAAM,eAAe,CAAC;AAgBvB,OAAO,KAAK,EACV,cAAc,EACd,wBAAwB,EACzB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,KAAK,eAAe,GAAG;IACrB,WAAW,EAAE,cAAc,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,wBAAwB,CAAC;IACpC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,4BAA4B,CAAA;KAAE,CAAC,CAAC;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,mBAAmB,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,CAAC;AAqOF,iBAAS,iBAAiB,CAAC,OAAO,EAAE,cAAc,IAClC,OAAO,eAAe,qCAarC;AAED,YAAY,EAAE,eAAe,EAAE,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { GitHostError } from "../../../../errors.js";
|
|
3
|
+
import { text } from "../../../../utils/text.js";
|
|
4
|
+
import { resolveWorkflowBoolean, resolveWorkflowString } from "../../../actions/expressions.js";
|
|
5
|
+
import { materializeJobWorkspace } from "../../../actions/local_runner.js";
|
|
6
|
+
import { normalizeEnv } from "../../../actions/normalize.js";
|
|
7
|
+
import { createRunRedactor } from "../../../actions/redaction.js";
|
|
8
|
+
import { resolveActionsWorkspaceRoot } from "../../../actions/workspace.js";
|
|
9
|
+
import { buildExpressionContext, isTerminalJobStatus, mergeRuntimeEnv, normalizeTriggerContext, nowIso, } from "../../shared.js";
|
|
10
|
+
import { executeStartedStep } from "./step/execute.js";
|
|
11
|
+
function readWorkflowJob(workflow, jobId) {
|
|
12
|
+
const workflowJob = workflow.jobs.find((entry) => entry.id === jobId);
|
|
13
|
+
if (!workflowJob) {
|
|
14
|
+
throw new GitHostError("forge_invalid_workflow_definition", `Workflow job "${jobId}" no longer exists.`, {
|
|
15
|
+
jobId,
|
|
16
|
+
workflowId: workflow.id,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return workflowJob;
|
|
20
|
+
}
|
|
21
|
+
function buildBaseContext(input) {
|
|
22
|
+
return buildExpressionContext({
|
|
23
|
+
execution: input.execution,
|
|
24
|
+
...(input.jobRun.matrix ? { matrix: input.jobRun.matrix } : {}),
|
|
25
|
+
needs: input.needs,
|
|
26
|
+
run: input.run,
|
|
27
|
+
triggerContext: normalizeTriggerContext(input.run.trigger_context),
|
|
28
|
+
workflow: input.workflow,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async function failUnsupportedJob(context, run, jobRun, summary) {
|
|
32
|
+
await context.runtimeSupport.markQueuedStepsForJob(run.id, jobRun.id, "skipped");
|
|
33
|
+
const failedJob = await context.runtimeSupport.updateJob(run.id, jobRun.id, {
|
|
34
|
+
finished_at: nowIso(),
|
|
35
|
+
status: "failed",
|
|
36
|
+
summary,
|
|
37
|
+
});
|
|
38
|
+
await context.jobStepSupport.emitJobFinished(run, failedJob);
|
|
39
|
+
return failedJob;
|
|
40
|
+
}
|
|
41
|
+
async function resolvePreExecutionResult(context, input, workflowJob, baseContext) {
|
|
42
|
+
const dependencyStatus = Object.values(input.needs).map((entry) => entry.result);
|
|
43
|
+
if (!workflowJob.if && dependencyStatus.some((status) => status !== "success")) {
|
|
44
|
+
return await context.jobStepSupport.skipJob(input.run, input.jobRun, "Skipped because a dependency did not complete successfully.");
|
|
45
|
+
}
|
|
46
|
+
if (workflowJob.if && !resolveWorkflowBoolean(workflowJob.if, baseContext, true)) {
|
|
47
|
+
return await context.jobStepSupport.skipJob(input.run, input.jobRun, `Skipped by if condition for job ${input.jobRun.name}.`);
|
|
48
|
+
}
|
|
49
|
+
if (input.activeState.cancelRequested) {
|
|
50
|
+
return await context.jobStepSupport.cancelJob(input.run, input.jobRun, "Cancelled before job start.");
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
context.jobStepSupport.assertJobRunnerSupported(input.jobRun);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
return await failUnsupportedJob(context, input.run, input.jobRun, error instanceof Error ? error.message : `Job ${input.jobRun.name} failed before start.`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function startJobExecution(context, input) {
|
|
61
|
+
const workspaceRoot = resolveActionsWorkspaceRoot(context.options.actions, input.run.repository_id, input.run.id);
|
|
62
|
+
const workspacePath = path.join(workspaceRoot, "jobs", input.jobRun.id, "workspace");
|
|
63
|
+
await materializeJobWorkspace({
|
|
64
|
+
commitHash: input.run.commit_hash,
|
|
65
|
+
repositoryPath: input.repositoryPath,
|
|
66
|
+
workspacePath,
|
|
67
|
+
});
|
|
68
|
+
const jobRun = await context.runtimeSupport.updateJob(input.run.id, input.jobRun.id, {
|
|
69
|
+
runner: context.runner,
|
|
70
|
+
started_at: nowIso(),
|
|
71
|
+
status: "running",
|
|
72
|
+
summary: `Running job ${input.jobRun.name}.`,
|
|
73
|
+
});
|
|
74
|
+
await context.runtimeSupport.updateRun(input.run.repository_id, input.run.id, {
|
|
75
|
+
current_job: jobRun.name,
|
|
76
|
+
current_job_id: jobRun.id,
|
|
77
|
+
status: "running",
|
|
78
|
+
summary: `Running job ${jobRun.name}.`,
|
|
79
|
+
});
|
|
80
|
+
await context.jobStepSupport.emitJobStarted(input.run, jobRun);
|
|
81
|
+
return { jobRun, workspacePath };
|
|
82
|
+
}
|
|
83
|
+
function buildStepContext(context, input, workflowJob, jobRun, baseContext, stepRun) {
|
|
84
|
+
return {
|
|
85
|
+
...baseContext,
|
|
86
|
+
env: mergeRuntimeEnv({
|
|
87
|
+
actions: context.options.actions,
|
|
88
|
+
execution: input.execution,
|
|
89
|
+
jobEnv: workflowJob.env,
|
|
90
|
+
...(input.jobRun.matrix ? { matrix: input.jobRun.matrix } : {}),
|
|
91
|
+
run: input.run,
|
|
92
|
+
stepEnv: normalizeEnv(stepRun.metadata?.env),
|
|
93
|
+
triggerContext: normalizeTriggerContext(input.run.trigger_context),
|
|
94
|
+
workflow: input.workflow,
|
|
95
|
+
}),
|
|
96
|
+
job: { status: jobRun.status },
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
async function startStepExecution(context, run, jobRun, stepRun) {
|
|
100
|
+
const startedStep = await context.runtimeSupport.updateStep(run.id, stepRun.id, {
|
|
101
|
+
started_at: nowIso(),
|
|
102
|
+
status: "running",
|
|
103
|
+
});
|
|
104
|
+
const nextJobRun = await context.runtimeSupport.updateJob(run.id, jobRun.id, {
|
|
105
|
+
current_step: startedStep.name,
|
|
106
|
+
current_step_index: startedStep.index,
|
|
107
|
+
});
|
|
108
|
+
await context.runtimeSupport.updateRun(run.repository_id, run.id, {
|
|
109
|
+
current_job: jobRun.name,
|
|
110
|
+
current_job_id: jobRun.id,
|
|
111
|
+
current_step: startedStep.name,
|
|
112
|
+
current_step_index: startedStep.index,
|
|
113
|
+
status: "running",
|
|
114
|
+
summary: `Running ${jobRun.name} / ${startedStep.name}.`,
|
|
115
|
+
});
|
|
116
|
+
return { jobRun: nextJobRun, stepRun: startedStep };
|
|
117
|
+
}
|
|
118
|
+
async function emitStepStarted(context, run, jobRun, stepRun, resolvedCommand, redactor) {
|
|
119
|
+
await context.runtimeSupport.emitRunEvent(run, {
|
|
120
|
+
command: await redactor(resolvedCommand),
|
|
121
|
+
job_id: jobRun.job_id,
|
|
122
|
+
job_name: jobRun.name,
|
|
123
|
+
job_run_id: jobRun.id,
|
|
124
|
+
status: "running",
|
|
125
|
+
step_id: stepRun.id,
|
|
126
|
+
step_index: stepRun.index,
|
|
127
|
+
step_name: stepRun.name,
|
|
128
|
+
type: "step.started",
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
async function executeJobStep(context, input, workflowJob, baseContext, jobRun, stepRun, workspacePath) {
|
|
132
|
+
if (input.activeState.cancelRequested) {
|
|
133
|
+
await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
|
|
134
|
+
status: "cancelled",
|
|
135
|
+
summary: `Cancelled before step ${stepRun.name}.`,
|
|
136
|
+
});
|
|
137
|
+
return jobRun;
|
|
138
|
+
}
|
|
139
|
+
const stepContext = buildStepContext(context, input, workflowJob, jobRun, baseContext, stepRun);
|
|
140
|
+
const stepIf = text(stepRun.metadata?.if);
|
|
141
|
+
if (stepIf && !resolveWorkflowBoolean(stepIf, stepContext, true)) {
|
|
142
|
+
await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
|
|
143
|
+
status: "skipped",
|
|
144
|
+
summary: `Skipped step ${stepRun.name}.`,
|
|
145
|
+
});
|
|
146
|
+
return jobRun;
|
|
147
|
+
}
|
|
148
|
+
const redactor = createRunRedactor({
|
|
149
|
+
actions: context.options.actions,
|
|
150
|
+
env: stepContext.env,
|
|
151
|
+
run: input.run,
|
|
152
|
+
secrets: input.execution.secrets,
|
|
153
|
+
step: stepRun,
|
|
154
|
+
});
|
|
155
|
+
const resolvedCommand = stepRun.kind === "shell"
|
|
156
|
+
? resolveWorkflowString(stepRun.command, stepContext)
|
|
157
|
+
: resolveWorkflowString(text(stepRun.uses), stepContext);
|
|
158
|
+
const started = await startStepExecution(context, input.run, jobRun, stepRun);
|
|
159
|
+
await emitStepStarted(context, input.run, started.jobRun, started.stepRun, resolvedCommand, redactor);
|
|
160
|
+
return await executeStartedStep(context, input, workflowJob, started.jobRun, started.stepRun, workspacePath, stepContext, resolvedCommand, redactor);
|
|
161
|
+
}
|
|
162
|
+
async function finalizeSuccessfulJob(context, run, jobRun) {
|
|
163
|
+
const finishedJob = await context.runtimeSupport.updateJob(run.id, jobRun.id, {
|
|
164
|
+
current_step: null,
|
|
165
|
+
current_step_index: null,
|
|
166
|
+
finished_at: nowIso(),
|
|
167
|
+
status: "success",
|
|
168
|
+
summary: `Job ${jobRun.name} completed successfully.`,
|
|
169
|
+
});
|
|
170
|
+
await context.jobStepSupport.emitJobFinished(run, finishedJob);
|
|
171
|
+
return finishedJob;
|
|
172
|
+
}
|
|
173
|
+
function createJobExecutor(context) {
|
|
174
|
+
return async (input) => {
|
|
175
|
+
const workflowJob = readWorkflowJob(input.workflow, input.jobRun.job_id);
|
|
176
|
+
const baseContext = buildBaseContext(input);
|
|
177
|
+
const earlyResult = await resolvePreExecutionResult(context, input, workflowJob, baseContext);
|
|
178
|
+
if (earlyResult)
|
|
179
|
+
return earlyResult;
|
|
180
|
+
let { jobRun, workspacePath } = await startJobExecution(context, input);
|
|
181
|
+
const stepRuns = await context.storage.listWorkflowRunSteps(input.run.id, { jobRunId: jobRun.id });
|
|
182
|
+
for (const stepRun of stepRuns) {
|
|
183
|
+
jobRun = await executeJobStep(context, input, workflowJob, baseContext, jobRun, stepRun, workspacePath);
|
|
184
|
+
if (isTerminalJobStatus(jobRun.status) && jobRun.status !== "running")
|
|
185
|
+
return jobRun;
|
|
186
|
+
}
|
|
187
|
+
return await finalizeSuccessfulJob(context, input.run, jobRun);
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
export { createJobExecutor };
|
|
191
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../../src/core/forge_actions/runtime/job/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type WorkflowExpressionContext } from "../../../../actions/expressions.js";
|
|
2
|
+
import { createRunRedactor } from "../../../../actions/redaction.js";
|
|
3
|
+
import type { RuntimeContext } from "../../types.js";
|
|
4
|
+
import type { ExecuteJobInput } from "../execute.js";
|
|
5
|
+
declare function executeStartedStep(context: RuntimeContext, input: ExecuteJobInput, workflowJob: import("../../../../../types.js").GitForgeWorkflow["jobs"][number], jobRun: import("../../../../../types.js").GitForgeWorkflowRunJob, stepRun: import("../../../../../types.js").GitForgeWorkflowRunStep, workspacePath: string, stepContext: WorkflowExpressionContext, resolvedCommand: string, redactor: ReturnType<typeof createRunRedactor>): Promise<import("../../../../../types.js").GitForgeWorkflowRunJob>;
|
|
6
|
+
export { executeStartedStep };
|
|
7
|
+
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../../../src/core/forge_actions/runtime/job/step/execute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAUlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA6NrD,iBAAe,kBAAkB,CAC/B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,OAAO,eAAe,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EACrE,MAAM,EAAE,OAAO,eAAe,EAAE,sBAAsB,EACtD,OAAO,EAAE,OAAO,eAAe,EAAE,uBAAuB,EACxD,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,yBAAyB,EACtC,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,2DAM/C;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { text } from "../../../../../utils/text.js";
|
|
2
|
+
import { resolveWorkflowString } from "../../../../actions/expressions.js";
|
|
3
|
+
import { runShellCommand } from "../../../../actions/local_runner.js";
|
|
4
|
+
import { normalizeEnv } from "../../../../actions/normalize.js";
|
|
5
|
+
import { DEFAULT_HEARTBEAT_INTERVAL_MS, mergeRuntimeEnv, normalizeTriggerContext, nowIso, } from "../../../shared.js";
|
|
6
|
+
async function emitOutputChunk(context, input, jobRun, stepRun, chunk, stream) {
|
|
7
|
+
for (const type of ["step.output", "job.output"]) {
|
|
8
|
+
await context.runtimeSupport.emitRunEvent(input.run, {
|
|
9
|
+
chunk,
|
|
10
|
+
job_id: jobRun.job_id,
|
|
11
|
+
job_name: jobRun.name,
|
|
12
|
+
job_run_id: jobRun.id,
|
|
13
|
+
status: "running",
|
|
14
|
+
step_id: stepRun.id,
|
|
15
|
+
step_index: stepRun.index,
|
|
16
|
+
step_name: stepRun.name,
|
|
17
|
+
stream,
|
|
18
|
+
type,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function resolveStepWith(stepRun, stepContext) {
|
|
23
|
+
return Object.fromEntries(Object.entries((stepRun.metadata?.with && typeof stepRun.metadata.with === "object")
|
|
24
|
+
? stepRun.metadata.with
|
|
25
|
+
: {})
|
|
26
|
+
.map(([key, value]) => [key, resolveWorkflowString(String(value), stepContext)]));
|
|
27
|
+
}
|
|
28
|
+
async function failUsesStep(context, input, jobRun, stepRun, summary) {
|
|
29
|
+
await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
|
|
30
|
+
outputPreview: summary,
|
|
31
|
+
status: input.activeState.cancelRequested ? "cancelled" : "failed",
|
|
32
|
+
summary,
|
|
33
|
+
});
|
|
34
|
+
await context.runtimeSupport.markQueuedStepsForJob(input.run.id, jobRun.id, input.activeState.cancelRequested ? "cancelled" : "skipped");
|
|
35
|
+
const finishedJob = await context.runtimeSupport.updateJob(input.run.id, jobRun.id, {
|
|
36
|
+
current_step: null,
|
|
37
|
+
current_step_index: null,
|
|
38
|
+
finished_at: nowIso(),
|
|
39
|
+
status: input.activeState.cancelRequested ? "cancelled" : "failed",
|
|
40
|
+
summary,
|
|
41
|
+
});
|
|
42
|
+
await context.jobStepSupport.emitJobFinished(input.run, finishedJob);
|
|
43
|
+
return finishedJob;
|
|
44
|
+
}
|
|
45
|
+
async function executeUsesStep(context, input, jobRun, stepRun, workspacePath, stepContext, redactor) {
|
|
46
|
+
try {
|
|
47
|
+
const result = await context.jobStepSupport.executeUsesStep({
|
|
48
|
+
artifactsRoot: input.artifactsRoot,
|
|
49
|
+
execution: input.execution,
|
|
50
|
+
jobRun,
|
|
51
|
+
run: input.run,
|
|
52
|
+
stepWith: resolveStepWith(stepRun, stepContext),
|
|
53
|
+
stepRun,
|
|
54
|
+
workspacePath,
|
|
55
|
+
});
|
|
56
|
+
const preview = await redactor(result.outputPreview || "");
|
|
57
|
+
if (preview)
|
|
58
|
+
await emitOutputChunk(context, input, jobRun, stepRun, preview, "stdout");
|
|
59
|
+
await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
|
|
60
|
+
outputPreview: preview,
|
|
61
|
+
status: "success",
|
|
62
|
+
summary: result.summary,
|
|
63
|
+
});
|
|
64
|
+
return jobRun;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const summary = await redactor(error instanceof Error ? error.message : "Action step failed.");
|
|
68
|
+
return await failUsesStep(context, input, jobRun, stepRun, summary);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function createShellCallbacks(context, input, jobRun, stepRun, redactor) {
|
|
72
|
+
return {
|
|
73
|
+
onHeartbeat: async () => {
|
|
74
|
+
for (const type of ["step.heartbeat", "job.heartbeat"]) {
|
|
75
|
+
await context.runtimeSupport.emitRunEvent(input.run, {
|
|
76
|
+
job_id: jobRun.job_id,
|
|
77
|
+
job_name: jobRun.name,
|
|
78
|
+
job_run_id: jobRun.id,
|
|
79
|
+
status: "running",
|
|
80
|
+
step_id: stepRun.id,
|
|
81
|
+
step_index: stepRun.index,
|
|
82
|
+
step_name: stepRun.name,
|
|
83
|
+
type,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
onOutput: async (stream, chunk) => {
|
|
88
|
+
await emitOutputChunk(context, input, jobRun, stepRun, await redactor(chunk, stream), stream);
|
|
89
|
+
},
|
|
90
|
+
onSpawn: (child) => {
|
|
91
|
+
input.activeState.child = child;
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
async function finalizeShellFailure(context, input, jobRun, stepRun) {
|
|
96
|
+
await context.runtimeSupport.markQueuedStepsForJob(input.run.id, jobRun.id, "skipped");
|
|
97
|
+
const finishedJob = await context.runtimeSupport.updateJob(input.run.id, jobRun.id, {
|
|
98
|
+
current_step: null,
|
|
99
|
+
current_step_index: null,
|
|
100
|
+
finished_at: nowIso(),
|
|
101
|
+
status: "failed",
|
|
102
|
+
summary: `Job ${jobRun.name} failed in step ${stepRun.name}.`,
|
|
103
|
+
});
|
|
104
|
+
await context.jobStepSupport.emitJobFinished(input.run, finishedJob);
|
|
105
|
+
return finishedJob;
|
|
106
|
+
}
|
|
107
|
+
async function finalizeShellCancellation(context, input, jobRun) {
|
|
108
|
+
await context.runtimeSupport.markQueuedStepsForJob(input.run.id, jobRun.id, "cancelled");
|
|
109
|
+
const finishedJob = await context.runtimeSupport.updateJob(input.run.id, jobRun.id, {
|
|
110
|
+
current_step: null,
|
|
111
|
+
current_step_index: null,
|
|
112
|
+
finished_at: nowIso(),
|
|
113
|
+
status: "cancelled",
|
|
114
|
+
summary: `Cancelled during job ${jobRun.name}.`,
|
|
115
|
+
});
|
|
116
|
+
await context.jobStepSupport.emitJobFinished(input.run, finishedJob);
|
|
117
|
+
return finishedJob;
|
|
118
|
+
}
|
|
119
|
+
async function executeShellStep(context, input, workflowJob, jobRun, stepRun, workspacePath, resolvedCommand, redactor) {
|
|
120
|
+
const runtimeEnv = mergeRuntimeEnv({
|
|
121
|
+
actions: context.options.actions,
|
|
122
|
+
execution: input.execution,
|
|
123
|
+
jobEnv: workflowJob.env,
|
|
124
|
+
...(input.jobRun.matrix ? { matrix: input.jobRun.matrix } : {}),
|
|
125
|
+
run: input.run,
|
|
126
|
+
stepEnv: normalizeEnv(stepRun.metadata?.env),
|
|
127
|
+
triggerContext: normalizeTriggerContext(input.run.trigger_context),
|
|
128
|
+
workflow: input.workflow,
|
|
129
|
+
});
|
|
130
|
+
const result = await runShellCommand({
|
|
131
|
+
...(context.options.actions?.localRunner?.beforeSpawn ? { beforeSpawn: context.options.actions.localRunner.beforeSpawn } : {}),
|
|
132
|
+
command: resolvedCommand,
|
|
133
|
+
cwd: workspacePath,
|
|
134
|
+
env: runtimeEnv,
|
|
135
|
+
...(context.options.actions?.localRunner?.execTimeoutMs === undefined ? {} : { execTimeoutMs: context.options.actions.localRunner.execTimeoutMs }),
|
|
136
|
+
...(context.options.actions?.localRunner?.gid === undefined ? {} : { gid: context.options.actions.localRunner.gid }),
|
|
137
|
+
heartbeatIntervalMs: Math.max(250, Number(context.options.actions?.heartbeatIntervalMs) || DEFAULT_HEARTBEAT_INTERVAL_MS),
|
|
138
|
+
...(context.options.actions?.localRunner?.uid === undefined ? {} : { uid: context.options.actions.localRunner.uid }),
|
|
139
|
+
...createShellCallbacks(context, input, jobRun, stepRun, redactor),
|
|
140
|
+
shell: text(stepRun.metadata?.shell, text(context.options.actions?.shell, "bash")) || "bash",
|
|
141
|
+
});
|
|
142
|
+
const preview = await redactor(result.outputPreview);
|
|
143
|
+
if (input.activeState.cancelRequested || result.exitCode === 130) {
|
|
144
|
+
await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
|
|
145
|
+
exitCode: result.exitCode,
|
|
146
|
+
outputPreview: preview,
|
|
147
|
+
status: "cancelled",
|
|
148
|
+
summary: `Cancelled during step ${stepRun.name}.`,
|
|
149
|
+
});
|
|
150
|
+
return await finalizeShellCancellation(context, input, jobRun);
|
|
151
|
+
}
|
|
152
|
+
if (result.exitCode !== 0) {
|
|
153
|
+
await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
|
|
154
|
+
exitCode: result.exitCode,
|
|
155
|
+
outputPreview: preview,
|
|
156
|
+
status: "failed",
|
|
157
|
+
summary: `Failed step ${stepRun.name}.`,
|
|
158
|
+
});
|
|
159
|
+
return await finalizeShellFailure(context, input, jobRun, stepRun);
|
|
160
|
+
}
|
|
161
|
+
await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
|
|
162
|
+
exitCode: result.exitCode,
|
|
163
|
+
outputPreview: preview,
|
|
164
|
+
status: "success",
|
|
165
|
+
summary: `Completed step ${stepRun.name}.`,
|
|
166
|
+
});
|
|
167
|
+
return jobRun;
|
|
168
|
+
}
|
|
169
|
+
async function executeStartedStep(context, input, workflowJob, jobRun, stepRun, workspacePath, stepContext, resolvedCommand, redactor) {
|
|
170
|
+
if (stepRun.kind === "uses") {
|
|
171
|
+
return await executeUsesStep(context, input, jobRun, stepRun, workspacePath, stepContext, redactor);
|
|
172
|
+
}
|
|
173
|
+
return await executeShellStep(context, input, workflowJob, jobRun, stepRun, workspacePath, resolvedCommand, redactor);
|
|
174
|
+
}
|
|
175
|
+
export { executeStartedStep };
|
|
176
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../../../src/core/forge_actions/runtime/job/step/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CancelWorkflowRun, QueueWorkflowRun, RuntimeContext } from "./types.js";
|
|
2
|
+
type QueueSupportInput = {
|
|
3
|
+
cancelWorkflowRunRef: {
|
|
4
|
+
current: CancelWorkflowRun | null;
|
|
5
|
+
};
|
|
6
|
+
context: RuntimeContext;
|
|
7
|
+
scheduleQueueProcessing: () => void;
|
|
8
|
+
};
|
|
9
|
+
declare function createQueueSupport(input: QueueSupportInput): QueueWorkflowRun;
|
|
10
|
+
export { createQueueSupport };
|
|
11
|
+
//# sourceMappingURL=queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../src/core/forge_actions/runtime/queue.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,KAAK,iBAAiB,GAAG;IACvB,oBAAoB,EAAE;QACpB,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;KACnC,CAAC;IACF,OAAO,EAAE,cAAc,CAAC;IACxB,uBAAuB,EAAE,MAAM,IAAI,CAAC;CACrC,CAAC;AAyJF,iBAAS,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,gBAAgB,CAsBtE;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { text } from "../../../utils/text.js";
|
|
3
|
+
import { assertAcyclicWorkflow, planWorkflowJobs } from "../../actions/planner.js";
|
|
4
|
+
import { normalizeTriggerContext, nowIso } from "../shared.js";
|
|
5
|
+
async function createPlannedStepRuns(context, runId, jobRunId, steps) {
|
|
6
|
+
for (const [index, step] of steps.entries()) {
|
|
7
|
+
await context.storage.createWorkflowRunStep({
|
|
8
|
+
command: text(step.run, step.uses),
|
|
9
|
+
exit_code: null,
|
|
10
|
+
finished_at: null,
|
|
11
|
+
id: randomUUID(),
|
|
12
|
+
index,
|
|
13
|
+
job_run_id: jobRunId,
|
|
14
|
+
kind: step.kind || (step.uses ? "uses" : "shell"),
|
|
15
|
+
metadata: {
|
|
16
|
+
env: step.env,
|
|
17
|
+
if: step.if,
|
|
18
|
+
shell: step.shell,
|
|
19
|
+
with: step.with,
|
|
20
|
+
},
|
|
21
|
+
name: text(step.name, `Step ${index + 1}`),
|
|
22
|
+
output_preview: "",
|
|
23
|
+
run_id: runId,
|
|
24
|
+
started_at: null,
|
|
25
|
+
status: "queued",
|
|
26
|
+
uses: text(step.uses) || null,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function createPlannedJobRuns(context, run, workflow) {
|
|
31
|
+
for (const plannedJob of planWorkflowJobs(workflow)) {
|
|
32
|
+
const jobRun = await context.storage.createWorkflowRunJob({
|
|
33
|
+
current_step: null,
|
|
34
|
+
current_step_index: null,
|
|
35
|
+
finished_at: null,
|
|
36
|
+
id: randomUUID(),
|
|
37
|
+
index: plannedJob.index,
|
|
38
|
+
job_id: plannedJob.job.id,
|
|
39
|
+
...(plannedJob.matrix ? { matrix: plannedJob.matrix } : {}),
|
|
40
|
+
name: plannedJob.name,
|
|
41
|
+
needs: plannedJob.job.needs,
|
|
42
|
+
run_id: run.id,
|
|
43
|
+
runner: null,
|
|
44
|
+
runs_on: plannedJob.job.runs_on,
|
|
45
|
+
started_at: null,
|
|
46
|
+
status: "queued",
|
|
47
|
+
summary: "Job queued.",
|
|
48
|
+
});
|
|
49
|
+
await createPlannedStepRuns(context, run.id, jobRun.id, plannedJob.job.steps);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function emitAcceptedRun(context, run, workflow) {
|
|
53
|
+
await context.runtimeSupport.emitRunEvent(run, {
|
|
54
|
+
metadata: {
|
|
55
|
+
branch: run.branch,
|
|
56
|
+
definition_path: workflow.definition_path,
|
|
57
|
+
ref: run.ref,
|
|
58
|
+
},
|
|
59
|
+
status: "queued",
|
|
60
|
+
summary: run.summary,
|
|
61
|
+
type: "run.accepted",
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async function createQueuedRun(context, repositoryId, workflow, runInput) {
|
|
65
|
+
const triggerContext = normalizeTriggerContext(runInput.triggerContext);
|
|
66
|
+
const target = await context.runtimeSupport.resolveRunTarget(repositoryId, runInput);
|
|
67
|
+
const execution = await context.runtimeSupport.resolveExecutionContext(repositoryId, workflow, {
|
|
68
|
+
...runInput,
|
|
69
|
+
triggerContext,
|
|
70
|
+
});
|
|
71
|
+
const concurrencyGroup = await context.runtimeSupport.resolveConcurrencyGroup(repositoryId, workflow, {
|
|
72
|
+
...runInput,
|
|
73
|
+
triggerContext,
|
|
74
|
+
}, target, execution);
|
|
75
|
+
const run = await context.storage.createWorkflowRun({
|
|
76
|
+
branch: target.branch,
|
|
77
|
+
commit_hash: target.commitHash,
|
|
78
|
+
...(workflow.concurrency ? { concurrency_cancel_in_progress: workflow.concurrency.cancel_in_progress === true } : {}),
|
|
79
|
+
...(concurrencyGroup ? { concurrency_group: concurrencyGroup } : {}),
|
|
80
|
+
created_at: nowIso(),
|
|
81
|
+
created_by: text(runInput.actor.id, text(runInput.actor.name, "system")),
|
|
82
|
+
current_job: null,
|
|
83
|
+
current_job_id: null,
|
|
84
|
+
current_step: null,
|
|
85
|
+
current_step_index: null,
|
|
86
|
+
execution_context: {
|
|
87
|
+
...(execution.actor ? { actor: execution.actor } : {}),
|
|
88
|
+
env: execution.env,
|
|
89
|
+
inputs: execution.inputs,
|
|
90
|
+
...(execution.metadata ? { metadata: execution.metadata } : {}),
|
|
91
|
+
secret_names: Object.keys(execution.secrets),
|
|
92
|
+
},
|
|
93
|
+
finished_at: null,
|
|
94
|
+
id: randomUUID(),
|
|
95
|
+
ref: target.ref,
|
|
96
|
+
release_id: text(triggerContext.release_id) || null,
|
|
97
|
+
repository_id: repositoryId,
|
|
98
|
+
runner: null,
|
|
99
|
+
started_at: null,
|
|
100
|
+
status: "queued",
|
|
101
|
+
summary: "Workflow run queued.",
|
|
102
|
+
trigger_context: {
|
|
103
|
+
...triggerContext,
|
|
104
|
+
event_name: runInput.triggerKind === "manual" ? "workflow_dispatch" : runInput.triggerKind,
|
|
105
|
+
inputs: execution.inputs,
|
|
106
|
+
workflow_definition_path: workflow.definition_path,
|
|
107
|
+
},
|
|
108
|
+
trigger_kind: runInput.triggerKind,
|
|
109
|
+
workflow_id: workflow.id,
|
|
110
|
+
});
|
|
111
|
+
return { execution, run };
|
|
112
|
+
}
|
|
113
|
+
async function cancelConflictingRuns(context, repositoryId, runId, concurrencyGroup, actor, cancelWorkflowRun) {
|
|
114
|
+
if (!cancelWorkflowRun)
|
|
115
|
+
return;
|
|
116
|
+
const active = await context.storage.listWorkflowRuns(repositoryId, {
|
|
117
|
+
status: ["queued", "running", "starting"],
|
|
118
|
+
});
|
|
119
|
+
for (const entry of active) {
|
|
120
|
+
if (entry.id === runId)
|
|
121
|
+
continue;
|
|
122
|
+
if (text(entry.concurrency_group) !== text(concurrencyGroup))
|
|
123
|
+
continue;
|
|
124
|
+
await cancelWorkflowRun(repositoryId, entry.id, actor);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function createQueueSupport(input) {
|
|
128
|
+
return async (repositoryId, workflow, runInput) => {
|
|
129
|
+
const { context } = input;
|
|
130
|
+
assertAcyclicWorkflow(workflow);
|
|
131
|
+
const { execution, run } = await createQueuedRun(context, repositoryId, workflow, runInput);
|
|
132
|
+
await createPlannedJobRuns(context, run, workflow);
|
|
133
|
+
await emitAcceptedRun(context, run, workflow);
|
|
134
|
+
context.runExecutionContexts.set(run.id, execution);
|
|
135
|
+
if (run.concurrency_group && workflow.concurrency?.cancel_in_progress) {
|
|
136
|
+
await cancelConflictingRuns(context, repositoryId, run.id, run.concurrency_group, runInput.actor, input.cancelWorkflowRunRef.current);
|
|
137
|
+
}
|
|
138
|
+
context.queuedRuns.push({ repositoryId, runId: run.id });
|
|
139
|
+
input.scheduleQueueProcessing();
|
|
140
|
+
return run;
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
export { createQueueSupport };
|
|
144
|
+
//# sourceMappingURL=queue.js.map
|