This commit is contained in:
Seth Weinheimer 2026-03-11 02:25:10 +08:00 committed by GitHub
commit 9b3152650b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

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;
@ -3489,7 +3490,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 = [
@ -3504,13 +3505,27 @@ 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 !== null && (int) $source->custom_port !== 22) {
$providerInfo['port'] = (int) $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['port'] = ($source->custom_port !== null && $source->custom_port !== '' && (int) $source->custom_port !== 22) ? (int) $source->custom_port : 22;
$providerInfo['user'] = $source->custom_user;
break;
}