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
|
#!/usr/bin/env -S deno run --allow-env --allow-net --allow-run
import { getRequiredEnv, getStdout, validateIdentifier } from "@liz-ci/utils";
const getRequestLogger = (req: Request) => {
const id = crypto.randomUUID();
const url = new URL(req.url);
const method = req.method;
const getPrefix = () =>
`[${new Date().toISOString()}] Request [${id}] @ [${url}] -X [${method}] |`;
return {
log: (...args: unknown[]) => console.log(getPrefix(), ...args),
error: (...args: unknown[]) => console.error(getPrefix(), ...args),
};
};
const addr = { port: 9000, hostname: "0.0.0.0" };
Deno.serve(addr, async (req) => {
const logger = getRequestLogger(req);
logger.log("Request initiated");
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)) {
return new Response("invalid request", {
status: 400,
});
}
const laminar = await getStdout([
"laminarc",
"queue",
"checkout_ci",
`remote="${remote}"`,
`rev="${rev}"`,
`refname="${refname}"`,
]);
logger.log(`successful queue :D\n` + laminar);
return new Response(laminar, {
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("Request finished.");
}
});
|