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}}:
- |