Merge branch 'next' of github.com:coollabsio/coolify into next
This commit is contained in:
commit
f1562ccfd5
@ -189,8 +189,8 @@ public function __construct(int $application_deployment_queue_id)
|
|||||||
$this->is_this_additional_server = $this->application->additional_servers()->wherePivot('server_id', $this->server->id)->count() > 0;
|
$this->is_this_additional_server = $this->application->additional_servers()->wherePivot('server_id', $this->server->id)->count() > 0;
|
||||||
|
|
||||||
$this->basedir = $this->application->generateBaseDir($this->deployment_uuid);
|
$this->basedir = $this->application->generateBaseDir($this->deployment_uuid);
|
||||||
$this->workdir = "{$this->basedir}" . rtrim($this->application->base_directory, '/');
|
$this->workdir = "{$this->basedir}".rtrim($this->application->base_directory, '/');
|
||||||
$this->configuration_dir = application_configuration_dir() . "/{$this->application->uuid}";
|
$this->configuration_dir = application_configuration_dir()."/{$this->application->uuid}";
|
||||||
$this->is_debug_enabled = $this->application->settings->is_debug_enabled;
|
$this->is_debug_enabled = $this->application->settings->is_debug_enabled;
|
||||||
|
|
||||||
$this->container_name = generateApplicationContainerName($this->application, $this->pull_request_id);
|
$this->container_name = generateApplicationContainerName($this->application, $this->pull_request_id);
|
||||||
@ -218,7 +218,7 @@ public function handle(): void
|
|||||||
$this->application_deployment_queue->update([
|
$this->application_deployment_queue->update([
|
||||||
'status' => ApplicationDeploymentStatus::IN_PROGRESS->value,
|
'status' => ApplicationDeploymentStatus::IN_PROGRESS->value,
|
||||||
]);
|
]);
|
||||||
if (!$this->server->isFunctional()) {
|
if (! $this->server->isFunctional()) {
|
||||||
$this->application_deployment_queue->addLogEntry('Server is not functional.');
|
$this->application_deployment_queue->addLogEntry('Server is not functional.');
|
||||||
$this->fail('Server is not functional.');
|
$this->fail('Server is not functional.');
|
||||||
|
|
||||||
@ -228,7 +228,7 @@ public function handle(): void
|
|||||||
// Generate custom host<->ip mapping
|
// Generate custom host<->ip mapping
|
||||||
$allContainers = instant_remote_process(["docker network inspect {$this->destination->network} -f '{{json .Containers}}' "], $this->server);
|
$allContainers = instant_remote_process(["docker network inspect {$this->destination->network} -f '{{json .Containers}}' "], $this->server);
|
||||||
|
|
||||||
if (!is_null($allContainers)) {
|
if (! is_null($allContainers)) {
|
||||||
$allContainers = format_docker_command_output_to_json($allContainers);
|
$allContainers = format_docker_command_output_to_json($allContainers);
|
||||||
$ips = collect([]);
|
$ips = collect([]);
|
||||||
if (count($allContainers) > 0) {
|
if (count($allContainers) > 0) {
|
||||||
@ -398,14 +398,14 @@ private function deploy_docker_compose_buildpack()
|
|||||||
}
|
}
|
||||||
if (data_get($this->application, 'docker_compose_custom_start_command')) {
|
if (data_get($this->application, 'docker_compose_custom_start_command')) {
|
||||||
$this->docker_compose_custom_start_command = $this->application->docker_compose_custom_start_command;
|
$this->docker_compose_custom_start_command = $this->application->docker_compose_custom_start_command;
|
||||||
if (!str($this->docker_compose_custom_start_command)->contains('--project-directory')) {
|
if (! str($this->docker_compose_custom_start_command)->contains('--project-directory')) {
|
||||||
$this->docker_compose_custom_start_command = str($this->docker_compose_custom_start_command)->replaceFirst('compose', 'compose --project-directory ' . $this->workdir)->value();
|
$this->docker_compose_custom_start_command = str($this->docker_compose_custom_start_command)->replaceFirst('compose', 'compose --project-directory '.$this->workdir)->value();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (data_get($this->application, 'docker_compose_custom_build_command')) {
|
if (data_get($this->application, 'docker_compose_custom_build_command')) {
|
||||||
$this->docker_compose_custom_build_command = $this->application->docker_compose_custom_build_command;
|
$this->docker_compose_custom_build_command = $this->application->docker_compose_custom_build_command;
|
||||||
if (!str($this->docker_compose_custom_build_command)->contains('--project-directory')) {
|
if (! str($this->docker_compose_custom_build_command)->contains('--project-directory')) {
|
||||||
$this->docker_compose_custom_build_command = str($this->docker_compose_custom_build_command)->replaceFirst('compose', 'compose --project-directory ' . $this->workdir)->value();
|
$this->docker_compose_custom_build_command = str($this->docker_compose_custom_build_command)->replaceFirst('compose', 'compose --project-directory '.$this->workdir)->value();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($this->pull_request_id === 0) {
|
if ($this->pull_request_id === 0) {
|
||||||
@ -426,7 +426,7 @@ private function deploy_docker_compose_buildpack()
|
|||||||
} else {
|
} else {
|
||||||
$composeFile = $this->application->parseCompose(pull_request_id: $this->pull_request_id, preview_id: data_get($this, 'preview.id'));
|
$composeFile = $this->application->parseCompose(pull_request_id: $this->pull_request_id, preview_id: data_get($this, 'preview.id'));
|
||||||
$this->save_environment_variables();
|
$this->save_environment_variables();
|
||||||
if (!is_null($this->env_filename)) {
|
if (! is_null($this->env_filename)) {
|
||||||
$services = collect($composeFile['services']);
|
$services = collect($composeFile['services']);
|
||||||
$services = $services->map(function ($service, $name) {
|
$services = $services->map(function ($service, $name) {
|
||||||
$service['env_file'] = [$this->env_filename];
|
$service['env_file'] = [$this->env_filename];
|
||||||
@ -537,7 +537,7 @@ private function deploy_dockerfile_buildpack()
|
|||||||
$this->check_git_if_build_needed();
|
$this->check_git_if_build_needed();
|
||||||
$this->generate_image_names();
|
$this->generate_image_names();
|
||||||
$this->clone_repository();
|
$this->clone_repository();
|
||||||
if (!$this->force_rebuild) {
|
if (! $this->force_rebuild) {
|
||||||
$this->check_image_locally_or_remotely();
|
$this->check_image_locally_or_remotely();
|
||||||
if ($this->should_skip_build()) {
|
if ($this->should_skip_build()) {
|
||||||
return;
|
return;
|
||||||
@ -561,7 +561,7 @@ private function deploy_nixpacks_buildpack()
|
|||||||
$this->prepare_builder_image();
|
$this->prepare_builder_image();
|
||||||
$this->check_git_if_build_needed();
|
$this->check_git_if_build_needed();
|
||||||
$this->generate_image_names();
|
$this->generate_image_names();
|
||||||
if (!$this->force_rebuild) {
|
if (! $this->force_rebuild) {
|
||||||
$this->check_image_locally_or_remotely();
|
$this->check_image_locally_or_remotely();
|
||||||
if ($this->should_skip_build()) {
|
if ($this->should_skip_build()) {
|
||||||
return;
|
return;
|
||||||
@ -586,7 +586,7 @@ private function deploy_static_buildpack()
|
|||||||
$this->prepare_builder_image();
|
$this->prepare_builder_image();
|
||||||
$this->check_git_if_build_needed();
|
$this->check_git_if_build_needed();
|
||||||
$this->generate_image_names();
|
$this->generate_image_names();
|
||||||
if (!$this->force_rebuild) {
|
if (! $this->force_rebuild) {
|
||||||
$this->check_image_locally_or_remotely();
|
$this->check_image_locally_or_remotely();
|
||||||
if ($this->should_skip_build()) {
|
if ($this->should_skip_build()) {
|
||||||
return;
|
return;
|
||||||
@ -665,7 +665,7 @@ private function push_to_docker_registry()
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ray('push_to_docker_registry noww: ' . $this->production_image_name);
|
ray('push_to_docker_registry noww: '.$this->production_image_name);
|
||||||
try {
|
try {
|
||||||
instant_remote_process(["docker images --format '{{json .}}' {$this->production_image_name}"], $this->server);
|
instant_remote_process(["docker images --format '{{json .}}' {$this->production_image_name}"], $this->server);
|
||||||
$this->application_deployment_queue->addLogEntry('----------------------------------------');
|
$this->application_deployment_queue->addLogEntry('----------------------------------------');
|
||||||
@ -756,7 +756,7 @@ private function should_skip_build()
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!$this->application->isConfigurationChanged()) {
|
if (! $this->application->isConfigurationChanged()) {
|
||||||
$this->application_deployment_queue->addLogEntry("No configuration changed & image found ({$this->production_image_name}) with the same Git Commit SHA. Build step skipped.");
|
$this->application_deployment_queue->addLogEntry("No configuration changed & image found ({$this->production_image_name}) with the same Git Commit SHA. Build step skipped.");
|
||||||
$this->generate_compose_file();
|
$this->generate_compose_file();
|
||||||
$this->push_to_docker_registry();
|
$this->push_to_docker_registry();
|
||||||
@ -812,7 +812,7 @@ private function save_environment_variables()
|
|||||||
$this->env_filename = ".env-pr-$this->pull_request_id";
|
$this->env_filename = ".env-pr-$this->pull_request_id";
|
||||||
// Add SOURCE_COMMIT if not exists
|
// Add SOURCE_COMMIT if not exists
|
||||||
if ($this->application->environment_variables_preview->where('key', 'SOURCE_COMMIT')->isEmpty()) {
|
if ($this->application->environment_variables_preview->where('key', 'SOURCE_COMMIT')->isEmpty()) {
|
||||||
if (!is_null($this->commit)) {
|
if (! is_null($this->commit)) {
|
||||||
$envs->push("SOURCE_COMMIT={$this->commit}");
|
$envs->push("SOURCE_COMMIT={$this->commit}");
|
||||||
} else {
|
} else {
|
||||||
$envs->push('SOURCE_COMMIT=unknown');
|
$envs->push('SOURCE_COMMIT=unknown');
|
||||||
@ -834,12 +834,12 @@ private function save_environment_variables()
|
|||||||
$real_value = $env->real_value;
|
$real_value = $env->real_value;
|
||||||
} else {
|
} else {
|
||||||
if ($env->is_literal || $env->is_multiline) {
|
if ($env->is_literal || $env->is_multiline) {
|
||||||
$real_value = '\'' . $real_value . '\'';
|
$real_value = '\''.$real_value.'\'';
|
||||||
} else {
|
} else {
|
||||||
$real_value = escapeEnvVariables($env->real_value);
|
$real_value = escapeEnvVariables($env->real_value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$envs->push($env->key . '=' . $real_value);
|
$envs->push($env->key.'='.$real_value);
|
||||||
}
|
}
|
||||||
// Add PORT if not exists, use the first port as default
|
// Add PORT if not exists, use the first port as default
|
||||||
if ($this->application->environment_variables_preview->where('key', 'PORT')->isEmpty()) {
|
if ($this->application->environment_variables_preview->where('key', 'PORT')->isEmpty()) {
|
||||||
@ -853,7 +853,7 @@ private function save_environment_variables()
|
|||||||
$this->env_filename = '.env';
|
$this->env_filename = '.env';
|
||||||
// Add SOURCE_COMMIT if not exists
|
// Add SOURCE_COMMIT if not exists
|
||||||
if ($this->application->environment_variables->where('key', 'SOURCE_COMMIT')->isEmpty()) {
|
if ($this->application->environment_variables->where('key', 'SOURCE_COMMIT')->isEmpty()) {
|
||||||
if (!is_null($this->commit)) {
|
if (! is_null($this->commit)) {
|
||||||
$envs->push("SOURCE_COMMIT={$this->commit}");
|
$envs->push("SOURCE_COMMIT={$this->commit}");
|
||||||
} else {
|
} else {
|
||||||
$envs->push('SOURCE_COMMIT=unknown');
|
$envs->push('SOURCE_COMMIT=unknown');
|
||||||
@ -875,12 +875,12 @@ private function save_environment_variables()
|
|||||||
$real_value = $env->real_value;
|
$real_value = $env->real_value;
|
||||||
} else {
|
} else {
|
||||||
if ($env->is_literal || $env->is_multiline) {
|
if ($env->is_literal || $env->is_multiline) {
|
||||||
$real_value = '\'' . $real_value . '\'';
|
$real_value = '\''.$real_value.'\'';
|
||||||
} else {
|
} else {
|
||||||
$real_value = escapeEnvVariables($env->real_value);
|
$real_value = escapeEnvVariables($env->real_value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$envs->push($env->key . '=' . $real_value);
|
$envs->push($env->key.'='.$real_value);
|
||||||
}
|
}
|
||||||
// Add PORT if not exists, use the first port as default
|
// Add PORT if not exists, use the first port as default
|
||||||
if ($this->application->environment_variables->where('key', 'PORT')->isEmpty()) {
|
if ($this->application->environment_variables->where('key', 'PORT')->isEmpty()) {
|
||||||
@ -955,20 +955,21 @@ private function laravel_finetunes()
|
|||||||
$nixpacks_php_fallback_path = $this->application->environment_variables_preview->where('key', 'NIXPACKS_PHP_FALLBACK_PATH')->first();
|
$nixpacks_php_fallback_path = $this->application->environment_variables_preview->where('key', 'NIXPACKS_PHP_FALLBACK_PATH')->first();
|
||||||
$nixpacks_php_root_dir = $this->application->environment_variables_preview->where('key', 'NIXPACKS_PHP_ROOT_DIR')->first();
|
$nixpacks_php_root_dir = $this->application->environment_variables_preview->where('key', 'NIXPACKS_PHP_ROOT_DIR')->first();
|
||||||
}
|
}
|
||||||
if (!$nixpacks_php_fallback_path) {
|
if (! $nixpacks_php_fallback_path) {
|
||||||
$nixpacks_php_fallback_path = new EnvironmentVariable();
|
$nixpacks_php_fallback_path = new EnvironmentVariable();
|
||||||
$nixpacks_php_fallback_path->key = 'NIXPACKS_PHP_FALLBACK_PATH';
|
$nixpacks_php_fallback_path->key = 'NIXPACKS_PHP_FALLBACK_PATH';
|
||||||
$nixpacks_php_fallback_path->value = '/index.php';
|
$nixpacks_php_fallback_path->value = '/index.php';
|
||||||
$nixpacks_php_fallback_path->application_id = $this->application->id;
|
$nixpacks_php_fallback_path->application_id = $this->application->id;
|
||||||
$nixpacks_php_fallback_path->save();
|
$nixpacks_php_fallback_path->save();
|
||||||
}
|
}
|
||||||
if (!$nixpacks_php_root_dir) {
|
if (! $nixpacks_php_root_dir) {
|
||||||
$nixpacks_php_root_dir = new EnvironmentVariable();
|
$nixpacks_php_root_dir = new EnvironmentVariable();
|
||||||
$nixpacks_php_root_dir->key = 'NIXPACKS_PHP_ROOT_DIR';
|
$nixpacks_php_root_dir->key = 'NIXPACKS_PHP_ROOT_DIR';
|
||||||
$nixpacks_php_root_dir->value = '/app/public';
|
$nixpacks_php_root_dir->value = '/app/public';
|
||||||
$nixpacks_php_root_dir->application_id = $this->application->id;
|
$nixpacks_php_root_dir->application_id = $this->application->id;
|
||||||
$nixpacks_php_root_dir->save();
|
$nixpacks_php_root_dir->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
return [$nixpacks_php_fallback_path, $nixpacks_php_root_dir];
|
return [$nixpacks_php_fallback_path, $nixpacks_php_root_dir];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1243,7 +1244,7 @@ private function deploy_to_additional_destinations()
|
|||||||
destination: $destination,
|
destination: $destination,
|
||||||
no_questions_asked: true,
|
no_questions_asked: true,
|
||||||
);
|
);
|
||||||
$this->application_deployment_queue->addLogEntry("Deployment to {$server->name}. Logs: " . route('project.application.deployment.show', [
|
$this->application_deployment_queue->addLogEntry("Deployment to {$server->name}. Logs: ".route('project.application.deployment.show', [
|
||||||
'project_uuid' => data_get($this->application, 'environment.project.uuid'),
|
'project_uuid' => data_get($this->application, 'environment.project.uuid'),
|
||||||
'application_uuid' => data_get($this->application, 'uuid'),
|
'application_uuid' => data_get($this->application, 'uuid'),
|
||||||
'deployment_uuid' => $deployment_uuid,
|
'deployment_uuid' => $deployment_uuid,
|
||||||
@ -1305,7 +1306,7 @@ private function check_git_if_build_needed()
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if ($this->saved_outputs->get('git_commit_sha') && !$this->rollback) {
|
if ($this->saved_outputs->get('git_commit_sha') && ! $this->rollback) {
|
||||||
$this->commit = $this->saved_outputs->get('git_commit_sha')->before("\t");
|
$this->commit = $this->saved_outputs->get('git_commit_sha')->before("\t");
|
||||||
$this->application_deployment_queue->commit = $this->commit;
|
$this->application_deployment_queue->commit = $this->commit;
|
||||||
$this->application_deployment_queue->save();
|
$this->application_deployment_queue->save();
|
||||||
@ -1392,10 +1393,10 @@ private function generate_nixpacks_confs()
|
|||||||
$aptPkgs = ['curl', 'wget'];
|
$aptPkgs = ['curl', 'wget'];
|
||||||
data_set($parsed, 'phases.setup.aptPkgs', ['curl', 'wget']);
|
data_set($parsed, 'phases.setup.aptPkgs', ['curl', 'wget']);
|
||||||
} else {
|
} else {
|
||||||
if (!in_array('curl', $aptPkgs)) {
|
if (! in_array('curl', $aptPkgs)) {
|
||||||
$aptPkgs[] = 'curl';
|
$aptPkgs[] = 'curl';
|
||||||
}
|
}
|
||||||
if (!in_array('wget', $aptPkgs)) {
|
if (! in_array('wget', $aptPkgs)) {
|
||||||
$aptPkgs[] = 'wget';
|
$aptPkgs[] = 'wget';
|
||||||
}
|
}
|
||||||
data_set($parsed, 'phases.setup.aptPkgs', $aptPkgs);
|
data_set($parsed, 'phases.setup.aptPkgs', $aptPkgs);
|
||||||
@ -1436,13 +1437,13 @@ private function generate_nixpacks_env_variables()
|
|||||||
$this->env_nixpacks_args = collect([]);
|
$this->env_nixpacks_args = collect([]);
|
||||||
if ($this->pull_request_id === 0) {
|
if ($this->pull_request_id === 0) {
|
||||||
foreach ($this->application->nixpacks_environment_variables as $env) {
|
foreach ($this->application->nixpacks_environment_variables as $env) {
|
||||||
if (!is_null($env->real_value)) {
|
if (! is_null($env->real_value)) {
|
||||||
$this->env_nixpacks_args->push("--env {$env->key}={$env->real_value}");
|
$this->env_nixpacks_args->push("--env {$env->key}={$env->real_value}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($this->application->nixpacks_environment_variables_preview as $env) {
|
foreach ($this->application->nixpacks_environment_variables_preview as $env) {
|
||||||
if (!is_null($env->real_value)) {
|
if (! is_null($env->real_value)) {
|
||||||
$this->env_nixpacks_args->push("--env {$env->key}={$env->real_value}");
|
$this->env_nixpacks_args->push("--env {$env->key}={$env->real_value}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1457,13 +1458,13 @@ private function generate_env_variables()
|
|||||||
$this->env_args->put('SOURCE_COMMIT', $this->commit);
|
$this->env_args->put('SOURCE_COMMIT', $this->commit);
|
||||||
if ($this->pull_request_id === 0) {
|
if ($this->pull_request_id === 0) {
|
||||||
foreach ($this->application->build_environment_variables as $env) {
|
foreach ($this->application->build_environment_variables 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($this->application->build_environment_variables_preview as $env) {
|
foreach ($this->application->build_environment_variables_preview 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1487,7 +1488,7 @@ private function generate_compose_file()
|
|||||||
$this->application->parseContainerLabels();
|
$this->application->parseContainerLabels();
|
||||||
$labels = collect(preg_split("/\r\n|\n|\r/", base64_decode($this->application->custom_labels)));
|
$labels = collect(preg_split("/\r\n|\n|\r/", base64_decode($this->application->custom_labels)));
|
||||||
$labels = $labels->filter(function ($value, $key) {
|
$labels = $labels->filter(function ($value, $key) {
|
||||||
return !Str::startsWith($value, 'coolify.');
|
return ! Str::startsWith($value, 'coolify.');
|
||||||
});
|
});
|
||||||
$found_caddy_labels = $labels->filter(function ($value, $key) {
|
$found_caddy_labels = $labels->filter(function ($value, $key) {
|
||||||
return Str::startsWith($value, 'caddy_');
|
return Str::startsWith($value, 'caddy_');
|
||||||
@ -1578,7 +1579,7 @@ private function generate_compose_file()
|
|||||||
// $docker_compose['services'][$this->container_name]['env_file'] = [$this->env_filename];
|
// $docker_compose['services'][$this->container_name]['env_file'] = [$this->env_filename];
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
if (!is_null($this->env_filename)) {
|
if (! is_null($this->env_filename)) {
|
||||||
$docker_compose['services'][$this->container_name]['env_file'] = [$this->env_filename];
|
$docker_compose['services'][$this->container_name]['env_file'] = [$this->env_filename];
|
||||||
}
|
}
|
||||||
$docker_compose['services'][$this->container_name]['healthcheck'] = [
|
$docker_compose['services'][$this->container_name]['healthcheck'] = [
|
||||||
@ -1586,27 +1587,27 @@ private function generate_compose_file()
|
|||||||
'CMD-SHELL',
|
'CMD-SHELL',
|
||||||
$this->generate_healthcheck_commands(),
|
$this->generate_healthcheck_commands(),
|
||||||
],
|
],
|
||||||
'interval' => $this->application->health_check_interval . 's',
|
'interval' => $this->application->health_check_interval.'s',
|
||||||
'timeout' => $this->application->health_check_timeout . 's',
|
'timeout' => $this->application->health_check_timeout.'s',
|
||||||
'retries' => $this->application->health_check_retries,
|
'retries' => $this->application->health_check_retries,
|
||||||
'start_period' => $this->application->health_check_start_period . 's',
|
'start_period' => $this->application->health_check_start_period.'s',
|
||||||
];
|
];
|
||||||
|
|
||||||
if (!is_null($this->application->limits_cpuset)) {
|
if (! is_null($this->application->limits_cpuset)) {
|
||||||
data_set($docker_compose, 'services.' . $this->container_name . '.cpuset', $this->application->limits_cpuset);
|
data_set($docker_compose, 'services.'.$this->container_name.'.cpuset', $this->application->limits_cpuset);
|
||||||
}
|
}
|
||||||
if ($this->server->isSwarm()) {
|
if ($this->server->isSwarm()) {
|
||||||
data_forget($docker_compose, 'services.' . $this->container_name . '.container_name');
|
data_forget($docker_compose, 'services.'.$this->container_name.'.container_name');
|
||||||
data_forget($docker_compose, 'services.' . $this->container_name . '.expose');
|
data_forget($docker_compose, 'services.'.$this->container_name.'.expose');
|
||||||
data_forget($docker_compose, 'services.' . $this->container_name . '.restart');
|
data_forget($docker_compose, 'services.'.$this->container_name.'.restart');
|
||||||
|
|
||||||
data_forget($docker_compose, 'services.' . $this->container_name . '.mem_limit');
|
data_forget($docker_compose, 'services.'.$this->container_name.'.mem_limit');
|
||||||
data_forget($docker_compose, 'services.' . $this->container_name . '.memswap_limit');
|
data_forget($docker_compose, 'services.'.$this->container_name.'.memswap_limit');
|
||||||
data_forget($docker_compose, 'services.' . $this->container_name . '.mem_swappiness');
|
data_forget($docker_compose, 'services.'.$this->container_name.'.mem_swappiness');
|
||||||
data_forget($docker_compose, 'services.' . $this->container_name . '.mem_reservation');
|
data_forget($docker_compose, 'services.'.$this->container_name.'.mem_reservation');
|
||||||
data_forget($docker_compose, 'services.' . $this->container_name . '.cpus');
|
data_forget($docker_compose, 'services.'.$this->container_name.'.cpus');
|
||||||
data_forget($docker_compose, 'services.' . $this->container_name . '.cpuset');
|
data_forget($docker_compose, 'services.'.$this->container_name.'.cpuset');
|
||||||
data_forget($docker_compose, 'services.' . $this->container_name . '.cpu_shares');
|
data_forget($docker_compose, 'services.'.$this->container_name.'.cpu_shares');
|
||||||
|
|
||||||
$docker_compose['services'][$this->container_name]['deploy'] = [
|
$docker_compose['services'][$this->container_name]['deploy'] = [
|
||||||
'mode' => 'replicated',
|
'mode' => 'replicated',
|
||||||
@ -1672,7 +1673,7 @@ private function generate_compose_file()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($this->application->isHealthcheckDisabled()) {
|
if ($this->application->isHealthcheckDisabled()) {
|
||||||
data_forget($docker_compose, 'services.' . $this->container_name . '.healthcheck');
|
data_forget($docker_compose, 'services.'.$this->container_name.'.healthcheck');
|
||||||
}
|
}
|
||||||
if (count($this->application->ports_mappings_array) > 0 && $this->pull_request_id === 0) {
|
if (count($this->application->ports_mappings_array) > 0 && $this->pull_request_id === 0) {
|
||||||
$docker_compose['services'][$this->container_name]['ports'] = $this->application->ports_mappings_array;
|
$docker_compose['services'][$this->container_name]['ports'] = $this->application->ports_mappings_array;
|
||||||
@ -1750,9 +1751,9 @@ private function generate_local_persistent_volumes()
|
|||||||
$volume_name = $persistentStorage->name;
|
$volume_name = $persistentStorage->name;
|
||||||
}
|
}
|
||||||
if ($this->pull_request_id !== 0) {
|
if ($this->pull_request_id !== 0) {
|
||||||
$volume_name = $volume_name . '-pr-' . $this->pull_request_id;
|
$volume_name = $volume_name.'-pr-'.$this->pull_request_id;
|
||||||
}
|
}
|
||||||
$local_persistent_volumes[] = $volume_name . ':' . $persistentStorage->mount_path;
|
$local_persistent_volumes[] = $volume_name.':'.$persistentStorage->mount_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $local_persistent_volumes;
|
return $local_persistent_volumes;
|
||||||
@ -1768,7 +1769,7 @@ private function generate_local_persistent_volumes_only_volume_names()
|
|||||||
$name = $persistentStorage->name;
|
$name = $persistentStorage->name;
|
||||||
|
|
||||||
if ($this->pull_request_id !== 0) {
|
if ($this->pull_request_id !== 0) {
|
||||||
$name = $name . '-pr-' . $this->pull_request_id;
|
$name = $name.'-pr-'.$this->pull_request_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
$local_persistent_volumes_names[$name] = [
|
$local_persistent_volumes_names[$name] = [
|
||||||
@ -1782,7 +1783,7 @@ private function generate_local_persistent_volumes_only_volume_names()
|
|||||||
|
|
||||||
private function generate_healthcheck_commands()
|
private function generate_healthcheck_commands()
|
||||||
{
|
{
|
||||||
if (!$this->application->health_check_port) {
|
if (! $this->application->health_check_port) {
|
||||||
$health_check_port = $this->application->ports_exposes_array[0];
|
$health_check_port = $this->application->ports_exposes_array[0];
|
||||||
} else {
|
} else {
|
||||||
$health_check_port = $this->application->health_check_port;
|
$health_check_port = $this->application->health_check_port;
|
||||||
@ -2008,7 +2009,7 @@ private function stop_running_container(bool $force = false)
|
|||||||
$containers = getCurrentApplicationContainerStatus($this->server, $this->application->id, $this->pull_request_id);
|
$containers = getCurrentApplicationContainerStatus($this->server, $this->application->id, $this->pull_request_id);
|
||||||
if ($this->pull_request_id === 0) {
|
if ($this->pull_request_id === 0) {
|
||||||
$containers = $containers->filter(function ($container) {
|
$containers = $containers->filter(function ($container) {
|
||||||
return data_get($container, 'Names') !== $this->container_name && data_get($container, 'Names') !== $this->container_name . '-pr-' . $this->pull_request_id;
|
return data_get($container, 'Names') !== $this->container_name && data_get($container, 'Names') !== $this->container_name.'-pr-'.$this->pull_request_id;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
$containers->each(function ($container) {
|
$containers->each(function ($container) {
|
||||||
@ -2140,8 +2141,8 @@ private function run_pre_deployment_command()
|
|||||||
|
|
||||||
foreach ($containers as $container) {
|
foreach ($containers as $container) {
|
||||||
$containerName = data_get($container, 'Names');
|
$containerName = data_get($container, 'Names');
|
||||||
if ($containers->count() == 1 || str_starts_with($containerName, $this->application->pre_deployment_command_container . '-' . $this->application->uuid)) {
|
if ($containers->count() == 1 || str_starts_with($containerName, $this->application->pre_deployment_command_container.'-'.$this->application->uuid)) {
|
||||||
$cmd = "sh -c '" . str_replace("'", "'\''", $this->application->pre_deployment_command) . "'";
|
$cmd = "sh -c '".str_replace("'", "'\''", $this->application->pre_deployment_command)."'";
|
||||||
$exec = "docker exec {$containerName} {$cmd}";
|
$exec = "docker exec {$containerName} {$cmd}";
|
||||||
$this->execute_remote_command(
|
$this->execute_remote_command(
|
||||||
[
|
[
|
||||||
@ -2166,8 +2167,8 @@ private function run_post_deployment_command()
|
|||||||
$containers = getCurrentApplicationContainerStatus($this->server, $this->application->id, $this->pull_request_id);
|
$containers = getCurrentApplicationContainerStatus($this->server, $this->application->id, $this->pull_request_id);
|
||||||
foreach ($containers as $container) {
|
foreach ($containers as $container) {
|
||||||
$containerName = data_get($container, 'Names');
|
$containerName = data_get($container, 'Names');
|
||||||
if ($containers->count() == 1 || str_starts_with($containerName, $this->application->post_deployment_command_container . '-' . $this->application->uuid)) {
|
if ($containers->count() == 1 || str_starts_with($containerName, $this->application->post_deployment_command_container.'-'.$this->application->uuid)) {
|
||||||
$cmd = "sh -c '" . str_replace("'", "'\''", $this->application->post_deployment_command) . "'";
|
$cmd = "sh -c '".str_replace("'", "'\''", $this->application->post_deployment_command)."'";
|
||||||
$exec = "docker exec {$containerName} {$cmd}";
|
$exec = "docker exec {$containerName} {$cmd}";
|
||||||
try {
|
try {
|
||||||
$this->execute_remote_command(
|
$this->execute_remote_command(
|
||||||
@ -2206,7 +2207,7 @@ private function next(string $status)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ($status === ApplicationDeploymentStatus::FINISHED->value) {
|
if ($status === ApplicationDeploymentStatus::FINISHED->value) {
|
||||||
if (!$this->only_this_server) {
|
if (! $this->only_this_server) {
|
||||||
$this->deploy_to_additional_destinations();
|
$this->deploy_to_additional_destinations();
|
||||||
}
|
}
|
||||||
$this->application->environment->project->team?->notify(new DeploymentSuccess($this->application, $this->deployment_uuid, $this->preview));
|
$this->application->environment->project->team?->notify(new DeploymentSuccess($this->application, $this->deployment_uuid, $this->preview));
|
||||||
|
Loading…
Reference in New Issue
Block a user