Merge remote-tracking branch 'origin/main' into release/v4.5

This commit is contained in:
github-actions[bot]
2026-10-08 07:05:53 +00:00
2 changed files with 58 additions and 5 deletions
+10 -5
View File
@@ -2714,11 +2714,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
if ($this->application->build_pack === 'dockerfile') {
$this->add_build_env_variables_to_dockerfile();
}
if ($this->application->build_pack === 'railpack') {
$this->build_railpack_image();
} else {
$this->build_image();
}
$this->build_pull_request_image();
// This overwrites the build-time .env with ALL variables (build-time + runtime)
$this->save_runtime_environment_variables();
@@ -2726,6 +2722,15 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
$this->rolling_update();
}
private function build_pull_request_image(): void
{
match ($this->application->build_pack) {
'railpack' => $this->build_railpack_image(),
'static' => $this->build_static_image(),
default => $this->build_image(),
};
}
private function create_workdir()
{
if ($this->use_build_server) {
@@ -0,0 +1,48 @@
<?php
/**
* Preview deployments of static build pack applications must build the image
* from the generated nginx Dockerfile, not from a Dockerfile in the repository.
*
* @see https://github.com/coollabsio/coolify/issues/8238
*/
use App\Jobs\ApplicationDeploymentJob;
use App\Models\Application;
use App\Models\ApplicationDeploymentQueue;
it('builds static build pack preview images from the generated nginx Dockerfile', function () {
$application = new Application;
$application->build_pack = 'static';
$application->static_image = 'nginx:alpine';
$application->custom_nginx_configuration = 'server { listen 80; }';
$queue = Mockery::mock(ApplicationDeploymentQueue::class);
$queue->shouldReceive('addLogEntry');
$commands = [];
$job = Mockery::mock(ApplicationDeploymentJob::class)->makePartial();
$job->shouldReceive('execute_remote_command')->andReturnUsing(function (...$batch) use (&$commands) {
foreach ($batch as $command) {
$commands[] = $command[0];
}
});
foreach ([
'application' => $application,
'application_deployment_queue' => $queue,
'deployment_uuid' => 'deployment-uuid',
'pull_request_id' => 7,
'workdir' => '/artifacts/deployment-uuid',
'production_image_name' => 'preview-app:pr-7-abc',
] as $property => $value) {
(new ReflectionProperty(ApplicationDeploymentJob::class, $property))->setValue($job, $value);
}
(new ReflectionMethod(ApplicationDeploymentJob::class, 'build_pull_request_image'))->invoke($job);
$writesGeneratedDockerfile = collect($commands)
->contains(fn (string $command) => str_contains($command, 'tee /artifacts/deployment-uuid/Dockerfile'));
expect($writesGeneratedDockerfile)->toBeTrue();
});