#!/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; } }