Fix: Add GitLab support to convertGitUrl function with custom port handling

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 <noreply@anthropic.com>
This commit is contained in:
Claude Code 2025-11-02 17:24:42 +00:00
parent f64bea3463
commit b6650a099d

View file

@ -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;