feat: add docker registry upload

This commit is contained in:
Mauricio Siu
2024-05-13 01:18:27 -06:00
parent e9245cee2c
commit 6c792564ae
41 changed files with 18267 additions and 1072 deletions

View File

@@ -20,6 +20,7 @@ import { securityRouter } from "./routers/security";
import { portRouter } from "./routers/port";
import { adminRouter } from "./routers/admin";
import { dockerRouter } from "./routers/docker";
import { registryRouter } from "./routers/registry";
/**
* This is the primary router for your server.
*
@@ -47,6 +48,7 @@ export const appRouter = createTRPCRouter({
security: securityRouter,
redirects: redirectsRouter,
port: portRouter,
registry: registryRouter,
});
// export type definition of API

View File

@@ -7,12 +7,16 @@ import {
} from "@/server/db/schema";
import {
createRegistry,
findAllRegistry,
findRegistryById,
removeRegistry,
updaterRegistry,
} from "../services/registry";
import { adminProcedure, createTRPCRouter, protectedProcedure } from "../trpc";
import { TRPCError } from "@trpc/server";
import { manageRegistry } from "@/server/utils/traefik/registry";
import { initializeRegistry } from "@/server/setup/registry-setup";
import { docker } from "@/server/constants";
export const registryRouter = createTRPCRouter({
create: adminProcedure
@@ -42,25 +46,41 @@ export const registryRouter = createTRPCRouter({
return true;
}),
all: protectedProcedure.query(async () => {
return await findAllRegistry();
}),
findOne: adminProcedure.input(apiFindOneRegistry).query(async ({ input }) => {
return await findRegistryById(input.registryId);
}),
testRegistry: protectedProcedure
.input(apiCreateRegistry)
.mutation(async ({ input }) => {
try {
const result = await docker.checkAuth({
username: input.username,
password: input.password,
serveraddress: input.registryUrl,
});
enableSelfHostedRegistry: protectedProcedure
return true;
} catch (error) {
return false;
}
}),
enableSelfHostedRegistry: adminProcedure
.input(apiEnableSelfHostedRegistry)
.mutation(async ({ input }) => {
// return await createRegistry({
// username:"CUSTOM"
// adminId: input.adminId,
// });
// const application = await findRegistryById(input.registryId);
// const result = await db
// .update(registry)
// .set({
// selfHosted: true,
// })
// .where(eq(registry.registryId, input.registryId))
// .returning();
// return result[0];
const selfHostedRegistry = await createRegistry({
...input,
registryName: "Self Hosted Registry",
registryType: "selfHosted",
imagePrefix: null,
});
await manageRegistry(selfHostedRegistry);
await initializeRegistry(input.username, input.password);
return selfHostedRegistry;
}),
});

View File

@@ -61,6 +61,7 @@ export const findApplicationById = async (applicationId: string) => {
redirects: true,
security: true,
ports: true,
registry: true,
},
});
if (!application) {

View File

@@ -2,14 +2,20 @@ import { type apiCreateRegistry, registry } from "@/server/db/schema";
import { TRPCError } from "@trpc/server";
import { db } from "@/server/db";
import { eq } from "drizzle-orm";
import { findAdmin } from "./admin";
import { removeSelfHostedRegistry } from "@/server/utils/traefik/registry";
import { removeService } from "@/server/utils/docker/utils";
export type Registry = typeof registry.$inferSelect;
export const createRegistry = async (input: typeof apiCreateRegistry._type) => {
const admin = await findAdmin();
const newRegistry = await db
.insert(registry)
.values({
...input,
adminId: admin.adminId,
})
.returning()
.then((value) => value[0]);
@@ -38,6 +44,11 @@ export const removeRegistry = async (registryId: string) => {
});
}
if (response.registryType === "selfHosted") {
await removeSelfHostedRegistry();
await removeService("dokploy-registry");
}
return response;
} catch (error) {
throw new TRPCError({
@@ -82,3 +93,8 @@ export const findRegistryById = async (registryId: string) => {
}
return registryResponse;
};
export const findAllRegistry = async () => {
const registryResponse = await db.query.registry.findMany();
return registryResponse;
};