From 3c818cfab6a1919f599686ee53a1820e058dee8b Mon Sep 17 00:00:00 2001 From: William Allen Date: Tue, 24 Feb 2026 09:48:01 -0500 Subject: [PATCH] Revamp build errors page --- app/Http/Controllers/BuildController.php | 34 +- app/Utils/RepositoryUtils.php | 8 +- app/cdash/app/Lib/Repository/GitHub.php | 2 +- app/cdash/app/Model/Build.php | 8 +- app/cdash/app/Model/BuildError.php | 2 +- app/cdash/app/Model/BuildFailure.php | 4 +- app/cdash/tests/CMakeLists.txt | 2 + .../tests/autoremovebuilds/CMakeLists.txt | 1 - .../case/CDash/Lib/Repository/GitHubTest.php | 4 +- app/cdash/tests/test_issuecreation.php | 6 +- app/cdash/tests/test_subproject.php | 10 +- graphql/schema.graphql | 4 +- phpstan-baseline.neon | 6 + .../js/angular/controllers/viewBuildError.js | 34 - resources/js/angular/legacy.js | 4 - .../js/angular/views/partials/build.html | 28 +- .../js/angular/views/partials/buildError.html | 131 ---- .../js/angular/views/viewBuildError.html | 102 --- resources/js/vue/app.js | 3 + .../js/vue/components/BuildErrorsPage.vue | 161 ++++ resources/js/vue/components/BuildSummary.vue | 16 +- .../vue/components/shared/BuildErrorItem.vue | 142 ++++ .../vue/components/shared/BuildErrorList.vue | 209 +++++ routes/web.php | 9 +- tests/Browser/Pages/BuildErrorsPageTest.php | 712 ++++++++++++++++++ tests/cypress/e2e/CMakeLists.txt | 3 - tests/cypress/e2e/view-build-error.cy.js | 88 --- 27 files changed, 1316 insertions(+), 417 deletions(-) delete mode 100644 resources/js/angular/controllers/viewBuildError.js delete mode 100644 resources/js/angular/views/partials/buildError.html delete mode 100644 resources/js/angular/views/viewBuildError.html create mode 100644 resources/js/vue/components/BuildErrorsPage.vue create mode 100644 resources/js/vue/components/shared/BuildErrorItem.vue create mode 100644 resources/js/vue/components/shared/BuildErrorList.vue create mode 100644 tests/Browser/Pages/BuildErrorsPageTest.php delete mode 100644 tests/cypress/e2e/view-build-error.cy.js diff --git a/app/Http/Controllers/BuildController.php b/app/Http/Controllers/BuildController.php index 2db283ad25..d5a9a34130 100644 --- a/app/Http/Controllers/BuildController.php +++ b/app/Http/Controllers/BuildController.php @@ -17,13 +17,13 @@ use CDash\Database; use CDash\Model\Build; use CDash\Model\BuildConfigure; -use CDash\Model\BuildError; use CDash\Model\BuildFailure; use CDash\Model\BuildGroupRule; use CDash\Model\BuildRelationship; use CDash\ServiceContainer; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; +use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; @@ -35,6 +35,32 @@ final class BuildController extends AbstractBuildController { + public function errors(Request $request, int $build_id): View + { + $this->setBuildById($build_id); + + $params = [ + 'build-id' => $this->build->Id, + ]; + + $onlyNewErrors = $request->has('onlydeltap'); + $onlyFixedErrors = $request->has('onlydeltan'); + if ($onlyNewErrors || $onlyFixedErrors) { + $previousBuildId = $this->build->GetPreviousBuildId(); + if ($previousBuildId > 0) { + $params['previous-build-id'] = $previousBuildId; + } + if ($onlyNewErrors) { + $params['show-new-errors'] = true; + } + if ($onlyFixedErrors) { + $params['show-fixed-errors'] = true; + } + } + + return $this->vue('build-errors-page', 'Build Errors', $params); + } + public function commands(int $build_id): View { $this->setBuildById($build_id); @@ -1116,12 +1142,6 @@ public function manageBuildGroup(): View return $this->angular_view('manageBuildGroup', 'Manage Build Groups'); } - public function viewBuildError(): View - { - $this->setBuildById(request()->integer('buildid')); - return $this->angular_view('viewBuildError', 'Build Errors'); - } - public function viewBuildGroup(): View { $this->setProjectByName(request()->input('project', '')); diff --git a/app/Utils/RepositoryUtils.php b/app/Utils/RepositoryUtils.php index 2a0bfd05f2..d1e6c9523b 100644 --- a/app/Utils/RepositoryUtils.php +++ b/app/Utils/RepositoryUtils.php @@ -544,7 +544,7 @@ private static function get_email_summary(int $buildid, array $errors, $errorkey foreach ($errors as $error) { $info = ''; if (strlen($error->sourcefile) > 0) { - $info .= "{$error->sourcefile} line {$error->sourceline} ({$serverURI}/viewBuildError.php?buildid={$buildid})"; + $info .= "{$error->sourcefile} line {$error->sourceline} ({$serverURI}/builds/{$buildid}/errors)"; $info .= "{$error->stderror}\n"; } else { $info .= "{$error->stderror}\n"; @@ -564,7 +564,7 @@ private static function get_email_summary(int $buildid, array $errors, $errorkey foreach ($failures as $fail) { $info = ''; if (strlen($fail->sourcefile) > 0) { - $info .= "{$fail->sourcefile} ({$serverURI}/viewBuildError.php?type=0&buildid={$buildid})\n"; + $info .= "{$fail->sourcefile} ({$serverURI}/builds/{$buildid}/errors)\n"; } if (strlen($fail->stdoutput) > 0) { $info .= "{$fail->stdoutput}\n"; @@ -592,7 +592,7 @@ private static function get_email_summary(int $buildid, array $errors, $errorkey foreach ($warnings as $warning) { $info = ''; if (strlen($warning->sourcefile) > 0) { - $info .= "{$warning->sourcefile} line {$warning->sourceline} ({$serverURI}/viewBuildError.php?type=1&buildid={$buildid})\n"; + $info .= "{$warning->sourcefile} line {$warning->sourceline} ({$serverURI}/builds/{$buildid}/errors)\n"; $info .= "{$warning->stderror}\n"; } else { $info .= "{$warning->stderror}\n"; @@ -614,7 +614,7 @@ private static function get_email_summary(int $buildid, array $errors, $errorkey foreach ($failures as $fail) { $info = ''; if (strlen($fail->sourcefile) > 0) { - $info .= "{$fail->sourcefile} ({$serverURI}/viewBuildError.php?type=1&buildid={$buildid})\n"; + $info .= "{$fail->sourcefile} ({$serverURI}/builds/{$buildid}/errors)\n"; } if (strlen($fail->stdoutput) > 0) { $info .= "{$fail->stdoutput}\n"; diff --git a/app/cdash/app/Lib/Repository/GitHub.php b/app/cdash/app/Lib/Repository/GitHub.php index 3a3779adf6..5e4778f50b 100644 --- a/app/cdash/app/Lib/Repository/GitHub.php +++ b/app/cdash/app/Lib/Repository/GitHub.php @@ -425,7 +425,7 @@ public function getCheckSummaryForBuildRow(array $row): ?string // Pluralize. $msg .= 's'; } - $details_url = "$this->baseUrl/viewBuildError.php?buildid={$row['id']}"; + $details_url = "$this->baseUrl/builds/{$row['id']}/errors"; $icon = ':x:'; $this->numFailed++; $this->foundBuildErrors = true; diff --git a/app/cdash/app/Model/Build.php b/app/cdash/app/Model/Build.php index 53b6a2f743..54f6de5aa8 100644 --- a/app/cdash/app/Model/Build.php +++ b/app/cdash/app/Model/Build.php @@ -501,9 +501,9 @@ private function GetRelatedBuildId( 'AND subprojectid = :subprojectid'; $values_to_bind['subprojectid'] = $this->SubProjectId; } - if ($this->ParentId === self::PARENT_BUILD) { + if ($this->ParentId === self::PARENT_BUILD || $this->ParentId === self::STANDALONE_BUILD) { // Only search for other parents. - $parent_criteria = 'AND build.parentid = ' . self::PARENT_BUILD; + $parent_criteria = 'AND build.parentid IN (' . self::PARENT_BUILD . ', ' . self::STANDALONE_BUILD . ')'; } $stmt = $this->PDO->prepare(" @@ -893,7 +893,7 @@ public function Save() if ($hasErrors) { $message = "$this->Name experienced errors"; - $url = url('/viewBuildError.php') . "?buildid=$this->Id"; + $url = url('/builds/' . $this->Id . '/errors'); $this->NotifyPullRequest($message, $url); } } @@ -2286,7 +2286,7 @@ public function GetBuildSummaryUrl(): string public function GetBuildErrorUrl(): string { - return url('/viewBuildError.php') . "?buildid={$this->Id}"; + return url('/builds/' . $this->Id . '/errors'); } public function GetTestUrl(): string diff --git a/app/cdash/app/Model/BuildError.php b/app/cdash/app/Model/BuildError.php index f796a615dd..c23ecbc268 100644 --- a/app/cdash/app/Model/BuildError.php +++ b/app/cdash/app/Model/BuildError.php @@ -64,6 +64,6 @@ public function Insert(): void */ public function GetUrlForSelf(): string { - return url('/viewBuildError.php') . "?type={$this->Type}&buildid={$this->BuildId}"; + return url('/builds/' . $this->BuildId . '/errors'); } } diff --git a/app/cdash/app/Model/BuildFailure.php b/app/cdash/app/Model/BuildFailure.php index bbc1be8b50..a4481fe576 100644 --- a/app/cdash/app/Model/BuildFailure.php +++ b/app/cdash/app/Model/BuildFailure.php @@ -167,9 +167,9 @@ public function GetBuildFailureArguments(int $buildFailureId): array return $response; } - /** Returns a self referencing URI for a the current BuildFailure. */ + /** Returns a self referencing URI for the current BuildFailure. */ public function GetUrlForSelf(): string { - return url('/viewBuildError.php') . "?type={$this->Type}&buildid={$this->BuildId}"; + return url('/builds/' . $this->BuildId . '/errors'); } } diff --git a/app/cdash/tests/CMakeLists.txt b/app/cdash/tests/CMakeLists.txt index 0cbf0a3989..7df18ed069 100644 --- a/app/cdash/tests/CMakeLists.txt +++ b/app/cdash/tests/CMakeLists.txt @@ -391,6 +391,8 @@ add_browser_test(/Browser/Pages/BuildTestsPageTest) add_browser_test(/Browser/Pages/BuildConfigurePageTest) +add_browser_test(/Browser/Pages/BuildErrorsPageTest) + add_browser_test(/Browser/Pages/BuildCoveragePageTest) add_browser_test(/Browser/Pages/BuildDynamicAnalysisIdPageTest) diff --git a/app/cdash/tests/autoremovebuilds/CMakeLists.txt b/app/cdash/tests/autoremovebuilds/CMakeLists.txt index 3e20a76ee1..7a7a13bcfb 100644 --- a/app/cdash/tests/autoremovebuilds/CMakeLists.txt +++ b/app/cdash/tests/autoremovebuilds/CMakeLists.txt @@ -6,7 +6,6 @@ set_property(TEST deletesubproject PROPERTY DEPENDS cypress/e2e/sub-project-dependencies cypress/e2e/manage-build-group cypress/e2e/manage-sub-project - cypress/e2e/view-build-error cypress/e2e/view-test cypress/e2e/sort-index cypress/e2e/expected-build diff --git a/app/cdash/tests/case/CDash/Lib/Repository/GitHubTest.php b/app/cdash/tests/case/CDash/Lib/Repository/GitHubTest.php index 94b012dfcc..6a0e4a4f4a 100644 --- a/app/cdash/tests/case/CDash/Lib/Repository/GitHubTest.php +++ b/app/cdash/tests/case/CDash/Lib/Repository/GitHubTest.php @@ -108,7 +108,7 @@ public function testCheckSummaryForBuildRow(): void // Single build error. $build_row['builderrors'] = 1; - $link = "$this->baseUrl/viewBuildError.php?buildid=99999"; + $link = "$this->baseUrl/builds/99999/errors"; $actual = $sut->getCheckSummaryForBuildRow($build_row); $expected = $common . ":x: | [1 build error]($link)"; $this::assertEquals($expected, $actual); @@ -224,7 +224,7 @@ private function validateCheckPayloadFromBuildRows(): void $expected['output']['text'] = "$table_header\n"; $expected['output']['text'] .= "[a]($this->baseUrl/builds/99995) | :white_check_mark: | [success]($this->baseUrl/builds/99995)\n"; $expected['output']['text'] .= "[b]($this->baseUrl/builds/99996) | :x: | [5 configure errors]($this->baseUrl/builds/99996/configure)\n"; - $expected['output']['text'] .= "[c]($this->baseUrl/builds/99997) | :x: | [1 build error]($this->baseUrl/viewBuildError.php?buildid=99997)\n"; + $expected['output']['text'] .= "[c]($this->baseUrl/builds/99997) | :x: | [1 build error]($this->baseUrl/builds/99997/errors)\n"; $expected['output']['text'] .= "[d]($this->baseUrl/builds/99998) | :x: | [7 failed tests]($this->baseUrl/builds/99998/tests)"; $build_rows[] = [ 'name' => 'b', diff --git a/app/cdash/tests/test_issuecreation.php b/app/cdash/tests/test_issuecreation.php index 8041068295..53a391113b 100644 --- a/app/cdash/tests/test_issuecreation.php +++ b/app/cdash/tests/test_issuecreation.php @@ -169,15 +169,15 @@ public function testIssueCreation(): void $answer_key = [ 'Buganizer' => [ - 'Standalone' => "https://buganizer.com/issues/new?component=123&template=456&type=BUG&priority=P0&severity=S0&title=FAILED+%28w%3D3%2C+t%3D6%2C+d%3D10%29%3A+IssueCreationProject+-+Linux-g%2B%2B-4.1-LesionSizingSandbox_Debug+-+Experimental&description=Details+on+the+submission+can+be+found+at+$encoded_base_url%2Fbuilds%2F{$buildid1}%0A%0AProject%3A+IssueCreationProject%0ASite%3A+camelot.kitware%0ABuild+Name%3A+Linux-g%2B%2B-4.1-LesionSizingSandbox_Debug%0ABuild+Time%3A+2009-02-23T07%3A10%3A38+UTC%0AType%3A+Experimental%0AWarnings%3A+3%0ATests+not+passing%3A+6%0ADynamic+analysis+tests+failing%3A+10%0A%0A%0A%2AWarnings%2A+%28first+1%29%0ATesting%5CitkDescoteauxSheetnessImageFilterTest2.cxx+line+187+%28$encoded_base_url%2FviewBuildError.php%3Ftype%3D1%26buildid%3D{$buildid1}%29%0A%5C...%5CSandbox%5CTesting%5CitkDescoteauxSheetnessImageFilterTest2.cxx%3A187%3A+warning%3A+converting+to+%3C-30%3E%3C-128%3E%3C-104%3Emain%3A%3AInputPixelType%3C-30%3E%3C-128%3E%3C-103%3E+from+%3C-30%3E%3C-128%3E%3C-104%3Edouble%3C-30%3E%3C-128%3E%3C-103%3E%0A%0A%0A%0A%0A%2ATests+failing%2A+%28first+1%29%0AitkVectorLevelSetFunctionTest2+%7C+Completed+%28OTHER_FAULT%29+%7C+%28$encoded_base_url%2Ftests%2F{$build1failedtestid}%29%0A%0A%0A%0A%2ATests+not+run%2A+%28first+1%29%0AitkVectorFiniteDifferenceFunctionTest1+%7C++%7C+%28$encoded_base_url%2Ftests%2F{$build1notruntestid}%29%0A%0A%0A%0A%2ADynamic+analysis+tests+failing+or+not+run%2A+%28first+1%29%0AitkGeodesicActiveContourLevelSetSegmentationModuleTest1+%28$encoded_base_url%2FviewDynamicAnalysisFile.php%3Fid%3D{$da_id}%29%0A%0A", + 'Standalone' => "https://buganizer.com/issues/new?component=123&template=456&type=BUG&priority=P0&severity=S0&title=FAILED+%28w%3D3%2C+t%3D6%2C+d%3D10%29%3A+IssueCreationProject+-+Linux-g%2B%2B-4.1-LesionSizingSandbox_Debug+-+Experimental&description=Details+on+the+submission+can+be+found+at+$encoded_base_url%2Fbuilds%2F{$buildid1}%0A%0AProject%3A+IssueCreationProject%0ASite%3A+camelot.kitware%0ABuild+Name%3A+Linux-g%2B%2B-4.1-LesionSizingSandbox_Debug%0ABuild+Time%3A+2009-02-23T07%3A10%3A38+UTC%0AType%3A+Experimental%0AWarnings%3A+3%0ATests+not+passing%3A+6%0ADynamic+analysis+tests+failing%3A+10%0A%0A%0A%2AWarnings%2A+%28first+1%29%0ATesting%5CitkDescoteauxSheetnessImageFilterTest2.cxx+line+187+%28$encoded_base_url%2Fbuilds%2F{$buildid1}%2Ferrors%29%0A%5C...%5CSandbox%5CTesting%5CitkDescoteauxSheetnessImageFilterTest2.cxx%3A187%3A+warning%3A+converting+to+%3C-30%3E%3C-128%3E%3C-104%3Emain%3A%3AInputPixelType%3C-30%3E%3C-128%3E%3C-103%3E+from+%3C-30%3E%3C-128%3E%3C-104%3Edouble%3C-30%3E%3C-128%3E%3C-103%3E%0A%0A%0A%0A%0A%2ATests+failing%2A+%28first+1%29%0AitkVectorLevelSetFunctionTest2+%7C+Completed+%28OTHER_FAULT%29+%7C+%28$encoded_base_url%2Ftests%2F{$build1failedtestid}%29%0A%0A%0A%0A%2ATests+not+run%2A+%28first+1%29%0AitkVectorFiniteDifferenceFunctionTest1+%7C++%7C+%28$encoded_base_url%2Ftests%2F{$build1notruntestid}%29%0A%0A%0A%0A%2ADynamic+analysis+tests+failing+or+not+run%2A+%28first+1%29%0AitkGeodesicActiveContourLevelSetSegmentationModuleTest1+%28$encoded_base_url%2FviewDynamicAnalysisFile.php%3Fid%3D{$da_id}%29%0A%0A", 'SubProject' => "https://buganizer.com/issues/new?component=123&template=456&type=BUG&priority=P0&severity=S0&title=FAILED+%28t%3D1%29%3A+CDash%2FSubProject1+-+test_PR_comment+-+Experimental&description=Details+on+the+submission+can+be+found+at+$encoded_base_url%2Fbuilds%2F{$buildid2}%0A%0AProject%3A+CDash%0ASubProject%3A+SubProject1%0ASite%3A+elysium%0ABuild+Name%3A+test_PR_comment%0ABuild+Time%3A+2015-08-11T20%3A45%3A30+UTC%0AType%3A+Experimental%0ATests+not+passing%3A+1%0A%0A%0A%2ATests+failing%2A+%28first+1%29%0Afoo+%7C+Completed+%28Failed%29+%7C+%28$encoded_base_url%2Ftests%2F{$build2failedtestid}%29%0A%0A", ], 'GitHub' => [ - 'Standalone' => "https://github.com/Kitware/CDash/issues/new?title=FAILED+%28w%3D3%2C+t%3D6%2C+d%3D10%29%3A+IssueCreationProject+-+Linux-g%2B%2B-4.1-LesionSizingSandbox_Debug+-+Experimental&body=Details+on+the+submission+can+be+found+at+$encoded_base_url%2Fbuilds%2F{$buildid1}%0A%0AProject%3A+IssueCreationProject%0ASite%3A+camelot.kitware%0ABuild+Name%3A+Linux-g%2B%2B-4.1-LesionSizingSandbox_Debug%0ABuild+Time%3A+2009-02-23T07%3A10%3A38+UTC%0AType%3A+Experimental%0AWarnings%3A+3%0ATests+not+passing%3A+6%0ADynamic+analysis+tests+failing%3A+10%0A%0A%0A%2AWarnings%2A+%28first+1%29%0ATesting%5CitkDescoteauxSheetnessImageFilterTest2.cxx+line+187+%28$encoded_base_url%2FviewBuildError.php%3Ftype%3D1%26buildid%3D{$buildid1}%29%0A%5C...%5CSandbox%5CTesting%5CitkDescoteauxSheetnessImageFilterTest2.cxx%3A187%3A+warning%3A+converting+to+%3C-30%3E%3C-128%3E%3C-104%3Emain%3A%3AInputPixelType%3C-30%3E%3C-128%3E%3C-103%3E+from+%3C-30%3E%3C-128%3E%3C-104%3Edouble%3C-30%3E%3C-128%3E%3C-103%3E%0A%0A%0A%0A%0A%2ATests+failing%2A+%28first+1%29%0AitkVectorLevelSetFunctionTest2+%7C+Completed+%28OTHER_FAULT%29+%7C+%28$encoded_base_url%2Ftests%2F{$build1failedtestid}%29%0A%0A%0A%0A%2ATests+not+run%2A+%28first+1%29%0AitkVectorFiniteDifferenceFunctionTest1+%7C++%7C+%28$encoded_base_url%2Ftests%2F{$build1notruntestid}%29%0A%0A%0A%0A%2ADynamic+analysis+tests+failing+or+not+run%2A+%28first+1%29%0AitkGeodesicActiveContourLevelSetSegmentationModuleTest1+%28$encoded_base_url%2FviewDynamicAnalysisFile.php%3Fid%3D{$da_id}%29%0A%0A", + 'Standalone' => "https://github.com/Kitware/CDash/issues/new?title=FAILED+%28w%3D3%2C+t%3D6%2C+d%3D10%29%3A+IssueCreationProject+-+Linux-g%2B%2B-4.1-LesionSizingSandbox_Debug+-+Experimental&body=Details+on+the+submission+can+be+found+at+$encoded_base_url%2Fbuilds%2F{$buildid1}%0A%0AProject%3A+IssueCreationProject%0ASite%3A+camelot.kitware%0ABuild+Name%3A+Linux-g%2B%2B-4.1-LesionSizingSandbox_Debug%0ABuild+Time%3A+2009-02-23T07%3A10%3A38+UTC%0AType%3A+Experimental%0AWarnings%3A+3%0ATests+not+passing%3A+6%0ADynamic+analysis+tests+failing%3A+10%0A%0A%0A%2AWarnings%2A+%28first+1%29%0ATesting%5CitkDescoteauxSheetnessImageFilterTest2.cxx+line+187+%28$encoded_base_url%2Fbuilds%2F{$buildid1}%2Ferrors%29%0A%5C...%5CSandbox%5CTesting%5CitkDescoteauxSheetnessImageFilterTest2.cxx%3A187%3A+warning%3A+converting+to+%3C-30%3E%3C-128%3E%3C-104%3Emain%3A%3AInputPixelType%3C-30%3E%3C-128%3E%3C-103%3E+from+%3C-30%3E%3C-128%3E%3C-104%3Edouble%3C-30%3E%3C-128%3E%3C-103%3E%0A%0A%0A%0A%0A%2ATests+failing%2A+%28first+1%29%0AitkVectorLevelSetFunctionTest2+%7C+Completed+%28OTHER_FAULT%29+%7C+%28$encoded_base_url%2Ftests%2F{$build1failedtestid}%29%0A%0A%0A%0A%2ATests+not+run%2A+%28first+1%29%0AitkVectorFiniteDifferenceFunctionTest1+%7C++%7C+%28$encoded_base_url%2Ftests%2F{$build1notruntestid}%29%0A%0A%0A%0A%2ADynamic+analysis+tests+failing+or+not+run%2A+%28first+1%29%0AitkGeodesicActiveContourLevelSetSegmentationModuleTest1+%28$encoded_base_url%2FviewDynamicAnalysisFile.php%3Fid%3D{$da_id}%29%0A%0A", 'SubProject' => "https://github.com/Kitware/CDash/issues/new?title=FAILED+%28t%3D1%29%3A+CDash%2FSubProject1+-+test_PR_comment+-+Experimental&body=Details+on+the+submission+can+be+found+at+$encoded_base_url%2Fbuilds%2F{$buildid2}%0A%0AProject%3A+CDash%0ASubProject%3A+SubProject1%0ASite%3A+elysium%0ABuild+Name%3A+test_PR_comment%0ABuild+Time%3A+2015-08-11T20%3A45%3A30+UTC%0AType%3A+Experimental%0ATests+not+passing%3A+1%0A%0A%0A%2ATests+failing%2A+%28first+1%29%0Afoo+%7C+Completed+%28Failed%29+%7C+%28$encoded_base_url%2Ftests%2F{$build2failedtestid}%29%0A%0A", ], 'JIRA' => [ - 'Standalone' => "http://jira.atlassian.com/secure/CreateIssueDetails!init.jspa?pid=123&issuetype=1&summary=FAILED+%28w%3D3%2C+t%3D6%2C+d%3D10%29%3A+IssueCreationProject+-+Linux-g%2B%2B-4.1-LesionSizingSandbox_Debug+-+Experimental&description=Details+on+the+submission+can+be+found+at+$encoded_base_url%2Fbuilds%2F{$buildid1}%0A%0AProject%3A+IssueCreationProject%0ASite%3A+camelot.kitware%0ABuild+Name%3A+Linux-g%2B%2B-4.1-LesionSizingSandbox_Debug%0ABuild+Time%3A+2009-02-23T07%3A10%3A38+UTC%0AType%3A+Experimental%0AWarnings%3A+3%0ATests+not+passing%3A+6%0ADynamic+analysis+tests+failing%3A+10%0A%0A%0A%2AWarnings%2A+%28first+1%29%0ATesting%5CitkDescoteauxSheetnessImageFilterTest2.cxx+line+187+%28$encoded_base_url%2FviewBuildError.php%3Ftype%3D1%26buildid%3D{$buildid1}%29%0A%5C...%5CSandbox%5CTesting%5CitkDescoteauxSheetnessImageFilterTest2.cxx%3A187%3A+warning%3A+converting+to+%3C-30%3E%3C-128%3E%3C-104%3Emain%3A%3AInputPixelType%3C-30%3E%3C-128%3E%3C-103%3E+from+%3C-30%3E%3C-128%3E%3C-104%3Edouble%3C-30%3E%3C-128%3E%3C-103%3E%0A%0A%0A%0A%0A%2ATests+failing%2A+%28first+1%29%0AitkVectorLevelSetFunctionTest2+%7C+Completed+%28OTHER_FAULT%29+%7C+%28$encoded_base_url%2Ftests%2F{$build1failedtestid}%29%0A%0A%0A%0A%2ATests+not+run%2A+%28first+1%29%0AitkVectorFiniteDifferenceFunctionTest1+%7C++%7C+%28$encoded_base_url%2Ftests%2F{$build1notruntestid}%29%0A%0A%0A%0A%2ADynamic+analysis+tests+failing+or+not+run%2A+%28first+1%29%0AitkGeodesicActiveContourLevelSetSegmentationModuleTest1+%28$encoded_base_url%2FviewDynamicAnalysisFile.php%3Fid%3D{$da_id}%29%0A%0A", + 'Standalone' => "http://jira.atlassian.com/secure/CreateIssueDetails!init.jspa?pid=123&issuetype=1&summary=FAILED+%28w%3D3%2C+t%3D6%2C+d%3D10%29%3A+IssueCreationProject+-+Linux-g%2B%2B-4.1-LesionSizingSandbox_Debug+-+Experimental&description=Details+on+the+submission+can+be+found+at+$encoded_base_url%2Fbuilds%2F{$buildid1}%0A%0AProject%3A+IssueCreationProject%0ASite%3A+camelot.kitware%0ABuild+Name%3A+Linux-g%2B%2B-4.1-LesionSizingSandbox_Debug%0ABuild+Time%3A+2009-02-23T07%3A10%3A38+UTC%0AType%3A+Experimental%0AWarnings%3A+3%0ATests+not+passing%3A+6%0ADynamic+analysis+tests+failing%3A+10%0A%0A%0A%2AWarnings%2A+%28first+1%29%0ATesting%5CitkDescoteauxSheetnessImageFilterTest2.cxx+line+187+%28$encoded_base_url%2Fbuilds%2F{$buildid1}%2Ferrors%29%0A%5C...%5CSandbox%5CTesting%5CitkDescoteauxSheetnessImageFilterTest2.cxx%3A187%3A+warning%3A+converting+to+%3C-30%3E%3C-128%3E%3C-104%3Emain%3A%3AInputPixelType%3C-30%3E%3C-128%3E%3C-103%3E+from+%3C-30%3E%3C-128%3E%3C-104%3Edouble%3C-30%3E%3C-128%3E%3C-103%3E%0A%0A%0A%0A%0A%2ATests+failing%2A+%28first+1%29%0AitkVectorLevelSetFunctionTest2+%7C+Completed+%28OTHER_FAULT%29+%7C+%28$encoded_base_url%2Ftests%2F{$build1failedtestid}%29%0A%0A%0A%0A%2ATests+not+run%2A+%28first+1%29%0AitkVectorFiniteDifferenceFunctionTest1+%7C++%7C+%28$encoded_base_url%2Ftests%2F{$build1notruntestid}%29%0A%0A%0A%0A%2ADynamic+analysis+tests+failing+or+not+run%2A+%28first+1%29%0AitkGeodesicActiveContourLevelSetSegmentationModuleTest1+%28$encoded_base_url%2FviewDynamicAnalysisFile.php%3Fid%3D{$da_id}%29%0A%0A", 'SubProject' => "http://jira.atlassian.com/secure/CreateIssueDetails!init.jspa?pid=123&issuetype=1&summary=FAILED+%28t%3D1%29%3A+CDash%2FSubProject1+-+test_PR_comment+-+Experimental&description=Details+on+the+submission+can+be+found+at+$encoded_base_url%2Fbuilds%2F{$buildid2}%0A%0AProject%3A+CDash%0ASubProject%3A+SubProject1%0ASite%3A+elysium%0ABuild+Name%3A+test_PR_comment%0ABuild+Time%3A+2015-08-11T20%3A45%3A30+UTC%0AType%3A+Experimental%0ATests+not+passing%3A+1%0A%0A%0A%2ATests+failing%2A+%28first+1%29%0Afoo+%7C+Completed+%28Failed%29+%7C+%28$encoded_base_url%2Ftests%2F{$build2failedtestid}%29%0A%0A", ], ]; diff --git a/app/cdash/tests/test_subproject.php b/app/cdash/tests/test_subproject.php index 224420baf9..e57f669491 100644 --- a/app/cdash/tests/test_subproject.php +++ b/app/cdash/tests/test_subproject.php @@ -69,17 +69,17 @@ public function testSubmissionSubProjectBuild(): void 'Type: Nightly', 'Total Warnings: 21', '*Warnings* (first 5 included)', - "packages/epetraext/src/transform/EpetraExt_BlockAdjacencyGraph.cpp ({$url}/viewBuildError.php?type=", + "packages/epetraext/src/transform/EpetraExt_BlockAdjacencyGraph.cpp ({$url}/builds/", '/home/rabartl/PROJECTS/dashboards/Trilinos.base/SERIAL_RELEASE/Trilinos/packages/epetraext', - "packages/epetraext/src/block/EpetraExt_BlockDiagMatrix.cpp ({$url}/viewBuildError.php?type=", + "packages/epetraext/src/block/EpetraExt_BlockDiagMatrix.cpp ({$url}/builds", 'EpetraExt_BlockDiagMatrix.cpp: In member function ‘virtual void EpetraExt_BlockDiagMatrix::Print(std::ostream&) const', '/home/rabartl/PROJECTS/dashboards/', - "packages/epetraext/src/block/EpetraExt_MultiPointModelEvaluator.cpp ({$url}/viewBuildError.php?type=", + "packages/epetraext/src/block/EpetraExt_MultiPointModelEvaluator.cpp ({$url}/builds", 'EpetraExt_MultiPointModelEvaluator.h:', - "packages/galeri/src/Galeri_Utils.cpp ({$url}/viewBuildError.php?type=", + "packages/galeri/src/Galeri_Utils.cpp ({$url}/builds", 'In function ‘void Galeri::Solve', '/home/rabartl/PROJECTS/dashboard', - "packages/galeri/src/Galeri_CrsMatrices.cpp ({$url}/viewBuildError.php?type=", + "packages/galeri/src/Galeri_CrsMatrices.cpp ({$url}/builds", 'In function ‘Epetra_CrsMatrix* Galeri::Matrices::UniFlow2D', '/', '-CDash on', diff --git a/graphql/schema.graphql b/graphql/schema.graphql index 7c26ec0ae8..dcbbd02cd1 100644 --- a/graphql/schema.graphql +++ b/graphql/schema.graphql @@ -735,7 +735,9 @@ type Build { """ A list of warnings and errors submitted for this build. """ - buildErrors: [BuildError!]! @hasMany(type: CONNECTION) @orderBy(column: "id", direction: DESC) + buildErrors( + filters: _ @filter + ): [BuildError!]! @hasMany(type: CONNECTION) @orderBy(column: "id", direction: DESC) # TODO: Make an "errors" field which returns the union of basic and rich errors """ diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 17c23067bb..0831ce2fa6 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -26757,6 +26757,12 @@ parameters: count: 1 path: tests/Browser/Pages/BuildCoveragePageTest.php + - + rawMessage: 'PHPDoc tag @var with type App\Models\Label is not subtype of type App\Models\Label&object{pivot: Illuminate\Database\Eloquent\Relations\Pivot}.' + identifier: varTag.type + count: 2 + path: tests/Browser/Pages/BuildErrorsPageTest.php + - rawMessage: 'Method Tests\Browser\Pages\ProjectMembersPageTest::testFullInvitationWorkflow() throws checked exception OverflowException but it''s missing from the PHPDoc @throws tag.' identifier: missingType.checkedException diff --git a/resources/js/angular/controllers/viewBuildError.js b/resources/js/angular/controllers/viewBuildError.js deleted file mode 100644 index 84e4fd74aa..0000000000 --- a/resources/js/angular/controllers/viewBuildError.js +++ /dev/null @@ -1,34 +0,0 @@ -export const buildError = ["VERSION", function (VERSION) { - return { - templateUrl: 'assets/js/angular/views/partials/buildError.html?id=' + VERSION, - }; - }]; - -export function BuildErrorController($scope, $sce, apiLoader) { - $scope.loading = true; - $scope.pagination = []; - $scope.pagination.buildErrors = []; - $scope.pagination.currentPage = 1; - $scope.pagination.numPerPage = 25; - $scope.pagination.maxSize = 5; - - apiLoader.loadPageData($scope, 'api/v1/viewBuildError.php'); - $scope.finishSetup = function() { - $scope.setPage(1); - }; - - $scope.setPage = function (pageNo) { - var begin = ((pageNo - 1) * $scope.pagination.numPerPage), - end = begin + $scope.pagination.numPerPage; - - if (end > 0) { - $scope.pagination.buildErrors = $scope.cdash.errors.slice(begin, end); - } else { - $scope.pagination.buildErrors = $scope.cdash.errors; - } - }; - - $scope.pageChanged = function() { - $scope.setPage($scope.pagination.currentPage); - }; -} diff --git a/resources/js/angular/legacy.js b/resources/js/angular/legacy.js index 561a318eb0..ca1d28142c 100644 --- a/resources/js/angular/legacy.js +++ b/resources/js/angular/legacy.js @@ -41,10 +41,6 @@ CDash.filter('filter_buildgroups', filter_buildgroups); import { ViewSubProjectsController } from "./controllers/viewSubProjects"; CDash.controller('ViewSubProjectsController', ["$scope", "multisort", "apiLoader", ViewSubProjectsController]); -import { BuildErrorController, buildError } from "./controllers/viewBuildError"; -CDash.controller('ViewBuildErrorController', ["$scope", "$sce", "apiLoader", BuildErrorController]); -CDash.directive('buildError', buildError); - import { ManageOverviewController } from "./controllers/manageOverview"; CDash.controller('ManageOverviewController', ["$scope", "$http", "apiLoader", ManageOverviewController]); diff --git a/resources/js/angular/views/partials/build.html b/resources/js/angular/views/partials/build.html index fede00173f..09fdd21429 100644 --- a/resources/js/angular/views/partials/build.html +++ b/resources/js/angular/views/partials/build.html @@ -1,8 +1,8 @@ - @@ -185,9 +185,9 @@ {{::group.name}}: -