From c747486e23ea0a601d00bfe58c72f6e0f0b6d17b Mon Sep 17 00:00:00 2001 From: ZUHOWKS Date: Wed, 16 Apr 2025 00:38:49 +0200 Subject: [PATCH] Fix repositery workdir NodeJS app for Dockerfile --- src/services/helpers/docker_helper.rs | 60 ++++++++++++++++----------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/src/services/helpers/docker_helper.rs b/src/services/helpers/docker_helper.rs index 7caa8ed..72057fd 100644 --- a/src/services/helpers/docker_helper.rs +++ b/src/services/helpers/docker_helper.rs @@ -468,15 +468,15 @@ pub fn generate_and_write_dockerfile( } else if uses_npm { "npm" } else { - "bun" + println!("Unknown package manager"); + "npm" }; // Choose the base image based on the package manager let base_image = match package_manager { - "yarn" => "node:18-alpine".to_string(), - "pnpm" => "node:18-alpine".to_string(), - "npm" => "node:18-alpine".to_string(), - _ => "oven/bun:latest".to_string(), + "yarn" => "node:20-alpine".to_string(), + "pnpm" => "node:20-alpine".to_string(), + _ => "node:20-alpine".to_string(), }; // Additional setup commands for package managers @@ -489,6 +489,13 @@ pub fn generate_and_write_dockerfile( _ => "".to_string(), // No additional setup for npm or bun }; + let package_lock: String = match package_manager { + "yarn" => "yarn.lock".to_string(), + "pnpm" => "pnpm-lock.yaml".to_string(), + "npm" => "package-lock.json".to_string(), + _ => "".to_string(), // Default case for unknown package managers + }; + // Determine the appropriate install command based on the package manager let install_cmd = if !install_command.is_empty() { install_command.to_string() @@ -519,26 +526,29 @@ pub fn generate_and_write_dockerfile( }; format!( - r#"FROM {} -WORKDIR {} -{} -{} -{} -COPY package.json ./ -RUN {} -COPY . . -{} -EXPOSE {} -{}"#, - base_image, - app_workdir, - labels, - env_vars, - setup_cmd, - install_cmd, - build_cmd, - deploy_port, - run_cmd + r#"FROM {base_image} +WORKDIR {app_type} +{labels} +{env_vars} +{setup_cmd} +COPY {app_workdir}/package.json ./package.json +COPY {app_workdir}/{package_lock} ./{package_lock} +RUN {install_cmd} +COPY {app_workdir}/ ./ +{build_cmd} +EXPOSE {deploy_port} +{run_cmd}"#, + base_image = base_image, + app_workdir = app_workdir, + app_type = app_type, + labels = labels, + env_vars = env_vars, + setup_cmd = setup_cmd, + install_cmd = install_cmd, + build_cmd = build_cmd, + deploy_port = deploy_port, + run_cmd = run_cmd, + package_lock = package_lock ) } "python" => {