mirror of
https://github.com/coollabsio/coolify.git
synced 2026-11-06 13:10:37 -04:00
fix(application): show the default file location when the field is empty or cleared
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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">
|
||||
<x-forms.input x-bind:disabled="shouldDisable()" placeholder="/"
|
||||
@@ -230,7 +231,8 @@
|
||||
this.baseDir = this.normalizePath(this.baseDir);
|
||||
},
|
||||
normalizeDockerfileLocation() {
|
||||
this.dockerfileLocation = this.normalizePath(this.dockerfileLocation);
|
||||
const path = this.normalizePath(this.dockerfileLocation);
|
||||
this.dockerfileLocation = path === '/' ? '/Dockerfile' : path;
|
||||
}
|
||||
}" class="grid gap-4 lg:grid-cols-2">
|
||||
<x-forms.input placeholder="/"
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
<x-forms.input placeholder="/docker-compose.yaml"
|
||||
wire:model.defer="docker_compose_location" label="Compose file"
|
||||
helper="Path relative to the base directory." x-model="composeLocation"
|
||||
@blur="composeLocation = normalize(composeLocation)" />
|
||||
@blur="composeLocation = normalize(composeLocation).replace(/^\/$/, '/docker-compose.yaml')" />
|
||||
<p class="sm:col-span-2 text-xs text-neutral-500 dark:text-fg-dim">
|
||||
Resolved file:
|
||||
<code class="font-mono text-coollabs dark:text-warning"
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
<x-forms.input placeholder="/docker-compose.yaml"
|
||||
wire:model.defer="docker_compose_location" label="Compose file"
|
||||
helper="Path relative to the base directory." x-model="composeLocation"
|
||||
@blur="composeLocation = normalize(composeLocation)" />
|
||||
@blur="composeLocation = normalize(composeLocation).replace(/^\/$/, '/docker-compose.yaml')" />
|
||||
<p class="sm:col-span-2 text-xs text-neutral-500 dark:text-fg-dim">
|
||||
Resolved file:
|
||||
<code class="font-mono text-coollabs dark:text-warning"
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
<x-forms.input placeholder="/docker-compose.yaml"
|
||||
wire:model.defer="docker_compose_location" label="Compose file"
|
||||
helper="Path relative to the base directory." x-model="composeLocation"
|
||||
@blur="composeLocation = normalize(composeLocation)" />
|
||||
@blur="composeLocation = normalize(composeLocation).replace(/^\/$/, '/docker-compose.yaml')" />
|
||||
<p class="sm:col-span-2 text-xs text-neutral-500 dark:text-fg-dim">
|
||||
Resolved file:
|
||||
<code class="font-mono text-coollabs dark:text-warning"
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
<x-forms.input placeholder="/docker-compose.yaml"
|
||||
wire:model.defer="docker_compose_location" label="Compose file"
|
||||
helper="Path relative to the base directory." x-model="composeLocation"
|
||||
@blur="composeLocation = normalize(composeLocation)" />
|
||||
@blur="composeLocation = normalize(composeLocation).replace(/^\/$/, '/docker-compose.yaml')" />
|
||||
<p class="sm:col-span-2 text-xs text-neutral-500 dark:text-fg-dim">
|
||||
Resolved file:
|
||||
<code class="font-mono text-coollabs dark:text-warning"
|
||||
|
||||
@@ -122,6 +122,26 @@ test('switching from railpack to compose preserves the existing application doma
|
||||
->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,
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
|
||||
uses(RefreshDatabase::class);
|
||||
|
||||
it('restores the default compose file when the field is cleared', function () {
|
||||
$stack = seedBrowserResourceStack();
|
||||
loginAndSkipBoarding();
|
||||
|
||||
$page = visit("/project/{$stack['project']->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');
|
||||
});
|
||||
Reference in New Issue
Block a user