summaryrefslogtreecommitdiff
path: root/hooks/mod.ts
blob: bef822e069c5372866b69d6e3e1b1b6c66499b60 (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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/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)) {
        logger.log("invalid reqwest\n");
        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\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.");
  }
});