refactor(deployment): update environment file handling in Docker commands to use '/artifacts/' path and streamline variable management
This commit is contained in:
@@ -479,7 +479,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
if (filled($this->env_filename)) {
|
if (filled($this->env_filename)) {
|
||||||
$services = collect(data_get($composeFile, 'services', []));
|
$services = collect(data_get($composeFile, 'services', []));
|
||||||
$services = $services->map(function ($service, $name) {
|
$services = $services->map(function ($service, $name) {
|
||||||
$service['env_file'] = [$this->env_filename];
|
$service['env_file'] = ["/artifacts/{$this->env_filename}"];
|
||||||
|
|
||||||
return $service;
|
return $service;
|
||||||
});
|
});
|
||||||
@@ -504,8 +504,8 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$command = "{$this->coolify_variables} docker compose";
|
$command = "{$this->coolify_variables} docker compose";
|
||||||
if ($this->env_filename) {
|
if (filled($this->env_filename)) {
|
||||||
$command .= " --env-file {$this->workdir}/{$this->env_filename}";
|
$command .= " --env-file /artifacts/{$this->env_filename}";
|
||||||
}
|
}
|
||||||
if ($this->force_rebuild) {
|
if ($this->force_rebuild) {
|
||||||
$command .= " --project-name {$this->application->uuid} --project-directory {$this->workdir} -f {$this->workdir}{$this->docker_compose_location} build --pull --no-cache";
|
$command .= " --project-name {$this->application->uuid} --project-directory {$this->workdir} -f {$this->workdir}{$this->docker_compose_location} build --pull --no-cache";
|
||||||
@@ -550,8 +550,8 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
$this->docker_compose_location = '/docker-compose.yaml';
|
$this->docker_compose_location = '/docker-compose.yaml';
|
||||||
|
|
||||||
$command = "{$this->coolify_variables} docker compose";
|
$command = "{$this->coolify_variables} docker compose";
|
||||||
if ($this->env_filename) {
|
if (filled($this->env_filename)) {
|
||||||
$command .= " --env-file {$server_workdir}/{$this->env_filename}";
|
$command .= " --env-file /artifacts/{$this->env_filename}";
|
||||||
}
|
}
|
||||||
$command .= " --project-directory {$server_workdir} -f {$server_workdir}{$this->docker_compose_location} up -d";
|
$command .= " --project-directory {$server_workdir} -f {$server_workdir}{$this->docker_compose_location} up -d";
|
||||||
$this->execute_remote_command(
|
$this->execute_remote_command(
|
||||||
@@ -567,8 +567,8 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
} else {
|
} else {
|
||||||
$command = "{$this->coolify_variables} docker compose";
|
$command = "{$this->coolify_variables} docker compose";
|
||||||
if ($this->preserveRepository) {
|
if ($this->preserveRepository) {
|
||||||
if ($this->env_filename) {
|
if (filled($this->env_filename)) {
|
||||||
$command .= " --env-file {$server_workdir}/{$this->env_filename}";
|
$command .= " --env-file /artifacts/{$this->env_filename}";
|
||||||
}
|
}
|
||||||
$command .= " --project-name {$this->application->uuid} --project-directory {$server_workdir} -f {$server_workdir}{$this->docker_compose_location} up -d";
|
$command .= " --project-name {$this->application->uuid} --project-directory {$server_workdir} -f {$server_workdir}{$this->docker_compose_location} up -d";
|
||||||
$this->write_deployment_configurations();
|
$this->write_deployment_configurations();
|
||||||
@@ -577,8 +577,8 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
['command' => $command, 'hidden' => true],
|
['command' => $command, 'hidden' => true],
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if ($this->env_filename) {
|
if (filled($this->env_filename)) {
|
||||||
$command .= " --env-file {$this->workdir}/{$this->env_filename}";
|
$command .= " --env-file /artifacts/{$this->env_filename}";
|
||||||
}
|
}
|
||||||
$command .= " --project-name {$this->application->uuid} --project-directory {$this->workdir} -f {$this->workdir}{$this->docker_compose_location} up -d";
|
$command .= " --project-name {$this->application->uuid} --project-directory {$this->workdir} -f {$this->workdir}{$this->docker_compose_location} up -d";
|
||||||
$this->execute_remote_command(
|
$this->execute_remote_command(
|
||||||
@@ -911,7 +911,6 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
});
|
});
|
||||||
if ($this->pull_request_id === 0) {
|
if ($this->pull_request_id === 0) {
|
||||||
$this->env_filename = '.env';
|
$this->env_filename = '.env';
|
||||||
|
|
||||||
foreach ($sorted_environment_variables as $env) {
|
foreach ($sorted_environment_variables as $env) {
|
||||||
$envs->push($env->key.'='.$env->real_value);
|
$envs->push($env->key.'='.$env->real_value);
|
||||||
}
|
}
|
||||||
@@ -955,7 +954,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$this->env_filename = addPreviewDeploymentSuffix('.env', $this->pull_request_id);
|
$this->env_filename = '.env';
|
||||||
foreach ($sorted_environment_variables_preview as $env) {
|
foreach ($sorted_environment_variables_preview as $env) {
|
||||||
$envs->push($env->key.'='.$env->real_value);
|
$envs->push($env->key.'='.$env->real_value);
|
||||||
}
|
}
|
||||||
@@ -996,7 +995,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($envs->isEmpty()) {
|
if ($envs->isEmpty()) {
|
||||||
$this->env_filename = null;
|
if ($this->env_filename) {
|
||||||
if ($this->use_build_server) {
|
if ($this->use_build_server) {
|
||||||
$this->server = $this->original_server;
|
$this->server = $this->original_server;
|
||||||
$this->execute_remote_command(
|
$this->execute_remote_command(
|
||||||
@@ -1023,16 +1022,20 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
$this->env_filename = null;
|
||||||
} else {
|
} else {
|
||||||
$envs_content = $envs->implode("\n");
|
$envs_content = $envs->implode("\n");
|
||||||
transfer_file_to_container($envs_content, "$this->workdir/{$this->env_filename}", $this->deployment_uuid, $this->server);
|
transfer_file_to_container($envs_content, "/artifacts/{$this->env_filename}", $this->deployment_uuid, $this->server);
|
||||||
|
|
||||||
|
// Save the env filename with preview deployment suffix
|
||||||
|
$env_filename = addPreviewDeploymentSuffix($this->env_filename, $this->pull_request_id);
|
||||||
if ($this->use_build_server) {
|
if ($this->use_build_server) {
|
||||||
$this->server = $this->original_server;
|
$this->server = $this->original_server;
|
||||||
transfer_file_to_server($envs_content, "$this->configuration_dir/{$this->env_filename}", $this->server);
|
transfer_file_to_server($envs_content, "$this->configuration_dir/{$env_filename}", $this->server);
|
||||||
$this->server = $this->build_server;
|
$this->server = $this->build_server;
|
||||||
} else {
|
} else {
|
||||||
transfer_file_to_server($envs_content, "$this->configuration_dir/{$this->env_filename}", $this->server);
|
transfer_file_to_server($envs_content, "$this->configuration_dir/{$env_filename}", $this->server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->environment_variables = $envs;
|
$this->environment_variables = $envs;
|
||||||
@@ -1717,8 +1720,16 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
$this->env_args = collect([]);
|
$this->env_args = collect([]);
|
||||||
$this->env_args->put('SOURCE_COMMIT', $this->commit);
|
$this->env_args->put('SOURCE_COMMIT', $this->commit);
|
||||||
$coolify_envs = $this->generate_coolify_env_variables();
|
$coolify_envs = $this->generate_coolify_env_variables();
|
||||||
|
|
||||||
|
// Include ALL environment variables (both build-time and runtime) for all build packs
|
||||||
|
// This deprecates the need for is_build_time flag
|
||||||
if ($this->pull_request_id === 0) {
|
if ($this->pull_request_id === 0) {
|
||||||
foreach ($this->application->build_environment_variables as $env) {
|
// Get all environment variables except NIXPACKS_ prefixed ones for non-nixpacks builds
|
||||||
|
$envs = $this->application->build_pack === 'nixpacks'
|
||||||
|
? $this->application->runtime_environment_variables
|
||||||
|
: $this->application->environment_variables()->where('key', 'not like', 'NIXPACKS_%')->get();
|
||||||
|
|
||||||
|
foreach ($envs as $env) {
|
||||||
if (! is_null($env->real_value)) {
|
if (! is_null($env->real_value)) {
|
||||||
$this->env_args->put($env->key, $env->real_value);
|
$this->env_args->put($env->key, $env->real_value);
|
||||||
if (str($env->real_value)->startsWith('$')) {
|
if (str($env->real_value)->startsWith('$')) {
|
||||||
@@ -1738,7 +1749,12 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($this->application->build_environment_variables_preview as $env) {
|
// Get all preview environment variables except NIXPACKS_ prefixed ones for non-nixpacks builds
|
||||||
|
$envs = $this->application->build_pack === 'nixpacks'
|
||||||
|
? $this->application->runtime_environment_variables_preview
|
||||||
|
: $this->application->environment_variables_preview()->where('key', 'not like', 'NIXPACKS_%')->get();
|
||||||
|
|
||||||
|
foreach ($envs as $env) {
|
||||||
if (! is_null($env->real_value)) {
|
if (! is_null($env->real_value)) {
|
||||||
$this->env_args->put($env->key, $env->real_value);
|
$this->env_args->put($env->key, $env->real_value);
|
||||||
if (str($env->real_value)->startsWith('$')) {
|
if (str($env->real_value)->startsWith('$')) {
|
||||||
@@ -1837,8 +1853,8 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
if (! is_null($this->env_filename)) {
|
if (filled($this->env_filename)) {
|
||||||
$docker_compose['services'][$this->container_name]['env_file'] = [$this->env_filename];
|
$docker_compose['services'][$this->container_name]['env_file'] = ["/artifacts/{$this->env_filename}"];
|
||||||
}
|
}
|
||||||
$docker_compose['services'][$this->container_name]['healthcheck'] = [
|
$docker_compose['services'][$this->container_name]['healthcheck'] = [
|
||||||
'test' => [
|
'test' => [
|
||||||
@@ -2129,22 +2145,20 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
|
|||||||
$this->execute_remote_command([
|
$this->execute_remote_command([
|
||||||
executeInDocker($this->deployment_uuid, "nixpacks build -c /artifacts/thegameplan.json --no-cache --no-error-without-start -n {$this->build_image_name} {$this->workdir} -o {$this->workdir}"),
|
executeInDocker($this->deployment_uuid, "nixpacks build -c /artifacts/thegameplan.json --no-cache --no-error-without-start -n {$this->build_image_name} {$this->workdir} -o {$this->workdir}"),
|
||||||
'hidden' => true,
|
'hidden' => true,
|
||||||
|
], [
|
||||||
|
executeInDocker($this->deployment_uuid, "cat {$this->workdir}/.nixpacks/Dockerfile"),
|
||||||
|
'hidden' => true,
|
||||||
]);
|
]);
|
||||||
$env_copy_command = '';
|
$build_command = "docker build --no-cache {$this->addHosts} --network host -f {$this->workdir}/.nixpacks/Dockerfile --progress plain -t {$this->build_image_name} {$this->build_args} {$this->workdir}";
|
||||||
if ($this->pull_request_id !== 0 && $this->env_filename) {
|
|
||||||
$env_copy_command = "if [ -f {$this->workdir}/{$this->env_filename} ]; then cp {$this->workdir}/{$this->env_filename} {$this->workdir}/.env; fi && ";
|
|
||||||
}
|
|
||||||
$build_command = "{$env_copy_command}docker build --no-cache {$this->addHosts} --network host -f {$this->workdir}/.nixpacks/Dockerfile {$this->build_args} --progress plain -t {$this->build_image_name} {$this->workdir}";
|
|
||||||
} else {
|
} else {
|
||||||
$this->execute_remote_command([
|
$this->execute_remote_command([
|
||||||
executeInDocker($this->deployment_uuid, "nixpacks build -c /artifacts/thegameplan.json --cache-key '{$this->application->uuid}' --no-error-without-start -n {$this->build_image_name} {$this->workdir} -o {$this->workdir}"),
|
executeInDocker($this->deployment_uuid, "nixpacks build -c /artifacts/thegameplan.json --cache-key '{$this->application->uuid}' --no-error-without-start -n {$this->build_image_name} {$this->workdir} -o {$this->workdir}"),
|
||||||
'hidden' => true,
|
'hidden' => true,
|
||||||
|
], [
|
||||||
|
executeInDocker($this->deployment_uuid, "cat {$this->workdir}/.nixpacks/Dockerfile"),
|
||||||
|
'hidden' => true,
|
||||||
]);
|
]);
|
||||||
$env_copy_command = '';
|
$build_command = "docker build {$this->addHosts} --network host -f {$this->workdir}/.nixpacks/Dockerfile --progress plain -t {$this->build_image_name} {$this->build_args} {$this->workdir}";
|
||||||
if ($this->pull_request_id !== 0 && $this->env_filename) {
|
|
||||||
$env_copy_command = "if [ -f {$this->workdir}/{$this->env_filename} ]; then cp {$this->workdir}/{$this->env_filename} {$this->workdir}/.env; fi && ";
|
|
||||||
}
|
|
||||||
$build_command = "{$env_copy_command}docker build {$this->addHosts} --network host -f {$this->workdir}/.nixpacks/Dockerfile {$this->build_args} --progress plain -t {$this->build_image_name} {$this->workdir}";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$base64_build_command = base64_encode($build_command);
|
$base64_build_command = base64_encode($build_command);
|
||||||
@@ -2255,22 +2269,20 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
|
|||||||
$this->execute_remote_command([
|
$this->execute_remote_command([
|
||||||
executeInDocker($this->deployment_uuid, "nixpacks build -c /artifacts/thegameplan.json --no-cache --no-error-without-start -n {$this->production_image_name} {$this->workdir} -o {$this->workdir}"),
|
executeInDocker($this->deployment_uuid, "nixpacks build -c /artifacts/thegameplan.json --no-cache --no-error-without-start -n {$this->production_image_name} {$this->workdir} -o {$this->workdir}"),
|
||||||
'hidden' => true,
|
'hidden' => true,
|
||||||
|
], [
|
||||||
|
executeInDocker($this->deployment_uuid, "cat {$this->workdir}/.nixpacks/Dockerfile"),
|
||||||
|
'hidden' => true,
|
||||||
]);
|
]);
|
||||||
$env_copy_command = '';
|
$build_command = "docker build --no-cache {$this->addHosts} --network host -f {$this->workdir}/.nixpacks/Dockerfile --progress plain -t {$this->production_image_name} {$this->build_args} {$this->workdir}";
|
||||||
if ($this->pull_request_id !== 0 && $this->env_filename) {
|
|
||||||
$env_copy_command = "if [ -f {$this->workdir}/{$this->env_filename} ]; then cp {$this->workdir}/{$this->env_filename} {$this->workdir}/.env; fi && ";
|
|
||||||
}
|
|
||||||
$build_command = "{$env_copy_command}docker build --no-cache {$this->addHosts} --network host -f {$this->workdir}/.nixpacks/Dockerfile {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
|
|
||||||
} else {
|
} else {
|
||||||
$this->execute_remote_command([
|
$this->execute_remote_command([
|
||||||
executeInDocker($this->deployment_uuid, "nixpacks build -c /artifacts/thegameplan.json --cache-key '{$this->application->uuid}' --no-error-without-start -n {$this->production_image_name} {$this->workdir} -o {$this->workdir}"),
|
executeInDocker($this->deployment_uuid, "nixpacks build -c /artifacts/thegameplan.json --cache-key '{$this->application->uuid}' --no-error-without-start -n {$this->production_image_name} {$this->workdir} -o {$this->workdir}"),
|
||||||
'hidden' => true,
|
'hidden' => true,
|
||||||
|
], [
|
||||||
|
executeInDocker($this->deployment_uuid, "cat {$this->workdir}/.nixpacks/Dockerfile"),
|
||||||
|
'hidden' => true,
|
||||||
]);
|
]);
|
||||||
$env_copy_command = '';
|
$build_command = "docker build {$this->addHosts} --network host -f {$this->workdir}/.nixpacks/Dockerfile --progress plain -t {$this->production_image_name} {$this->build_args} {$this->workdir}";
|
||||||
if ($this->pull_request_id !== 0 && $this->env_filename) {
|
|
||||||
$env_copy_command = "if [ -f {$this->workdir}/{$this->env_filename} ]; then cp {$this->workdir}/{$this->env_filename} {$this->workdir}/.env; fi && ";
|
|
||||||
}
|
|
||||||
$build_command = "{$env_copy_command}docker build {$this->addHosts} --network host -f {$this->workdir}/.nixpacks/Dockerfile {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
|
|
||||||
}
|
}
|
||||||
$base64_build_command = base64_encode($build_command);
|
$base64_build_command = base64_encode($build_command);
|
||||||
$this->execute_remote_command(
|
$this->execute_remote_command(
|
||||||
@@ -2406,20 +2418,26 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
|
|||||||
'save' => 'dockerfile',
|
'save' => 'dockerfile',
|
||||||
]);
|
]);
|
||||||
$dockerfile = collect(str($this->saved_outputs->get('dockerfile'))->trim()->explode("\n"));
|
$dockerfile = collect(str($this->saved_outputs->get('dockerfile'))->trim()->explode("\n"));
|
||||||
|
|
||||||
|
// Include ALL environment variables as build args (deprecating is_build_time flag)
|
||||||
if ($this->pull_request_id === 0) {
|
if ($this->pull_request_id === 0) {
|
||||||
foreach ($this->application->build_environment_variables as $env) {
|
// Get all environment variables except NIXPACKS_ prefixed ones
|
||||||
|
$envs = $this->application->environment_variables()->where('key', 'not like', 'NIXPACKS_%')->get();
|
||||||
|
foreach ($envs as $env) {
|
||||||
if (data_get($env, 'is_multiline') === true) {
|
if (data_get($env, 'is_multiline') === true) {
|
||||||
$dockerfile->splice(1, 0, "ARG {$env->key}");
|
$dockerfile->splice(1, 0, ["ARG {$env->key}"]);
|
||||||
} else {
|
} else {
|
||||||
$dockerfile->splice(1, 0, "ARG {$env->key}={$env->real_value}");
|
$dockerfile->splice(1, 0, ["ARG {$env->key}={$env->real_value}"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($this->application->build_environment_variables_preview as $env) {
|
// Get all preview environment variables except NIXPACKS_ prefixed ones
|
||||||
|
$envs = $this->application->environment_variables_preview()->where('key', 'not like', 'NIXPACKS_%')->get();
|
||||||
|
foreach ($envs as $env) {
|
||||||
if (data_get($env, 'is_multiline') === true) {
|
if (data_get($env, 'is_multiline') === true) {
|
||||||
$dockerfile->splice(1, 0, "ARG {$env->key}");
|
$dockerfile->splice(1, 0, ["ARG {$env->key}"]);
|
||||||
} else {
|
} else {
|
||||||
$dockerfile->splice(1, 0, "ARG {$env->key}={$env->real_value}");
|
$dockerfile->splice(1, 0, ["ARG {$env->key}={$env->real_value}"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user