fix: error handling

This commit is contained in:
Lorenzo Migliorero 2024-08-01 10:13:29 +02:00
parent 3fdd3ddc74
commit e6f9867500
No known key found for this signature in database
GPG Key ID: 9A9F1AD60C05DFE2

View File

@ -1,20 +1,28 @@
import type { WriteStream } from "node:fs"; import type { WriteStream } from "node:fs";
import path from "node:path"; import path from "node:path";
import { buildStatic } from "@/server/utils/builders/static"; import { buildStatic } from "@/server/utils/builders/static";
import { nanoid } from "nanoid";
import type { ApplicationNested } from "."; import type { ApplicationNested } from ".";
import { prepareEnvironmentVariables } from "../docker/utils"; import { prepareEnvironmentVariables } from "../docker/utils";
import { getBuildAppDirectory } from "../filesystem/directory"; import { getBuildAppDirectory } from "../filesystem/directory";
import { spawnAsync } from "../process/spawnAsync"; import { spawnAsync } from "../process/spawnAsync";
// TODO: integrate in the vps sudo chown -R $(whoami) ~/.docker
export const buildNixpacks = async ( export const buildNixpacks = async (
application: ApplicationNested, application: ApplicationNested,
writeStream: WriteStream, writeStream: WriteStream,
) => { ) => {
const { env, appName, publishDirectory } = application; const { env, appName, publishDirectory } = application;
const buildAppDirectory = getBuildAppDirectory(application);
const buildAppDirectory = getBuildAppDirectory(application);
const buildContainerId = `${appName}-${nanoid(10)}`;
const envVariables = prepareEnvironmentVariables(env); const envVariables = prepareEnvironmentVariables(env);
const writeToStream = (data: string) => {
if (writeStream.writable) {
writeStream.write(data);
}
};
try { try {
const args = ["build", buildAppDirectory, "--name", appName]; const args = ["build", buildAppDirectory, "--name", appName];
@ -27,11 +35,7 @@ export const buildNixpacks = async (
args.push("--no-error-without-start"); args.push("--no-error-without-start");
} }
await spawnAsync("nixpacks", args, (data) => { await spawnAsync("nixpacks", args, writeToStream);
if (writeStream.writable) {
writeStream.write(data);
}
});
/* /*
Run the container with the image created by nixpacks, Run the container with the image created by nixpacks,
@ -42,38 +46,28 @@ export const buildNixpacks = async (
if (publishDirectory) { if (publishDirectory) {
await spawnAsync( await spawnAsync(
"docker", "docker",
["create", "--name", `${appName}-temp`, appName], ["create", "--name", buildContainerId, appName],
(data) => { writeToStream,
if (writeStream.writable) {
writeStream.write(data);
}
},
); );
await spawnAsync( await spawnAsync(
"docker", "docker",
[ [
"cp", "cp",
`${appName}-temp:/app/${publishDirectory}`, `${buildContainerId}:/app/${publishDirectory}`,
path.join(buildAppDirectory, publishDirectory), path.join(buildAppDirectory, publishDirectory),
], ],
(data) => { writeToStream,
if (writeStream.writable) {
writeStream.write(data);
}
},
); );
await spawnAsync("docker", ["rm", `${appName}-temp`], (data) => { await spawnAsync("docker", ["rm", buildContainerId], writeToStream);
if (writeStream.writable) {
writeStream.write(data);
}
});
await buildStatic(application, writeStream); await buildStatic(application, writeStream);
} }
return true; return true;
} catch (e) { } catch (e) {
await spawnAsync("docker", ["rm", buildContainerId], writeToStream);
throw e; throw e;
} }
}; };