Deployment api
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
import testAuth from "../auth";
|
||||||
|
import { StatusCodes } from "http-status-codes";
|
||||||
|
import { getDeployments } from "@/core/deployment";
|
||||||
|
import { getApplications } from "@/core/application";
|
||||||
|
|
||||||
|
export async function GET(req: NextRequest): Promise<NextResponse> {
|
||||||
|
const auth = await testAuth(req);
|
||||||
|
|
||||||
|
if (auth) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{ message: auth },
|
||||||
|
{ status: StatusCodes.UNAUTHORIZED }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const apps = await getApplications();
|
||||||
|
|
||||||
|
const applications = await getDeployments(apps);
|
||||||
|
|
||||||
|
return NextResponse.json({
|
||||||
|
message: "ok",
|
||||||
|
applications,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function POST(req: NextRequest): Promise<NextResponse> {
|
||||||
|
const auth = await testAuth(req);
|
||||||
|
const { name, repo, nodeId }: { name: string; repo: string; nodeId: string } =
|
||||||
|
await req.json();
|
||||||
|
|
||||||
|
if (auth) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{ message: auth },
|
||||||
|
{ status: StatusCodes.UNAUTHORIZED }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!name || !repo || !nodeId) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{ message: "Body missing name, repo, nodeId" },
|
||||||
|
{ status: StatusCodes.BAD_REQUEST }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const res = await installApp(name, repo, nodeId);
|
||||||
|
|
||||||
|
return NextResponse.json({
|
||||||
|
message: "ok",
|
||||||
|
...res,
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -14,7 +14,7 @@ import {
|
|||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { Application, Deployment } from "@/lib/types";
|
import { Application, Deployment } from "@/lib/types";
|
||||||
import { getDeployments } from "@/core/deployment";
|
import { getDeployments } from "@/lib/dockship/deploy";
|
||||||
import { getApplications } from "@/lib/dockship/application";
|
import { getApplications } from "@/lib/dockship/application";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
@@ -24,9 +24,8 @@ export default function DeploymentsPage() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetch = async () => {
|
const fetch = async () => {
|
||||||
const apps = await getApplications();
|
setApplications(await getApplications());
|
||||||
setApplications(apps);
|
setDeployments((await getDeployments()).filter((d) => d !== null));
|
||||||
setDeployments((await getDeployments(apps)).filter((d) => d !== null));
|
|
||||||
};
|
};
|
||||||
fetch();
|
fetch();
|
||||||
}, []);
|
}, []);
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
"use server";
|
||||||
|
|
||||||
|
import { Deployment } from "@/lib/types";
|
||||||
|
import { getNodes } from "./node";
|
||||||
|
import axios from "axios";
|
||||||
|
|
||||||
|
export async function getDeployments(): Promise<(null | Deployment)[]> {
|
||||||
|
const nodes = await getNodes();
|
||||||
|
|
||||||
|
return (
|
||||||
|
await Promise.all(
|
||||||
|
nodes.map(
|
||||||
|
async (n) =>
|
||||||
|
await (
|
||||||
|
await axios.get(`http://${n.ip}:3000/api/deploy`, {
|
||||||
|
headers: { Authorization: `ApiKey ${n.key}` },
|
||||||
|
})
|
||||||
|
).data.applications
|
||||||
|
)
|
||||||
|
)
|
||||||
|
).flat();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user