Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 35 additions & 25 deletions src/services/helpers/docker_helper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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()
Expand Down Expand Up @@ -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" => {
Expand Down