diff --git a/app/Http/Submission/Handlers/DoneHandler.php b/app/Http/Submission/Handlers/DoneHandler.php index 149f790e33..7b2ece70dc 100644 --- a/app/Http/Submission/Handlers/DoneHandler.php +++ b/app/Http/Submission/Handlers/DoneHandler.php @@ -63,10 +63,9 @@ public function endElement($parser, $name): void $this->Build->UpdateBuild($this->Build->Id, -1, -1); $this->Build->MarkAsDone(true); - // Should we re-run any checks that were previously marked - // as pending? - if ($pendingSubmissionsModel !== null && $pendingSubmissionsModel->recheck) { - $revision = \App\Models\Build::findOrFail((int) $this->Build->Id)->updateStep->revision ?? ''; + // Create or update the GitHub check for this commit. + $revision = \App\Models\Build::findOrFail((int) $this->Build->Id)->updateStep->revision ?? ''; + if ($revision !== '') { Repository::createOrUpdateCheck($revision); } diff --git a/app/Utils/RepositoryUtils.php b/app/Utils/RepositoryUtils.php index b18f0cc098..9aa9f092ac 100644 --- a/app/Utils/RepositoryUtils.php +++ b/app/Utils/RepositoryUtils.php @@ -14,6 +14,19 @@ class RepositoryUtils { + private static function isGitHubUrl(string $url): bool + { + if (str_contains($url, 'github.com')) { + return true; + } + $enterpriseUrl = config('cdash.github_enterprise_url'); + if ($enterpriseUrl !== null) { + $host = parse_url($enterpriseUrl, PHP_URL_HOST); + return $host !== false && str_contains($url, $host); + } + return false; + } + /** Return the GitHub diff URL */ public static function get_github_diff_url($projecturl, $directory, $file, $revision) { @@ -146,6 +159,18 @@ public static function post_pull_request_comment($projectid, $pull_request, $com /** Convert GitHub repository viewer URL into corresponding API URL. */ public static function get_github_api_url($github_url): string { + $enterpriseUrl = config('cdash.github_enterprise_url'); + if ($enterpriseUrl !== null) { + $host = parse_url($enterpriseUrl, PHP_URL_HOST); + if ($host !== false && str_contains($github_url, $host)) { + // For GHE, ...://// becomes ...:///api/v3/repos// + $idx = strpos($github_url, $host); + $idx2 = $idx + strlen($host) + 1; + $api_url = substr($github_url, 0, $idx) . $host . '/api/v3/repos/'; + $api_url .= substr($github_url, $idx2); + return $api_url; + } + } /* * For a URL of the form: * ...://github.com// @@ -166,7 +191,7 @@ public static function post_github_pull_request_comment(Project $project, $pull_ $repo = null; $repositories = $project->GetRepositories(); foreach ($repositories as $repository) { - if (str_contains($repository['url'], 'github.com')) { + if (self::isGitHubUrl($repository['url'])) { $repo = $repository; break; } diff --git a/app/cdash/app/Lib/Repository/GitHub.php b/app/cdash/app/Lib/Repository/GitHub.php index 32383b1374..15aef5a85b 100644 --- a/app/cdash/app/Lib/Repository/GitHub.php +++ b/app/cdash/app/Lib/Repository/GitHub.php @@ -76,7 +76,7 @@ public function __construct(Project $project) $repositories = $this->project->GetRepositories(); foreach ($repositories as $repo) { - if (str_contains($repo['url'], 'github.com')) { + if ($this->isGitHubUrl($repo['url'])) { $this->installationId = $repo['username']; break; } @@ -93,7 +93,8 @@ public function setApiClient(GitHubClient $client): void protected function initializeApiClient(): void { $builder = new GitHubBuilder(); - $apiClient = new GitHubClient($builder, 'machine-man-preview'); + $enterpriseUrl = config('cdash.github_enterprise_url'); + $apiClient = new GitHubClient($builder, null, $enterpriseUrl); $this->setApiClient($apiClient); } @@ -662,6 +663,19 @@ public function getRepository(): string return $this->repo; } + private function isGitHubUrl(string $url): bool + { + if (str_contains($url, 'github.com')) { + return true; + } + $enterpriseUrl = config('cdash.github_enterprise_url'); + if ($enterpriseUrl !== null) { + $host = parse_url($enterpriseUrl, PHP_URL_HOST); + return $host !== false && str_contains($url, $host); + } + return false; + } + protected function getRepositoryInformation(): void { $url = str_replace('//', '', $this->project->CvsUrl ?? ''); diff --git a/config/cdash.php b/config/cdash.php index bcefc6fc17..5221e7c6a5 100755 --- a/config/cdash.php +++ b/config/cdash.php @@ -39,6 +39,7 @@ 'delete_old_subprojects' => env('DELETE_OLD_SUBPROJECTS', true), 'github_always_pass' => env('GITHUB_ALWAYS_PASS', false), 'github_app_id' => env('GITHUB_APP_ID', null), + 'github_enterprise_url' => env('GITHUB_ENTERPRISE_URL', null), 'github_private_key' => env('GITHUB_PRIVATE_KEY', null), 'github_webhook_secret' => env('GITHUB_WEBHOOK_SECRET', null), 'large_text_limit' => env('LARGE_TEXT_LIMIT', 0),