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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
#!/usr/bin/env -S deno run --allow-env --allow-net --allow-run
import {
getRequiredEnv,
getStdout,
loggerWithPrefix,
validateIdentifier,
} from "@liz-ci/utils";
const getRequestLogger = (req: Request) => {
const url = new URL(req.url);
const traceId = crypto.randomUUID();
const getPrefix = () =>
`[${
new Date().toISOString()
}] RequestTrace=[${traceId}] @ [${url.pathname}] -X [${req.method}] |`;
return loggerWithPrefix(getPrefix);
};
const addr = { port: 9000, hostname: "0.0.0.0" };
Deno.serve(addr, async (req) => {
const logger = getRequestLogger(req);
logger.log("start");
try {
const { pathname } = new URL(req.url);
if (pathname === "/health") {
try {
getRequiredEnv("LAMINAR_HOST");
await getStdout(["laminarc", "show-jobs"]);
return new Response("think im healthy!! lets get to work.\n", {
status: 200,
});
} catch (e) {
logger.error(e);
return new Response("i need to eat more vegetables -.-\n", {
status: 500,
});
}
}
if (req.method !== "POST") {
return new Response("invalid method", {
status: 405,
});
}
if (pathname === "/checkout_ci") {
const { remote, rev, refname } = await req.json();
if (![remote, rev, refname].every(validateIdentifier)) {
logger.log("invalid reqwest");
return new Response("invalid reqwest >:D\n", {
status: 400,
});
}
const laminar = await getStdout([
"laminarc",
"queue",
"checkout_ci",
`remote="${remote}"`,
`rev="${rev}"`,
`refname="${refname}"`,
]);
logger.log(`successful queue :D`, laminar);
return new Response(laminar + "\n", {
status: 200,
});
}
return new Response("idk what that is bro :((\n", { status: 404 });
} catch (e) {
logger.error("uncaught exception", e);
return new Response("womp womp D:\n", { status: 500 });
} finally {
logger.log("finish");
}
});
|