145 lines · 3.9 KB · TypeScript
RawDownload
import fs, { promises as fsPromises } from "node:fs";import path from "node:path";import { paths } from "@dokploy/server/constants";import type { Application } from "@dokploy/server/services/application";import { execAsync, execAsyncRemote } from "../process/execAsync"; export const recreateDirectory = async (pathFolder: string): Promise<void> => {	try {		await removeDirectoryIfExistsContent(pathFolder);		await fsPromises.mkdir(pathFolder, { recursive: true });	} catch (error) {		console.error(`Error recreating directory '${pathFolder}':`, error);	}}; export const recreateDirectoryRemote = async (	pathFolder: string,	serverId: string | null,): Promise<void> => {	try {		await execAsyncRemote(			serverId,			`rm -rf ${pathFolder}; mkdir -p ${pathFolder}`,		);	} catch (error) {		console.error(`Error recreating directory '${pathFolder}':`, error);	}}; export const removeDirectoryIfExistsContent = async (	path: string,): Promise<void> => {	if (fs.existsSync(path) && fs.readdirSync(path).length !== 0) {		await execAsync(`rm -rf ${path}`);	}}; export const removeFileOrDirectory = async (path: string) => {	try {		await execAsync(`rm -rf ${path}`);	} catch (error) {		console.error(`Error removing ${path}: ${error}`);		throw error;	}}; export const removeDirectoryCode = async (	appName: string,	serverId?: string | null,) => {	const { APPLICATIONS_PATH } = paths(!!serverId);	const directoryPath = path.join(APPLICATIONS_PATH, appName);	const command = `rm -rf ${directoryPath}`;	try {		if (serverId) {			await execAsyncRemote(serverId, command);		} else {			await execAsync(command);		}	} catch (error) {		console.error(`Error removing ${directoryPath}: ${error}`);		throw error;	}}; export const removeComposeDirectory = async (	appName: string,	serverId?: string | null,) => {	const { COMPOSE_PATH } = paths(!!serverId);	const directoryPath = path.join(COMPOSE_PATH, appName);	const command = `rm -rf ${directoryPath}`;	try {		if (serverId) {			await execAsyncRemote(serverId, command);		} else {			await execAsync(command);		}	} catch (error) {		console.error(`Error removing ${directoryPath}: ${error}`);		throw error;	}}; export const removeMonitoringDirectory = async (	appName: string,	serverId?: string | null,) => {	const { MONITORING_PATH } = paths(!!serverId);	const directoryPath = path.join(MONITORING_PATH, appName);	const command = `rm -rf ${directoryPath}`;	try {		if (serverId) {			await execAsyncRemote(serverId, command);		} else {			await execAsync(command);		}	} catch (error) {		console.error(`Error removing ${directoryPath}: ${error}`);		throw error;	}}; export const getBuildAppDirectory = (application: Application) => {	const serverId = application.buildServerId || application.serverId;	const { APPLICATIONS_PATH } = paths(!!serverId);	const { appName, buildType, sourceType, customGitBuildPath, dockerfile } =		application;	let buildPath = ""; 	if (sourceType === "github") {		buildPath = application?.buildPath || "";	} else if (sourceType === "gitlab") {		buildPath = application?.gitlabBuildPath || "";	} else if (sourceType === "bitbucket") {		buildPath = application?.bitbucketBuildPath || "";	} else if (sourceType === "gitea") {		buildPath = application?.giteaBuildPath || "";	} else if (sourceType === "drop") {		buildPath = application?.dropBuildPath || "";	} else if (sourceType === "git") {		buildPath = customGitBuildPath || "";	}	if (buildType === "dockerfile") {		return path.join(			APPLICATIONS_PATH,			appName,			"code",			buildPath ?? "",			dockerfile || "Dockerfile",		);	} 	return path.join(APPLICATIONS_PATH, appName, "code", buildPath ?? "");}; export const getDockerContextPath = (application: Application) => {	const { APPLICATIONS_PATH } = paths(!!application.serverId);	const { appName, dockerContextPath } = application; 	if (!dockerContextPath) {		return null;	}	return path.join(APPLICATIONS_PATH, appName, "code", dockerContextPath);};