diff --git a/app/Livewire/Project/Application/General.php b/app/Livewire/Project/Application/General.php index 531aa834c0..0f0f68e9b4 100644 --- a/app/Livewire/Project/Application/General.php +++ b/app/Livewire/Project/Application/General.php @@ -436,7 +436,7 @@ class General extends Component $this->portsMappings = $this->application->ports_mappings; $this->customNetworkAliases = $this->application->custom_network_aliases; $this->dockerfile = $this->application->dockerfile; - $this->dockerfileLocation = $this->application->dockerfile_location; + $this->dockerfileLocation = $this->application->dockerfile_location ?? ($this->buildPack === 'dockerfile' ? '/Dockerfile' : null); $this->dockerfileTargetBuild = $this->application->dockerfile_target_build; $this->dockerRegistryImageName = $this->application->docker_registry_image_name; $this->dockerRegistryImageTag = $this->application->docker_registry_image_tag; diff --git a/resources/views/livewire/project/application/general.blade.php b/resources/views/livewire/project/application/general.blade.php index 1df2bedfb2..e0ec7b5add 100644 --- a/resources/views/livewire/project/application/general.blade.php +++ b/resources/views/livewire/project/application/general.blade.php @@ -159,7 +159,8 @@ this.baseDir = this.normalizePath(this.baseDir); }, normalizeComposeLocation() { - this.composeLocation = this.normalizePath(this.composeLocation); + const path = this.normalizePath(this.composeLocation); + this.composeLocation = path === '/' ? '/docker-compose.yaml' : path; } }" class="grid gap-4 lg:grid-cols-2"> + @blur="composeLocation = normalize(composeLocation).replace(/^\/$/, '/docker-compose.yaml')" />

Resolved file: + @blur="composeLocation = normalize(composeLocation).replace(/^\/$/, '/docker-compose.yaml')" />

Resolved file: + @blur="composeLocation = normalize(composeLocation).replace(/^\/$/, '/docker-compose.yaml')" />

Resolved file: + @blur="composeLocation = normalize(composeLocation).replace(/^\/$/, '/docker-compose.yaml')" />

Resolved file: toBe('https://example.com,https://www.example.com'); }); +test('Dockerfile location defaults to the Dockerfile only for the Dockerfile build pack', function (string $buildPack, ?string $expected) { + $application = Application::factory()->create([ + 'environment_id' => $this->environment->id, + 'destination_id' => $this->destination->id, + 'destination_type' => StandaloneDocker::class, + 'build_pack' => $buildPack, + 'static_image' => 'nginx:alpine', + 'base_directory' => '/', + 'is_http_basic_auth_enabled' => false, + 'redirect' => 'no', + ]); + + Livewire::test(General::class, ['application' => $application]) + ->assertSuccessful() + ->assertSet('dockerfileLocation', $expected); +})->with([ + 'Dockerfile' => ['dockerfile', '/Dockerfile'], + 'Nixpacks' => ['nixpacks', null], +]); + test('networking section hints that internal ports can be set per domain', function () { $application = Application::factory()->create([ 'environment_id' => $this->environment->id, diff --git a/tests/v4/Browser/ApplicationConfigurationTest.php b/tests/v4/Browser/ApplicationConfigurationTest.php index cb60e12949..f7778b501b 100644 --- a/tests/v4/Browser/ApplicationConfigurationTest.php +++ b/tests/v4/Browser/ApplicationConfigurationTest.php @@ -156,6 +156,27 @@ it('saves custom docker run options from the UI', function () { ->screenshot(filename: 'application-docker-run-options'); }); +it('restores the default file location when the field is cleared', function (string $buildPack, string $column, string $default) { + $this->application->update(['build_pack' => $buildPack, $column => '/docker/custom']); + + loginAndSkipBoarding(); + + $page = visit(applicationConfigurationUrl( + $this->stack['project'], + $this->stack['environment'], + $this->application + )); + + $page->clear("input[placeholder='{$default}']") + ->keys("input[placeholder='{$default}']", 'Tab') + ->assertValue("input[placeholder='{$default}']", $default) + ->assertNoJavaScriptErrors() + ->screenshot(filename: "application-{$buildPack}-location-cleared"); +})->with([ + 'Dockerfile' => ['dockerfile', 'dockerfile_location', '/Dockerfile'], + 'Docker Compose' => ['dockercompose', 'docker_compose_location', '/docker-compose.yaml'], +]); + it('opens environment variables page for the application', function () { loginAndSkipBoarding(); diff --git a/tests/v4/Browser/NewApplicationRepositoryPathsTest.php b/tests/v4/Browser/NewApplicationRepositoryPathsTest.php new file mode 100644 index 0000000000..f7970fd02a --- /dev/null +++ b/tests/v4/Browser/NewApplicationRepositoryPathsTest.php @@ -0,0 +1,24 @@ +uuid}/environment/{$stack['environment']->uuid}/new?type=public&destination={$stack['destination']->uuid}"); + + $page->fill('repository_url', 'https://gitlab.com/example/monorepo.git') + ->click('Check repository') + ->assertSee('Build configuration'); + + selectListboxOption($page, 'build_pack', 'Docker Compose'); + + $page->clear("input[placeholder='/docker-compose.yaml']") + ->keys("input[placeholder='/docker-compose.yaml']", 'Tab') + ->assertValue("input[placeholder='/docker-compose.yaml']", '/docker-compose.yaml') + ->assertNoJavaScriptErrors() + ->screenshot(filename: 'new-application-compose-file-cleared'); +});