@async/pipeline 0.1.3
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/README.md +68 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -0
- package/dist/core.d.ts +2 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +2 -0
- package/dist/core.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/core/cache.d.ts +47 -0
- package/dist/internal/core/cache.d.ts.map +1 -0
- package/dist/internal/core/cache.js +81 -0
- package/dist/internal/core/cache.js.map +1 -0
- package/dist/internal/core/errors.d.ts +7 -0
- package/dist/internal/core/errors.d.ts.map +1 -0
- package/dist/internal/core/errors.js +14 -0
- package/dist/internal/core/errors.js.map +1 -0
- package/dist/internal/core/index.d.ts +347 -0
- package/dist/internal/core/index.d.ts.map +1 -0
- package/dist/internal/core/index.js +584 -0
- package/dist/internal/core/index.js.map +1 -0
- package/dist/internal/core/runtime.d.ts +111 -0
- package/dist/internal/core/runtime.d.ts.map +1 -0
- package/dist/internal/core/runtime.js +495 -0
- package/dist/internal/core/runtime.js.map +1 -0
- package/dist/internal/lima/index.d.ts +15 -0
- package/dist/internal/lima/index.d.ts.map +1 -0
- package/dist/internal/lima/index.js +65 -0
- package/dist/internal/lima/index.js.map +1 -0
- package/dist/internal/node/cli.d.ts +3 -0
- package/dist/internal/node/cli.d.ts.map +1 -0
- package/dist/internal/node/cli.js +410 -0
- package/dist/internal/node/cli.js.map +1 -0
- package/dist/internal/node/doctor.d.ts +7 -0
- package/dist/internal/node/doctor.d.ts.map +1 -0
- package/dist/internal/node/doctor.js +21 -0
- package/dist/internal/node/doctor.js.map +1 -0
- package/dist/internal/node/github.d.ts +48 -0
- package/dist/internal/node/github.d.ts.map +1 -0
- package/dist/internal/node/github.js +351 -0
- package/dist/internal/node/github.js.map +1 -0
- package/dist/internal/node/index.d.ts +8 -0
- package/dist/internal/node/index.d.ts.map +1 -0
- package/dist/internal/node/index.js +8 -0
- package/dist/internal/node/index.js.map +1 -0
- package/dist/internal/node/loader.d.ts +3 -0
- package/dist/internal/node/loader.d.ts.map +1 -0
- package/dist/internal/node/loader.js +10 -0
- package/dist/internal/node/loader.js.map +1 -0
- package/dist/internal/node/runner.d.ts +35 -0
- package/dist/internal/node/runner.d.ts.map +1 -0
- package/dist/internal/node/runner.js +527 -0
- package/dist/internal/node/runner.js.map +1 -0
- package/dist/internal/node/sources.d.ts +44 -0
- package/dist/internal/node/sources.d.ts.map +1 -0
- package/dist/internal/node/sources.js +187 -0
- package/dist/internal/node/sources.js.map +1 -0
- package/dist/internal/node/store.d.ts +23 -0
- package/dist/internal/node/store.d.ts.map +1 -0
- package/dist/internal/node/store.js +224 -0
- package/dist/internal/node/store.js.map +1 -0
- package/dist/internal/node/sync.d.ts +41 -0
- package/dist/internal/node/sync.d.ts.map +1 -0
- package/dist/internal/node/sync.js +332 -0
- package/dist/internal/node/sync.js.map +1 -0
- package/dist/lima.d.ts +2 -0
- package/dist/lima.d.ts.map +1 -0
- package/dist/lima.js +2 -0
- package/dist/lima.js.map +1 -0
- package/dist/node.d.ts +2 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +2 -0
- package/dist/node.js.map +1 -0
- package/dist/runtime.d.ts +2 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +2 -0
- package/dist/runtime.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { NormalizedTask } from "../core/index.js";
|
|
2
|
+
import type { CommandResult, RunnerAdapter } from "../node/index.js";
|
|
3
|
+
export declare class LimaRunnerAdapter implements RunnerAdapter {
|
|
4
|
+
private readonly vm;
|
|
5
|
+
name: string;
|
|
6
|
+
constructor(vm?: string);
|
|
7
|
+
runShell(command: string, options: {
|
|
8
|
+
cwd: string;
|
|
9
|
+
env: NodeJS.ProcessEnv;
|
|
10
|
+
task: NormalizedTask;
|
|
11
|
+
timeoutMs?: number;
|
|
12
|
+
}): Promise<CommandResult>;
|
|
13
|
+
checkTool(tool: string): Promise<boolean>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEzE,qBAAa,iBAAkB,YAAW,aAAa;IAGzC,OAAO,CAAC,QAAQ,CAAC,EAAE;IAF/B,IAAI,SAAU;gBAEe,EAAE,SAAmB;IAElD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;QAAC,IAAI,EAAE,cAAc,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAMvI,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAOhD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
export class LimaRunnerAdapter {
|
|
3
|
+
vm;
|
|
4
|
+
name = "lima";
|
|
5
|
+
constructor(vm = "async-pipeline") {
|
|
6
|
+
this.vm = vm;
|
|
7
|
+
}
|
|
8
|
+
runShell(command, options) {
|
|
9
|
+
const vm = options.task.environment?.vm ?? this.vm;
|
|
10
|
+
const escaped = shellEscape(`cd ${shellEscape(options.cwd)} && ${command}`);
|
|
11
|
+
return runProcess(`limactl shell ${shellEscape(vm)} -- bash -lc ${escaped}`, { cwd: options.cwd, env: options.env, timeoutMs: options.timeoutMs });
|
|
12
|
+
}
|
|
13
|
+
async checkTool(tool) {
|
|
14
|
+
const result = await runProcess(`limactl shell ${shellEscape(this.vm)} -- bash -lc ${shellEscape(`command -v ${shellEscape(tool)}`)}`, {
|
|
15
|
+
cwd: process.cwd(),
|
|
16
|
+
env: process.env
|
|
17
|
+
});
|
|
18
|
+
return result.code === 0;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function runProcess(command, options) {
|
|
22
|
+
return new Promise((resolve) => {
|
|
23
|
+
const child = spawn(command, {
|
|
24
|
+
cwd: options.cwd,
|
|
25
|
+
env: options.env,
|
|
26
|
+
shell: true,
|
|
27
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
28
|
+
});
|
|
29
|
+
let stdout = "";
|
|
30
|
+
let stderr = "";
|
|
31
|
+
let timedOut = false;
|
|
32
|
+
let timeout;
|
|
33
|
+
let forceKillTimeout;
|
|
34
|
+
if (options.timeoutMs) {
|
|
35
|
+
timeout = setTimeout(() => {
|
|
36
|
+
timedOut = true;
|
|
37
|
+
child.kill("SIGTERM");
|
|
38
|
+
forceKillTimeout = setTimeout(() => child.kill("SIGKILL"), 500);
|
|
39
|
+
}, options.timeoutMs);
|
|
40
|
+
}
|
|
41
|
+
child.stdout.setEncoding("utf8");
|
|
42
|
+
child.stderr.setEncoding("utf8");
|
|
43
|
+
child.stdout.on("data", (chunk) => {
|
|
44
|
+
stdout += chunk;
|
|
45
|
+
});
|
|
46
|
+
child.stderr.on("data", (chunk) => {
|
|
47
|
+
stderr += chunk;
|
|
48
|
+
});
|
|
49
|
+
child.on("close", (code) => {
|
|
50
|
+
if (timeout)
|
|
51
|
+
clearTimeout(timeout);
|
|
52
|
+
if (forceKillTimeout)
|
|
53
|
+
clearTimeout(forceKillTimeout);
|
|
54
|
+
if (timedOut) {
|
|
55
|
+
resolve({ code: 124, stdout, stderr: `${stderr}[timeout] Command timed out after ${options.timeoutMs}ms.\n`, timedOut: true });
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
resolve({ code: code ?? 1, stdout, stderr });
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function shellEscape(value) {
|
|
63
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { basename, resolve } from "node:path";
|
|
4
|
+
import { buildGraph, composePipelines, tasksForJob } from "../core/index.js";
|
|
5
|
+
import { runDoctor } from "./doctor.js";
|
|
6
|
+
import { checkGitHubWorkflow, jobsForGitHubEvent, readGitHubEventContext, renderGitHubWorkflow, writeGitHubWorkflow } from "./github.js";
|
|
7
|
+
import { loadPipeline } from "./loader.js";
|
|
8
|
+
import { runJob, runSingleTask } from "./runner.js";
|
|
9
|
+
import { createStore } from "./store.js";
|
|
10
|
+
import { matrixForJob, readPipelineMetadata, resolveSources, sourceContext } from "./sources.js";
|
|
11
|
+
import { checkTaskSync, describeTaskSync, renderTaskSync, writeTaskSync } from "./sync.js";
|
|
12
|
+
async function main() {
|
|
13
|
+
const [command, ...args] = process.argv.slice(2);
|
|
14
|
+
const program = programName();
|
|
15
|
+
const cwd = process.cwd();
|
|
16
|
+
const configPath = findPipelineConfig(cwd);
|
|
17
|
+
if (command === "doctor") {
|
|
18
|
+
const checks = await runDoctor();
|
|
19
|
+
for (const check of checks) {
|
|
20
|
+
console.log(`${check.status.toUpperCase()} ${check.name}: ${check.message}`);
|
|
21
|
+
}
|
|
22
|
+
process.exitCode = checks.some((check) => check.status === "fail") ? 1 : 0;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (!command || command === "help" || command === "--help") {
|
|
26
|
+
printHelp(program);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (!configPath) {
|
|
30
|
+
throw new Error(`No pipeline.ts, pipeline.mjs, or pipeline.js found in ${cwd}.`);
|
|
31
|
+
}
|
|
32
|
+
const pipeline = await loadPipeline(configPath);
|
|
33
|
+
if (command === "sync") {
|
|
34
|
+
await handleSyncCommand(args, { cwd, configPath, pipeline });
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (command === "github") {
|
|
38
|
+
const subcommand = args[0] ?? "help";
|
|
39
|
+
const paths = githubGenerationPaths(args.slice(1));
|
|
40
|
+
const rendered = await renderGitHubWorkflow(pipeline, { cwd, configPath, ...paths });
|
|
41
|
+
if (subcommand === "generate") {
|
|
42
|
+
await writeGitHubWorkflow(rendered, cwd);
|
|
43
|
+
console.log(`Generated ${rendered.workflowPath}`);
|
|
44
|
+
console.log(`Generated ${rendered.lockPath}`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (subcommand === "check") {
|
|
48
|
+
const issues = await checkGitHubWorkflow(rendered, cwd);
|
|
49
|
+
if (issues.length > 0) {
|
|
50
|
+
for (const issue of issues)
|
|
51
|
+
console.error(issue);
|
|
52
|
+
process.exitCode = 1;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
console.log("GitHub workflow is current.");
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (subcommand === "run") {
|
|
59
|
+
const context = await readGitHubEventContext(process.env);
|
|
60
|
+
const jobs = jobsForGitHubEvent(pipeline, context);
|
|
61
|
+
if (jobs.length === 0) {
|
|
62
|
+
console.log(`No pipeline jobs matched GitHub event "${context.eventName}".`);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
let failed = false;
|
|
66
|
+
for (const selectedJob of jobs) {
|
|
67
|
+
const graph = tasksForJob(pipeline, selectedJob.id);
|
|
68
|
+
console.log(`Running ${pipeline.name}:${selectedJob.id} (${graph.executionOrder.join(" -> ")})`);
|
|
69
|
+
const result = await runJob(pipeline, { cwd, jobId: selectedJob.id, mode: "ci" });
|
|
70
|
+
console.log(`Pipeline ${result.status}: ${result.id}`);
|
|
71
|
+
if (result.status !== "passed")
|
|
72
|
+
failed = true;
|
|
73
|
+
}
|
|
74
|
+
process.exitCode = failed ? 1 : 0;
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
throw new Error(`Unknown github command "${subcommand}".`);
|
|
78
|
+
}
|
|
79
|
+
if (command === "list") {
|
|
80
|
+
console.log("Jobs:");
|
|
81
|
+
for (const jobId of Object.keys(pipeline.jobs).sort()) {
|
|
82
|
+
console.log(` ${jobId}`);
|
|
83
|
+
}
|
|
84
|
+
console.log("Tasks:");
|
|
85
|
+
for (const taskId of Object.keys(pipeline.tasks).sort()) {
|
|
86
|
+
console.log(` ${taskId}`);
|
|
87
|
+
}
|
|
88
|
+
if (Object.keys(pipeline.sources).length > 0) {
|
|
89
|
+
console.log("Sources:");
|
|
90
|
+
for (const sourceId of Object.keys(pipeline.sources).sort()) {
|
|
91
|
+
console.log(` ${sourceId}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (command === "graph") {
|
|
97
|
+
const formatIndex = args.indexOf("--format");
|
|
98
|
+
const format = formatIndex >= 0 ? args[formatIndex + 1] : "json";
|
|
99
|
+
const store = virtualStore(cwd);
|
|
100
|
+
const graphPipeline = await loadAvailableSourceGraph(pipeline, cwd, store);
|
|
101
|
+
const graph = buildGraph(graphPipeline);
|
|
102
|
+
if (format === "json") {
|
|
103
|
+
console.log(JSON.stringify(graph, null, 2));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (format === "dot") {
|
|
107
|
+
console.log("digraph pipeline {");
|
|
108
|
+
for (const task of graph.tasks) {
|
|
109
|
+
if (task.dependsOn.length === 0)
|
|
110
|
+
console.log(` "${task.id}";`);
|
|
111
|
+
for (const dependency of task.dependsOn) {
|
|
112
|
+
console.log(` "${dependency}" -> "${task.id}";`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
console.log("}");
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
throw new Error(`Unsupported graph format "${format}".`);
|
|
119
|
+
}
|
|
120
|
+
if (command === "explain") {
|
|
121
|
+
const taskId = args[0];
|
|
122
|
+
if (!taskId)
|
|
123
|
+
throw new Error(`Usage: ${program} explain <task>`);
|
|
124
|
+
const store = virtualStore(cwd);
|
|
125
|
+
const explainPipeline = await loadAvailableSourceGraph(pipeline, cwd, store);
|
|
126
|
+
const task = explainPipeline.tasks[taskId];
|
|
127
|
+
if (!task)
|
|
128
|
+
throw new Error(`Unknown task "${taskId}".`);
|
|
129
|
+
console.log(JSON.stringify(task, jsonReplacer, 2));
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (command === "sources") {
|
|
133
|
+
const subcommand = args[0] ?? "list";
|
|
134
|
+
if (subcommand === "list") {
|
|
135
|
+
const store = virtualStore(cwd);
|
|
136
|
+
const sources = await resolveSources(pipeline, cwd, store, { sync: false, loadPipelines: false });
|
|
137
|
+
for (const source of Object.values(sources)) {
|
|
138
|
+
const detail = source.definition.type === "git"
|
|
139
|
+
? `${source.definition.url}#${source.definition.ref}`
|
|
140
|
+
: source.definition.path;
|
|
141
|
+
console.log(`${source.id}\t${source.definition.type}\t${detail}\t${source.dir}`);
|
|
142
|
+
}
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (subcommand === "sync") {
|
|
146
|
+
const store = await createStore(cwd);
|
|
147
|
+
const sources = await resolveSources(pipeline, cwd, store, { sync: true, loadPipelines: true });
|
|
148
|
+
for (const source of Object.values(sources)) {
|
|
149
|
+
console.log(`${source.id}\t${source.record.commit ?? "unknown"}\t${source.dir}`);
|
|
150
|
+
}
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
throw new Error(`Unknown sources command "${subcommand}".`);
|
|
154
|
+
}
|
|
155
|
+
if (command === "metadata") {
|
|
156
|
+
const formatIndex = args.indexOf("--format");
|
|
157
|
+
const format = formatIndex >= 0 ? args[formatIndex + 1] : "json";
|
|
158
|
+
if (format !== "json")
|
|
159
|
+
throw new Error(`Unsupported metadata format "${format}".`);
|
|
160
|
+
const includeSources = args.includes("--include-sources");
|
|
161
|
+
const store = virtualStore(cwd);
|
|
162
|
+
const metadata = await readPipelineMetadata(configPath, { cwd, includeSources, store });
|
|
163
|
+
console.log(JSON.stringify(metadata, jsonReplacer, 2));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (command === "matrix") {
|
|
167
|
+
const jobId = args[0];
|
|
168
|
+
if (!jobId)
|
|
169
|
+
throw new Error(`Usage: ${program} matrix <job> --format github`);
|
|
170
|
+
const formatIndex = args.indexOf("--format");
|
|
171
|
+
const format = formatIndex >= 0 ? args[formatIndex + 1] : "github";
|
|
172
|
+
if (format !== "github")
|
|
173
|
+
throw new Error(`Unsupported matrix format "${format}".`);
|
|
174
|
+
console.log(JSON.stringify(matrixForJob(pipeline, jobId)));
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (command === "run") {
|
|
178
|
+
const jobId = args[0];
|
|
179
|
+
if (!jobId)
|
|
180
|
+
throw new Error(`Usage: ${program} run <job>`);
|
|
181
|
+
const graph = tasksForJob(pipeline, jobId);
|
|
182
|
+
console.log(`Running ${pipeline.name}:${jobId} (${graph.executionOrder.join(" -> ")})`);
|
|
183
|
+
const result = await runJob(pipeline, { cwd, jobId, mode: process.env.CI ? "ci" : "manual" });
|
|
184
|
+
console.log(`Pipeline ${result.status}: ${result.id}`);
|
|
185
|
+
process.exitCode = result.status === "passed" ? 0 : 1;
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (command === "run-task") {
|
|
189
|
+
const taskId = args[0];
|
|
190
|
+
if (!taskId)
|
|
191
|
+
throw new Error(`Usage: ${program} run-task <task>`);
|
|
192
|
+
const result = await runSingleTask(pipeline, taskId, { cwd, mode: process.env.CI ? "ci" : "manual" });
|
|
193
|
+
console.log(`Task run ${result.status}: ${result.id}`);
|
|
194
|
+
process.exitCode = result.status === "passed" ? 0 : 1;
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
throw new Error(`Unknown command "${command}".`);
|
|
198
|
+
}
|
|
199
|
+
function printHelp(program) {
|
|
200
|
+
console.log(`Usage:
|
|
201
|
+
${program} run <job>
|
|
202
|
+
${program} run-task <task>
|
|
203
|
+
${program} list
|
|
204
|
+
${program} graph --format json|dot
|
|
205
|
+
${program} explain <task>
|
|
206
|
+
${program} sources list
|
|
207
|
+
${program} sources sync
|
|
208
|
+
${program} metadata --format json [--include-sources]
|
|
209
|
+
${program} matrix <job> --format github
|
|
210
|
+
${program} sync list
|
|
211
|
+
${program} sync generate
|
|
212
|
+
${program} sync check
|
|
213
|
+
${program} sync github list
|
|
214
|
+
${program} sync github generate [--workflow <path>] [--lock <path>]
|
|
215
|
+
${program} sync github check [--workflow <path>] [--lock <path>]
|
|
216
|
+
${program} sync tasks list
|
|
217
|
+
${program} sync tasks generate
|
|
218
|
+
${program} sync tasks check
|
|
219
|
+
${program} github generate [--workflow <path>] [--lock <path>]
|
|
220
|
+
${program} github check [--workflow <path>] [--lock <path>]
|
|
221
|
+
${program} github run
|
|
222
|
+
${program} doctor`);
|
|
223
|
+
}
|
|
224
|
+
async function handleSyncCommand(args, context) {
|
|
225
|
+
const targetNames = new Set(["github", "tasks"]);
|
|
226
|
+
const maybeTarget = args[0];
|
|
227
|
+
const target = targetNames.has(maybeTarget ?? "") ? maybeTarget : undefined;
|
|
228
|
+
const subcommand = target ? args[1] ?? "list" : args[0] ?? "list";
|
|
229
|
+
const rest = target ? args.slice(2) : args.slice(1);
|
|
230
|
+
if (target === "github") {
|
|
231
|
+
await handleSyncGitHubCommand(subcommand, rest, context, { requireConfigured: true });
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
if (target === "tasks") {
|
|
235
|
+
await handleSyncTasksCommand(subcommand, context, { requireConfigured: true });
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (subcommand === "list") {
|
|
239
|
+
let listed = false;
|
|
240
|
+
if (context.pipeline.sync.github.enabled) {
|
|
241
|
+
console.log(`GitHub workflow: ${context.pipeline.sync.github.workflow}`);
|
|
242
|
+
console.log(`GitHub lock: ${context.pipeline.sync.github.lock}`);
|
|
243
|
+
listed = true;
|
|
244
|
+
}
|
|
245
|
+
if (context.pipeline.sync.tasks.enabled) {
|
|
246
|
+
for (const line of describeTaskSync(await renderTaskSync(context.pipeline, context)))
|
|
247
|
+
console.log(line);
|
|
248
|
+
listed = true;
|
|
249
|
+
}
|
|
250
|
+
if (!listed)
|
|
251
|
+
console.log("No sync targets configured.");
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
if (subcommand === "generate") {
|
|
255
|
+
let generated = false;
|
|
256
|
+
if (context.pipeline.sync.github.enabled) {
|
|
257
|
+
await handleSyncGitHubCommand("generate", rest, context, { requireConfigured: false });
|
|
258
|
+
generated = true;
|
|
259
|
+
}
|
|
260
|
+
if (context.pipeline.sync.tasks.enabled) {
|
|
261
|
+
await handleSyncTasksCommand("generate", context, { requireConfigured: false });
|
|
262
|
+
generated = true;
|
|
263
|
+
}
|
|
264
|
+
if (!generated)
|
|
265
|
+
throw new Error("No sync targets configured.");
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
if (subcommand === "check") {
|
|
269
|
+
const issues = [];
|
|
270
|
+
let checked = false;
|
|
271
|
+
if (context.pipeline.sync.github.enabled) {
|
|
272
|
+
const paths = githubGenerationPaths(rest);
|
|
273
|
+
const rendered = await renderGitHubWorkflow(context.pipeline, { ...context, ...paths });
|
|
274
|
+
issues.push(...await checkGitHubWorkflow(rendered, context.cwd));
|
|
275
|
+
checked = true;
|
|
276
|
+
}
|
|
277
|
+
if (context.pipeline.sync.tasks.enabled) {
|
|
278
|
+
const rendered = await renderTaskSync(context.pipeline, context);
|
|
279
|
+
issues.push(...await checkTaskSync(rendered, context.cwd));
|
|
280
|
+
checked = true;
|
|
281
|
+
}
|
|
282
|
+
if (!checked)
|
|
283
|
+
throw new Error("No sync targets configured.");
|
|
284
|
+
if (issues.length > 0) {
|
|
285
|
+
for (const issue of issues)
|
|
286
|
+
console.error(issue);
|
|
287
|
+
process.exitCode = 1;
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
console.log("Sync targets are current.");
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
throw new Error(`Unknown sync command "${subcommand}".`);
|
|
294
|
+
}
|
|
295
|
+
async function handleSyncGitHubCommand(subcommand, args, context, options) {
|
|
296
|
+
if (options.requireConfigured && !context.pipeline.sync.github.enabled) {
|
|
297
|
+
throw new Error("GitHub sync is not configured. Add sync.github to pipeline.ts.");
|
|
298
|
+
}
|
|
299
|
+
const paths = githubGenerationPaths(args);
|
|
300
|
+
const rendered = await renderGitHubWorkflow(context.pipeline, { ...context, ...paths });
|
|
301
|
+
if (subcommand === "list") {
|
|
302
|
+
console.log(`GitHub workflow: ${rendered.workflowPath}`);
|
|
303
|
+
console.log(`GitHub lock: ${rendered.lockPath}`);
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
if (subcommand === "generate") {
|
|
307
|
+
await writeGitHubWorkflow(rendered, context.cwd);
|
|
308
|
+
console.log(`Generated ${rendered.workflowPath}`);
|
|
309
|
+
console.log(`Generated ${rendered.lockPath}`);
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
if (subcommand === "check") {
|
|
313
|
+
const issues = await checkGitHubWorkflow(rendered, context.cwd);
|
|
314
|
+
if (issues.length > 0) {
|
|
315
|
+
for (const issue of issues)
|
|
316
|
+
console.error(issue);
|
|
317
|
+
process.exitCode = 1;
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
console.log("GitHub workflow is current.");
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
throw new Error(`Unknown sync github command "${subcommand}".`);
|
|
324
|
+
}
|
|
325
|
+
async function handleSyncTasksCommand(subcommand, context, options) {
|
|
326
|
+
const rendered = await renderTaskSync(context.pipeline, context);
|
|
327
|
+
if (subcommand === "list") {
|
|
328
|
+
for (const line of describeTaskSync(rendered))
|
|
329
|
+
console.log(line);
|
|
330
|
+
if (options.requireConfigured && !rendered.enabled)
|
|
331
|
+
process.exitCode = 1;
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
if (subcommand === "generate") {
|
|
335
|
+
if (options.requireConfigured && !rendered.enabled)
|
|
336
|
+
throw new Error("Task sync is not configured. Add sync.tasks to pipeline.ts.");
|
|
337
|
+
await writeTaskSync(rendered, context.cwd);
|
|
338
|
+
for (const manifest of rendered.manifests)
|
|
339
|
+
console.log(`Generated ${manifest.path}`);
|
|
340
|
+
console.log(`Generated ${rendered.lockPath}`);
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
if (subcommand === "check") {
|
|
344
|
+
const issues = await checkTaskSync(rendered, context.cwd, { requireConfigured: options.requireConfigured });
|
|
345
|
+
if (issues.length > 0) {
|
|
346
|
+
for (const issue of issues)
|
|
347
|
+
console.error(issue);
|
|
348
|
+
process.exitCode = 1;
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
console.log("Task sync is current.");
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
throw new Error(`Unknown sync tasks command "${subcommand}".`);
|
|
355
|
+
}
|
|
356
|
+
function findPipelineConfig(cwd) {
|
|
357
|
+
for (const fileName of ["pipeline.ts", "pipeline.mjs", "pipeline.js"]) {
|
|
358
|
+
const configPath = resolve(cwd, fileName);
|
|
359
|
+
if (existsSync(configPath))
|
|
360
|
+
return configPath;
|
|
361
|
+
}
|
|
362
|
+
return null;
|
|
363
|
+
}
|
|
364
|
+
function programName() {
|
|
365
|
+
const name = basename(process.argv[1] ?? "async-pipeline");
|
|
366
|
+
return name === "cli.js" ? "async-pipeline" : name;
|
|
367
|
+
}
|
|
368
|
+
function jsonReplacer(_key, value) {
|
|
369
|
+
if (typeof value === "function")
|
|
370
|
+
return "[function]";
|
|
371
|
+
return value;
|
|
372
|
+
}
|
|
373
|
+
function githubGenerationPaths(args) {
|
|
374
|
+
const workflowIndex = args.indexOf("--workflow");
|
|
375
|
+
const lockIndex = args.indexOf("--lock");
|
|
376
|
+
const workflowPath = workflowIndex >= 0 ? args[workflowIndex + 1] : undefined;
|
|
377
|
+
const lockPath = lockIndex >= 0 ? args[lockIndex + 1] : undefined;
|
|
378
|
+
if (workflowIndex >= 0 && !workflowPath)
|
|
379
|
+
throw new Error("Usage: async-pipeline github <generate|check> --workflow <path>");
|
|
380
|
+
if (lockIndex >= 0 && !lockPath)
|
|
381
|
+
throw new Error("Usage: async-pipeline github <generate|check> --lock <path>");
|
|
382
|
+
return { workflowPath, lockPath };
|
|
383
|
+
}
|
|
384
|
+
async function loadAvailableSourceGraph(pipeline, cwd, store) {
|
|
385
|
+
const sources = await resolveSources(pipeline, cwd, store, { sync: false, loadPipelines: true });
|
|
386
|
+
const sourcePipelines = {};
|
|
387
|
+
for (const [sourceId, resolved] of Object.entries(sources)) {
|
|
388
|
+
if (!resolved.pipeline)
|
|
389
|
+
continue;
|
|
390
|
+
sourcePipelines[sourceId] = {
|
|
391
|
+
pipeline: resolved.pipeline,
|
|
392
|
+
context: sourceContext(resolved)
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
return composePipelines(pipeline, sourcePipelines);
|
|
396
|
+
}
|
|
397
|
+
function virtualStore(root) {
|
|
398
|
+
return {
|
|
399
|
+
root,
|
|
400
|
+
asyncDir: resolve(root, ".async"),
|
|
401
|
+
runsDir: resolve(root, ".async", "runs"),
|
|
402
|
+
cacheDir: resolve(root, ".async", "cache", "tasks"),
|
|
403
|
+
sourcesDir: resolve(root, ".async", "sources")
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
main().catch((error) => {
|
|
407
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
408
|
+
process.exitCode = 1;
|
|
409
|
+
});
|
|
410
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAqBxD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { HostRunnerAdapter } from "./runner.js";
|
|
2
|
+
export async function runDoctor() {
|
|
3
|
+
const host = new HostRunnerAdapter();
|
|
4
|
+
const checks = [];
|
|
5
|
+
for (const tool of ["node", "pnpm"]) {
|
|
6
|
+
const available = await host.checkTool(tool);
|
|
7
|
+
checks.push({
|
|
8
|
+
name: tool,
|
|
9
|
+
status: available ? "pass" : "fail",
|
|
10
|
+
message: available ? `${tool} is available.` : `${tool} is missing.`
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
const limaAvailable = await host.checkTool("limactl");
|
|
14
|
+
checks.push({
|
|
15
|
+
name: "limactl",
|
|
16
|
+
status: limaAvailable ? "pass" : "warn",
|
|
17
|
+
message: limaAvailable ? "Lima is available." : "Lima is not installed; Lima-backed tasks will be unavailable."
|
|
18
|
+
});
|
|
19
|
+
return checks;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQhD,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,IAAI,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACnC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,cAAc;SACrE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACvC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,+DAA+D;KAChH,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { EnvValue, GitHubJobConfig, NormalizedJob, NormalizedPipeline } from "../core/index.js";
|
|
2
|
+
export declare const GITHUB_WORKFLOW_PATH = ".github/workflows/async-pipeline.yml";
|
|
3
|
+
export declare const GITHUB_LOCK_PATH = ".github/async-pipeline.lock.json";
|
|
4
|
+
export interface GitHubRenderOptions {
|
|
5
|
+
cwd: string;
|
|
6
|
+
configPath: string;
|
|
7
|
+
workflowPath?: string;
|
|
8
|
+
lockPath?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface GitHubLock {
|
|
11
|
+
version: number;
|
|
12
|
+
generator: string;
|
|
13
|
+
config: string;
|
|
14
|
+
workflow: string;
|
|
15
|
+
hash: string;
|
|
16
|
+
generatedAt: string;
|
|
17
|
+
triggers: Record<string, unknown>;
|
|
18
|
+
jobs: Array<{
|
|
19
|
+
id: string;
|
|
20
|
+
target: string[];
|
|
21
|
+
trigger: string[];
|
|
22
|
+
env: Record<string, EnvValue>;
|
|
23
|
+
github?: GitHubJobConfig;
|
|
24
|
+
if?: string;
|
|
25
|
+
}>;
|
|
26
|
+
packageManager: string;
|
|
27
|
+
buildCommand?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface GitHubRenderResult {
|
|
30
|
+
workflowPath: string;
|
|
31
|
+
lockPath: string;
|
|
32
|
+
workflow: string;
|
|
33
|
+
lock: GitHubLock;
|
|
34
|
+
}
|
|
35
|
+
export interface GitHubEventContext {
|
|
36
|
+
eventName: string;
|
|
37
|
+
ref?: string;
|
|
38
|
+
baseRef?: string;
|
|
39
|
+
headRef?: string;
|
|
40
|
+
schedule?: string;
|
|
41
|
+
payload?: unknown;
|
|
42
|
+
}
|
|
43
|
+
export declare function renderGitHubWorkflow(pipeline: NormalizedPipeline, options: GitHubRenderOptions): Promise<GitHubRenderResult>;
|
|
44
|
+
export declare function writeGitHubWorkflow(result: GitHubRenderResult, cwd: string): Promise<void>;
|
|
45
|
+
export declare function checkGitHubWorkflow(result: GitHubRenderResult, cwd: string): Promise<string[]>;
|
|
46
|
+
export declare function readGitHubEventContext(env: NodeJS.ProcessEnv): Promise<GitHubEventContext>;
|
|
47
|
+
export declare function jobsForGitHubEvent(pipeline: NormalizedPipeline, context: GitHubEventContext): NormalizedJob[];
|
|
48
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAS,aAAa,EAAE,kBAAkB,EAAgC,MAAM,sBAAsB,CAAC;AAG9I,eAAO,MAAM,oBAAoB,yCAAyC,CAAC;AAC3E,eAAO,MAAM,gBAAgB,qCAAqC,CAAC;AAGnE,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,eAAe,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvI,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsClI;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhG;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwBpG;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAehG;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,GAAG,aAAa,EAAE,CAgB7G"}
|