Merge pull request #249 from lorenzomigliorero/feat/buildargs

feat: buildargs
This commit is contained in:
Mauricio Siu
2024-07-22 21:19:14 -06:00
committed by GitHub
11 changed files with 3101 additions and 119 deletions

View File

@@ -187,6 +187,7 @@ export const applicationRouter = createTRPCRouter({
.mutation(async ({ input }) => {
await updateApplication(input.applicationId, {
env: input.env,
buildArgs: input.buildArgs,
});
return true;
}),

View File

@@ -107,6 +107,7 @@ export const applications = pgTable("application", {
.unique(),
description: text("description"),
env: text("env"),
buildArgs: text("buildArgs"),
memoryReservation: integer("memoryReservation"),
memoryLimit: integer("memoryLimit"),
cpuReservation: integer("cpuReservation"),
@@ -275,6 +276,7 @@ const createSchema = createInsertSchema(applications, {
applicationId: z.string(),
autoDeploy: z.boolean(),
env: z.string().optional(),
buildArgs: z.string().optional(),
name: z.string().min(1),
description: z.string().optional(),
memoryReservation: z.number().optional(),
@@ -375,6 +377,7 @@ export const apiSaveEnvironmentVariables = createSchema
.pick({
applicationId: true,
env: true,
buildArgs: true,
})
.required();

View File

@@ -1,5 +1,6 @@
import type { WriteStream } from "node:fs";
import { docker } from "@/server/constants";
import { prepareBuildArgs } from "@/server/utils/docker/utils";
import * as tar from "tar-fs";
import type { ApplicationNested } from ".";
import { getBuildAppDirectory } from "../filesystem/directory";
@@ -9,7 +10,7 @@ export const buildCustomDocker = async (
application: ApplicationNested,
writeStream: WriteStream,
) => {
const { appName, env } = application;
const { appName, env, buildArgs } = application;
const dockerFilePath = getBuildAppDirectory(application);
try {
const image = `${appName}`;
@@ -21,6 +22,7 @@ export const buildCustomDocker = async (
const stream = await docker.buildImage(tarStream, {
t: image,
buildargs: prepareBuildArgs(buildArgs),
dockerfile: dockerFilePath.substring(dockerFilePath.lastIndexOf("/") + 1),
});

View File

@@ -161,6 +161,21 @@ export const removeService = async (appName: string) => {
export const prepareEnvironmentVariables = (env: string | null) =>
Object.entries(parse(env ?? "")).map(([key, value]) => `${key}=${value}`);
export const prepareBuildArgs = (input: string | null) => {
const pairs = (input ?? "").split("\n");
const jsonObject: Record<string, string> = {};
for (const pair of pairs) {
const [key, value] = pair.split("=");
if (key && value) {
jsonObject[key] = value;
}
}
return jsonObject;
};
export const generateVolumeMounts = (mounts: ApplicationNested["mounts"]) => {
if (!mounts || mounts.length === 0) {
return [];