diff options
Diffstat (limited to 'hooks')
-rw-r--r-- | hooks/Dockerfile | 3 | ||||
-rw-r--r-- | hooks/deno.json | 4 | ||||
-rw-r--r-- | hooks/mod.ts | 57 |
3 files changed, 64 insertions, 0 deletions
diff --git a/hooks/Dockerfile b/hooks/Dockerfile new file mode 100644 index 0000000..a287e2f --- /dev/null +++ b/hooks/Dockerfile @@ -0,0 +1,3 @@ +FROM oci.liz.coffee/img/liz-ci:release as hooks + +CMD [ "deno", "run", "--allow-env", "--allow-net", "/app/hooks/mod.ts" ] diff --git a/hooks/deno.json b/hooks/deno.json new file mode 100644 index 0000000..c4e8fca --- /dev/null +++ b/hooks/deno.json @@ -0,0 +1,4 @@ +{ + "name": "@liz-ci/hooks", + "exports": "./mod.ts" +} diff --git a/hooks/mod.ts b/hooks/mod.ts new file mode 100644 index 0000000..f432b72 --- /dev/null +++ b/hooks/mod.ts @@ -0,0 +1,57 @@ +#!/usr/bin/env -S deno run --allow-env --allow-net + +import { getStdout, validateIdentifier } from "@liz-ci/utils"; + +const addr = { port: 9000, hostname: "0.0.0.0" }; + +Deno.serve(addr, async (req) => { + const { pathname } = new URL(req.url); + if (pathname === "/health") { + try { + await getStdout(["laminarc", "show-jobs"]); + return new Response("think im healthy. lets get to work.", { + status: 200, + }); + } catch (e) { + console.error(e); + return new Response("i need to eat more vegetables -.-", { 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, + }); + } + + try { + const laminar = await getStdout([ + "laminarc", + "queue", + "checkout_ci", + `remote="${remote}"`, + `rev="${rev}"`, + `refname="${refname}"`, + ]); + console.log(`successful ci queue :D\n` + laminar); + return new Response(laminar, { + status: 200, + }); + } catch (e) { + console.error(e); + return new Response("womp womp D:", { + status: 500, + }); + } + } + + return new Response("ahhhh idkkkk", { status: 404 }); +}); |