From b6650a099dc53426d5309f3ed34de8ab1acc2b1f Mon Sep 17 00:00:00 2001 From: Claude Code Date: Sun, 2 Nov 2025 17:24:42 +0000 Subject: [PATCH] Fix: Add GitLab support to convertGitUrl function with custom port handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes two issues preventing GitLab deployments with custom SSH ports: 1. Missing GitlabApp import and type declaration in convertGitUrl function - Added 'use App\Models\GitlabApp;' import - Updated function signature to accept 'GithubApp|GitlabApp|null' 2. Custom ports not applied for SCP-style SSH URLs (e.g., git@host:repo.git) - Added logic to extract custom port from source when using SCP-style URLs - GitLab instances with custom SSH ports now work correctly Previously, the function only: - Accepted GithubApp in the type hint, causing runtime errors with GitlabApp - Handled custom ports for HTTP-to-SSH conversion - Didn't apply custom ports when SSH URLs were already provided This fix ensures both GitHub and GitLab apps with custom ports (e.g., 2222) work correctly with SCP-style repository URLs. Fixes deployment errors like: - "convertGitUrl(): Argument #3 must be of type GithubApp|GitlabApp|null, GitlabApp given" - SSH connection failures when GitLab uses non-standard port 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- bootstrap/helpers/shared.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php index 0f5b6f553..8665cf611 100644 --- a/bootstrap/helpers/shared.php +++ b/bootstrap/helpers/shared.php @@ -8,6 +8,7 @@ use App\Models\ApplicationDeploymentQueue; use App\Models\ApplicationPreview; use App\Models\EnvironmentVariable; use App\Models\GithubApp; +use App\Models\GitlabApp; use App\Models\InstanceSettings; use App\Models\LocalFileVolume; use App\Models\LocalPersistentVolume; @@ -3014,7 +3015,7 @@ NGINX; } } -function convertGitUrl(string $gitRepository, string $deploymentType, ?GithubApp $source = null): array +function convertGitUrl(string $gitRepository, string $deploymentType, GithubApp|GitlabApp|null $source = null): array { $repository = $gitRepository; $providerInfo = [ @@ -3029,11 +3030,25 @@ function convertGitUrl(string $gitRepository, string $deploymentType, ?GithubApp // Let's try and parse the string to detect if it's a valid SSH string or not preg_match('/((.*?)\:\/\/)?(.*@.*:.*)/', $gitRepository, $sshMatches); + // Extract custom port from source for GitLab/GitHub apps with custom ports + // This handles SCP-style URLs like git@host:repo.git where host uses non-standard port + if ($deploymentType === 'deploy_key' && $source && ! empty($sshMatches)) { + switch ($source->getMorphClass()) { + case \App\Models\GithubApp::class: + case \App\Models\GitlabApp::class: + if ($source->custom_port !== 22) { + $providerInfo['port'] = $source->custom_port; + } + break; + } + } + if ($deploymentType === 'deploy_key' && empty($sshMatches) && $source) { // If this happens, the user may have provided an HTTP URL when they needed an SSH one // Let's try and fix that for known Git providers switch ($source->getMorphClass()) { case \App\Models\GithubApp::class: + case \App\Models\GitlabApp::class: $providerInfo['host'] = Url::fromString($source->html_url)->getHost(); $providerInfo['port'] = $source->custom_port; $providerInfo['user'] = $source->custom_user;