diff --git a/app/Livewire/Project/New/GithubPrivateRepository.php b/app/Livewire/Project/New/GithubPrivateRepository.php
index 964cdbe06..c85e52214 100644
--- a/app/Livewire/Project/New/GithubPrivateRepository.php
+++ b/app/Livewire/Project/New/GithubPrivateRepository.php
@@ -242,9 +242,17 @@ class GithubPrivateRepository extends Component
$application_init['health_check_enabled'] = false;
}
if ($this->build_pack === 'dockerfile' && $this->selectedDockerfile) {
+ if (! empty($this->detectedDockerfiles) && ! in_array($this->selectedDockerfile, $this->detectedDockerfiles, true)) {
+ $this->selectedDockerfile = $this->detectedDockerfiles[0];
+ }
$application_init['dockerfile_location'] = $this->selectedDockerfile;
}
if ($this->build_pack === 'dockercompose') {
+ if (! empty($this->detectedDockerComposeFiles) && $this->selectedDockerComposeFile
+ && ! in_array($this->selectedDockerComposeFile, $this->detectedDockerComposeFiles, true)) {
+ $this->selectedDockerComposeFile = $this->detectedDockerComposeFiles[0];
+ $this->docker_compose_location = '/'.$this->selectedDockerComposeFile;
+ }
$application_init['docker_compose_location'] = $this->docker_compose_location;
}
diff --git a/app/Livewire/Project/New/GithubPrivateRepositoryDeployKey.php b/app/Livewire/Project/New/GithubPrivateRepositoryDeployKey.php
index d5656e27c..e8f07538b 100644
--- a/app/Livewire/Project/New/GithubPrivateRepositoryDeployKey.php
+++ b/app/Livewire/Project/New/GithubPrivateRepositoryDeployKey.php
@@ -219,9 +219,17 @@ class GithubPrivateRepositoryDeployKey extends Component
$application_init['health_check_enabled'] = false;
}
if ($this->build_pack === 'dockerfile' && $this->selectedDockerfile) {
+ if (! empty($this->detectedDockerfiles) && ! in_array($this->selectedDockerfile, $this->detectedDockerfiles, true)) {
+ $this->selectedDockerfile = $this->detectedDockerfiles[0];
+ }
$application_init['dockerfile_location'] = $this->selectedDockerfile;
}
if ($this->build_pack === 'dockercompose') {
+ if (! empty($this->detectedDockerComposeFiles) && $this->selectedDockerComposeFile
+ && ! in_array($this->selectedDockerComposeFile, $this->detectedDockerComposeFiles, true)) {
+ $this->selectedDockerComposeFile = $this->detectedDockerComposeFiles[0];
+ $this->docker_compose_location = '/'.$this->selectedDockerComposeFile;
+ }
$application_init['docker_compose_location'] = $this->docker_compose_location;
$application_init['base_directory'] = $this->base_directory;
}
diff --git a/app/Livewire/Project/New/PublicGitRepository.php b/app/Livewire/Project/New/PublicGitRepository.php
index 4cad3ebf3..3c9410405 100644
--- a/app/Livewire/Project/New/PublicGitRepository.php
+++ b/app/Livewire/Project/New/PublicGitRepository.php
@@ -204,7 +204,9 @@ class PublicGitRepository extends Component
$this->detectRepository();
}
} catch (\Throwable $e) {
- return handleError($e, $this);
+ // Both main and master failed — still run detection
+ // with clone fallback to the repo's default branch
+ $this->detectRepository();
}
} else {
return handleError($e, $this);
@@ -396,9 +398,17 @@ class PublicGitRepository extends Component
$application_init['health_check_enabled'] = false;
}
if ($this->build_pack === 'dockerfile' && $this->selectedDockerfile) {
+ if (! empty($this->detectedDockerfiles) && ! in_array($this->selectedDockerfile, $this->detectedDockerfiles, true)) {
+ $this->selectedDockerfile = $this->detectedDockerfiles[0];
+ }
$application_init['dockerfile_location'] = $this->selectedDockerfile;
}
if ($this->build_pack === 'dockercompose') {
+ if (! empty($this->detectedDockerComposeFiles) && $this->selectedDockerComposeFile
+ && ! in_array($this->selectedDockerComposeFile, $this->detectedDockerComposeFiles, true)) {
+ $this->selectedDockerComposeFile = $this->detectedDockerComposeFiles[0];
+ $this->docker_compose_location = '/'.$this->selectedDockerComposeFile;
+ }
$application_init['docker_compose_location'] = $this->docker_compose_location;
$application_init['base_directory'] = $this->base_directory;
}
diff --git a/app/Services/RepositoryDetector.php b/app/Services/RepositoryDetector.php
index fdb96411d..91b5de4f5 100644
--- a/app/Services/RepositoryDetector.php
+++ b/app/Services/RepositoryDetector.php
@@ -30,6 +30,11 @@ class RepositoryDetector
->first();
if (! $server) {
+ Log::debug('Repository detection skipped: server not found', [
+ 'serverId' => $this->serverId,
+ 'teamId' => $this->teamId,
+ ]);
+
return RepositoryDetectionResult::none();
}
@@ -48,13 +53,16 @@ class RepositoryDetector
$workDir = escapeshellarg("{$tempDir}{$cdBase}");
$envPattern = self::ENV_FILE_PATTERN;
+ $escapedTempDir = escapeshellarg($tempDir);
+
$commands = collect([
- 'rm -rf -- '.escapeshellarg($tempDir),
- 'git clone --depth 1 -b '.escapeshellarg($this->branch).' '.escapeshellarg($this->repositoryUrl).' '.escapeshellarg($tempDir).' >/dev/null 2>&1',
+ 'rm -rf -- '.$escapedTempDir,
+ "trap 'rm -rf -- {$escapedTempDir}' EXIT",
+ 'git clone --depth 1 -b '.escapeshellarg($this->branch).' '.escapeshellarg($this->repositoryUrl).' '.escapeshellarg($tempDir).' >/dev/null 2>&1 || git clone --depth 1 '.escapeshellarg($this->repositoryUrl).' '.escapeshellarg($tempDir).' >/dev/null 2>&1',
"cd {$workDir}",
// Collect file lists into shell variables
- 'df_list=$(git ls-files | grep -i \'dockerfile\' || true)',
- 'compose_list=$(git ls-files | grep -iE \'^(docker-compose\.(yml|yaml)|compose\.(yml|yaml))$\' || true)',
+ 'df_list=$(git ls-files | grep -iE \'(^|/)Dockerfile(\.[a-zA-Z0-9_-]+)?$\' || true)',
+ 'compose_list=$(git ls-files | grep -iE \'(^|/)(docker-compose\.(yml|yaml)|compose\.(yml|yaml))$\' || true)',
'env_list=$(git ls-files | grep -iE \''.$envPattern.'\' || true)',
// Build env file contents as a JSON object (uses jq to safely encode file content)
'env_json=\'{}\'',
@@ -79,7 +87,6 @@ class RepositoryDetector
' --argjson envFiles "$env_json" \\',
' --argjson dockerfilePorts "$port_json" \\',
' \'$ARGS.named\'',
- 'rm -rf -- '.escapeshellarg($tempDir),
]);
try {
@@ -111,7 +118,7 @@ class RepositoryDetector
$dockerfilePorts = [];
foreach ($data['dockerfilePorts'] ?? [] as $file => $port) {
- $dockerfilePorts[$file] = is_int($port) ? $port : null;
+ $dockerfilePorts[$file] = is_numeric($port) ? (int) $port : null;
}
return new RepositoryDetectionResult(
diff --git a/app/Traits/HasRepositoryDetection.php b/app/Traits/HasRepositoryDetection.php
index d4d8775e6..53078bd05 100644
--- a/app/Traits/HasRepositoryDetection.php
+++ b/app/Traits/HasRepositoryDetection.php
@@ -14,6 +14,8 @@ trait HasRepositoryDetection
public ?string $selectedDockerfile = null;
+ public ?string $selectedDockerComposeFile = null;
+
public ?int $detectedPort = null;
public array $dockerfilePorts = [];
@@ -49,8 +51,9 @@ trait HasRepositoryDetection
}
}
- if ($result->hasDockerCompose() && count($result->dockerComposeFiles) === 1) {
- $this->docker_compose_location = '/'.$result->dockerComposeFiles[0];
+ if ($result->hasDockerCompose()) {
+ $this->selectedDockerComposeFile = $result->dockerComposeFiles[0];
+ $this->docker_compose_location = '/'.$this->selectedDockerComposeFile;
}
if ($result->hasEnvFiles()) {
@@ -68,12 +71,31 @@ trait HasRepositoryDetection
public function updatedSelectedDockerfile(): void
{
+ if ($this->selectedDockerfile && ! in_array($this->selectedDockerfile, $this->detectedDockerfiles, true)) {
+ $this->selectedDockerfile = $this->detectedDockerfiles[0] ?? null;
+ }
+
if ($this->selectedDockerfile && isset($this->dockerfilePorts[$this->selectedDockerfile])) {
$port = $this->dockerfilePorts[$this->selectedDockerfile];
if ($port) {
$this->port = $port;
$this->detectedPort = $port;
+ } else {
+ $this->detectedPort = null;
}
+ } else {
+ $this->detectedPort = null;
+ }
+ }
+
+ public function updatedSelectedDockerComposeFile(): void
+ {
+ if ($this->selectedDockerComposeFile && ! in_array($this->selectedDockerComposeFile, $this->detectedDockerComposeFiles, true)) {
+ $this->selectedDockerComposeFile = $this->detectedDockerComposeFiles[0] ?? null;
+ }
+
+ if ($this->selectedDockerComposeFile) {
+ $this->docker_compose_location = '/'.$this->selectedDockerComposeFile;
}
}
diff --git a/resources/views/livewire/project/new/github-private-repository-deploy-key.blade.php b/resources/views/livewire/project/new/github-private-repository-deploy-key.blade.php
index cf32f17b8..04a3f8995 100644
--- a/resources/views/livewire/project/new/github-private-repository-deploy-key.blade.php
+++ b/resources/views/livewire/project/new/github-private-repository-deploy-key.blade.php
@@ -115,6 +115,14 @@
@endif
@if ($build_pack === 'dockercompose')
+ @if (count($detectedDockerComposeFiles) > 1)
+