summaryrefslogtreecommitdiff
path: root/hooks
diff options
context:
space:
mode:
Diffstat (limited to 'hooks')
-rw-r--r--hooks/Dockerfile3
-rw-r--r--hooks/deno.json4
-rw-r--r--hooks/mod.ts57
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 });
+});