import { MARKER_PREFIX } from "./script";
type Marker =
| { type: "step-start"; index: number }
| { type: "step-end"; index: number; code: number }
| { type: "step-skip"; index: number }
| { type: "artifact"; name: string; path: string }
| { type: "job-end"; failed: boolean }
| { type: "setup-start" }
| { type: "setup-end"; code: number };
export function parseMarker(line: string): Marker | null {
if (!line.startsWith(MARKER_PREFIX)) return null;
const [type, ...args] = line.slice(MARKER_PREFIX.length).trim().split(" ");
const number = (value: string | undefined) => Number(value ?? "0");
switch (type) {
case "step-start":
return { type, index: number(args[0]) };
case "step-end":
return { type, index: number(args[0]), code: number(args[1]) };
case "step-skip":
return { type, index: number(args[0]) };
case "artifact":
return { type, name: args[0] ?? "artifact", path: args.slice(1).join(" ").replace(/^"|"$/g, "") };
case "job-end":
return { type, failed: args[0] !== "0" };
case "setup-start":
return { type };
case "setup-end":
return { type, code: number(args[0]) };
default:
return null;
}
}