summaryrefslogtreecommitdiff
path: root/worker/scripts/run_pipeline
blob: abb13b39d4f62096e5d1ceb69ace102b66fc46a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env -S deno run --allow-env --allow-net --allow-run --allow-read --allow-write

import { PipelineImpl } from "@liz-ci/model";
import {
  getRequiredEnv,
  getStdout,
  invalidExecutionEntriesOf,
  loggerWithPrefix,
} from "@liz-ci/utils";

const pipelinePath = getRequiredEnv("pipeline");
const logger = loggerWithPrefix(() =>
  `[${new Date().toISOString()}] [run_pipeline.${pipelinePath}]`
);

const run = async () => {
  logger.log("starting pipeline execution~ time to work hard!");

  const stages = await (Deno.readTextFile(pipelinePath))
    .then(PipelineImpl.from)
    .then((pipeline) => pipeline.getStages());

  for (const stage of stages) {
    logger.log("executing stage. do your best little stage :>", stage);

    await Promise.all(
      stage.parallelJobs.map(async (job, jobIdx) => {
        logger.log(`let's do this little job ok!! ${jobIdx}`, job);
        const invalidArgs = invalidExecutionEntriesOf(job.arguments);
        if (invalidArgs.length) {
          logger.error(`oh nooes`, invalidArgs);
          throw new Error("invalid job arguments");
        }

        const result = await getStdout(job.type, { env: job.arguments });
        logger.log(jobIdx, "brought something to you! look :D", { result });
      }),
    );
  }

  logger.log("all done! everything worked! yay~ (⑅˘꒳˘)");
};

if (import.meta.main) {
  try {
    await run();
  } catch (e) {
    logger.error("womp womp D:", e);
    throw e;
  }
}