From 35f1e83283b1ff5b01446a2c6ada53a80296dc17 Mon Sep 17 00:00:00 2001 From: William Allen Date: Wed, 13 May 2026 19:46:32 -0400 Subject: [PATCH] Remove label filter propagation CDash currently supports the ability to propagate label filters from the index page to viewTest.php. This functionality is fundamentally broken in all but the most simple case, since extracting only the label filters is not logically equivalent to the full original filters. This PR removes the feature entirely. In the future, there's an opportunity to add something which fills roughly the same niche: allowing users to select a subset of subprojects to display, which can be propagated to other pages automatically. --- app/Models/Project.php | 3 -- app/cdash/app/Controller/Api/Index.php | 2 +- app/cdash/app/Model/Project.php | 3 -- app/cdash/public/api/v1/index.php | 1 - .../tests/test_actualtrilinossubmission.php | 2 +- app/cdash/tests/test_filtertestlabels.php | 8 ----- ..._drop_project_sharelabelfilters_column.php | 15 +++++++++ graphql/schema.graphql | 5 --- phpstan-baseline.neon | 8 +---- resources/js/angular/controllers/index.js | 7 ---- .../js/angular/controllers/queryTests.js | 6 ---- resources/js/angular/controllers/viewTest.js | 5 --- .../js/angular/views/partials/build.html | 18 +++++----- .../components/ProjectSettings/GeneralTab.vue | 2 -- .../GraphQL/Mutations/UpdateProjectTest.php | 1 - tests/Feature/GraphQL/ProjectTypeTest.php | 2 -- tests/cypress/e2e/filter-labels.cy.js | 33 ------------------- 17 files changed, 27 insertions(+), 94 deletions(-) create mode 100644 database/migrations/2026_05_13_223707_drop_project_sharelabelfilters_column.php diff --git a/app/Models/Project.php b/app/Models/Project.php index 7c1ea84a4e..33ce72898c 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -42,7 +42,6 @@ * @property int $uploadquota Maximum sum of uploaded file sizes (in bytes) * @property int $uploadquotagb Maximum sum of uploaded file sizes (in GiB) * @property bool $showcoveragecode - * @property bool $sharelabelfilters * @property bool $authenticatesubmissions * @property ?string $ldapfilter * @property ?string $banner @@ -90,7 +89,6 @@ class Project extends Model 'uploadquota', 'uploadquotagb', 'showcoveragecode', - 'sharelabelfilters', 'authenticatesubmissions', 'ldapfilter', 'banner', @@ -109,7 +107,6 @@ class Project extends Model 'displaylabels' => 'boolean', 'coveragethreshold' => 'integer', 'showcoveragecode' => 'boolean', - 'sharelabelfilters' => 'boolean', 'authenticatesubmissions' => 'boolean', ]; diff --git a/app/cdash/app/Controller/Api/Index.php b/app/cdash/app/Controller/Api/Index.php index 280feb7318..ce7bdf9235 100644 --- a/app/cdash/app/Controller/Api/Index.php +++ b/app/cdash/app/Controller/Api/Index.php @@ -1350,7 +1350,7 @@ public function checkForSubProjectFilters(): void } } unset($filters); - if ($filter_on_labels && $this->project->ShareLabelFilters) { + if ($filter_on_labels) { $this->shareLabelFilters = true; $this->labelIds = get_label_ids_from_filterdata($this->filterdata); } diff --git a/app/cdash/app/Model/Project.php b/app/cdash/app/Model/Project.php index a41e32897e..e288400b1a 100644 --- a/app/cdash/app/Model/Project.php +++ b/app/cdash/app/Model/Project.php @@ -69,7 +69,6 @@ class Project public $EmailMaxItems = 5; public $EmailMaxChars = 255; public $DisplayLabels = 0; - public $ShareLabelFilters = 0; public $AuthenticateSubmissions = 0; public $ShowCoverageCode = 0; public $AutoremoveTimeframe = 0; @@ -126,7 +125,6 @@ public function Save(): bool 'emailbrokensubmission' => filter_var($this->EmailBrokenSubmission, FILTER_VALIDATE_BOOLEAN), 'emailredundantfailures' => filter_var($this->EmailRedundantFailures, FILTER_VALIDATE_BOOLEAN), 'displaylabels' => filter_var($this->DisplayLabels, FILTER_VALIDATE_BOOLEAN), - 'sharelabelfilters' => filter_var($this->ShareLabelFilters, FILTER_VALIDATE_BOOLEAN), 'authenticatesubmissions' => filter_var($this->AuthenticateSubmissions, FILTER_VALIDATE_BOOLEAN), 'showcoveragecode' => filter_var($this->ShowCoverageCode, FILTER_VALIDATE_BOOLEAN), 'autoremovetimeframe' => (int) $this->AutoremoveTimeframe, @@ -206,7 +204,6 @@ public function Fill(): void $this->EmailBrokenSubmission = (int) $project->emailbrokensubmission; $this->EmailRedundantFailures = (int) $project->emailredundantfailures; $this->DisplayLabels = $project->displaylabels; - $this->ShareLabelFilters = $project->sharelabelfilters; $this->AuthenticateSubmissions = $project->authenticatesubmissions; $this->ShowCoverageCode = $project->showcoveragecode; $this->AutoremoveTimeframe = $project->autoremovetimeframe; diff --git a/app/cdash/public/api/v1/index.php b/app/cdash/public/api/v1/index.php index 02aa3bbbb3..793a3c2683 100644 --- a/app/cdash/public/api/v1/index.php +++ b/app/cdash/public/api/v1/index.php @@ -236,7 +236,6 @@ $response['filterurl'] = get_filterurl(); $controller->checkForSubProjectFilters(); -$response['sharelabelfilters'] = $controller->shareLabelFilters; $response['testfilters'] = $controller->subProjectTestFilters; $build_data = $controller->getDailyBuilds(); diff --git a/app/cdash/tests/test_actualtrilinossubmission.php b/app/cdash/tests/test_actualtrilinossubmission.php index 00ee5f0eaf..f3028ed96b 100644 --- a/app/cdash/tests/test_actualtrilinossubmission.php +++ b/app/cdash/tests/test_actualtrilinossubmission.php @@ -25,7 +25,7 @@ public function createProjectWithName($project) 'EmailBrokenSubmission' => '1', 'DisplayLabels' => '1', 'NightlyTime' => '21:00:00 America/New_York', - 'ShareLabelFilters' => '1']; + ]; return $this->createProject($settings); } diff --git a/app/cdash/tests/test_filtertestlabels.php b/app/cdash/tests/test_filtertestlabels.php index 280ec10d93..40bf12ae5a 100644 --- a/app/cdash/tests/test_filtertestlabels.php +++ b/app/cdash/tests/test_filtertestlabels.php @@ -28,10 +28,6 @@ public function testFilterLabels() return 1; } - // Turn this option on. - pdo_query("UPDATE project SET sharelabelfilters=TRUE - WHERE name='EmailProjectExample'"); - // Get the buildid that we just created so we can delete it later. $buildids = []; $buildid_results = pdo_query( @@ -91,10 +87,6 @@ public function testFilterLabels() // Delete the build DatabaseCleanupUtils::removeBuild($buildid); - // Turn the option back off. - pdo_query("UPDATE project SET sharelabelfilters=FALSE - WHERE name='EmailProjectExample'"); - if (!$success) { $this->fail($error_msg); return 1; diff --git a/database/migrations/2026_05_13_223707_drop_project_sharelabelfilters_column.php b/database/migrations/2026_05_13_223707_drop_project_sharelabelfilters_column.php new file mode 100644 index 0000000000..bcce6a353c --- /dev/null +++ b/database/migrations/2026_05_13_223707_drop_project_sharelabelfilters_column.php @@ -0,0 +1,15 @@ + 0, 'normal': build.test.notrun == 0}">
- + {{::build.test.notrun}} - + +{{::build.test.nnotrundiffp}} -{{::build.test.nnotrundiffn}} @@ -345,10 +345,10 @@
- + {{::build.test.fail}} - + +{{::build.test.nfaildiffp}} @@ -360,10 +360,10 @@
- + {{::build.test.pass}} - + +{{::build.test.npassdiffp}} @@ -379,10 +379,10 @@
- + {{::build.test.timestatus}} - + +{{::build.test.ntimediffp}} @@ -392,7 +392,7 @@ {{::build.test.time}} - + +{{::build.test.ntimediffp}} diff --git a/resources/js/vue/components/ProjectSettings/GeneralTab.vue b/resources/js/vue/components/ProjectSettings/GeneralTab.vue index a4e5bf9d22..6fdb6c0abd 100644 --- a/resources/js/vue/components/ProjectSettings/GeneralTab.vue +++ b/resources/js/vue/components/ProjectSettings/GeneralTab.vue @@ -532,7 +532,6 @@ export default { autoRemoveTimeFrame: 0, fileUploadLimit: 50, showCoverageCode: true, - shareLabelFilters: false, banner: '', }, validationErrors: {}, @@ -576,7 +575,6 @@ export default { autoRemoveTimeFrame fileUploadLimit showCoverageCode - shareLabelFilters banner } } diff --git a/tests/Feature/GraphQL/Mutations/UpdateProjectTest.php b/tests/Feature/GraphQL/Mutations/UpdateProjectTest.php index fce534dcfe..ff895d8140 100644 --- a/tests/Feature/GraphQL/Mutations/UpdateProjectTest.php +++ b/tests/Feature/GraphQL/Mutations/UpdateProjectTest.php @@ -206,7 +206,6 @@ public static function fieldValues(): array ['autoRemoveTimeFrame', 10, 'autoremovetimeframe', 10], ['fileUploadLimit', 50, 'uploadquota', 53687091200], ['showCoverageCode', false, 'showcoveragecode', false], - ['shareLabelFilters', false, 'sharelabelfilters', false], ['banner', 'new banner', 'banner', 'new banner'], ]; } diff --git a/tests/Feature/GraphQL/ProjectTypeTest.php b/tests/Feature/GraphQL/ProjectTypeTest.php index 4afd8debfc..710636bece 100644 --- a/tests/Feature/GraphQL/ProjectTypeTest.php +++ b/tests/Feature/GraphQL/ProjectTypeTest.php @@ -165,8 +165,6 @@ public static function fieldValues(): array ['uploadquota', 10737418240, 'fileUploadLimit', 10], ['showcoveragecode', true, 'showCoverageCode', true], ['showcoveragecode', false, 'showCoverageCode', false], - ['sharelabelfilters', true, 'shareLabelFilters', true], - ['sharelabelfilters', false, 'shareLabelFilters', false], ['banner', 'test', 'banner', 'test'], ['banner', null, 'banner', null], ]; diff --git a/tests/cypress/e2e/filter-labels.cy.js b/tests/cypress/e2e/filter-labels.cy.js index 11b8c5c58f..0fa2fc15b8 100644 --- a/tests/cypress/e2e/filter-labels.cy.js +++ b/tests/cypress/e2e/filter-labels.cy.js @@ -1,37 +1,4 @@ describe('filterLabels', () => { - it('passes filters to the viewTest page', () => { - cy.visit('index.php?project=Trilinos&date=2011-07-22'); - cy.get('a').contains('Windows_NT-MSVC10-SERIAL_DEBUG_DEV').click(); - cy.url().should('contain', 'index.php?project=Trilinos&parentid=12'); - - // first, verify the expected number of builds - cy.get('#numbuilds').should('contain', 'Number of SubProjects: 36'); - // note: A maximum of 10 builds are displayed at a time - cy.get('tbody').find('tr').should('have.length', 10); - - // apply filter parameters - cy.get('#settings').click(); - cy.get('#label_showfilters').click(); - cy.get('#id_field1').select('Label'); - cy.get('#id_compare1').select('contains'); - cy.get('#id_value1').type('ra'); - cy.get('input[name="apply"]').click(); - - // make sure the expected number of builds are displayed - cy.get('#numbuilds').should('contain', 'Number of SubProjects: 5'); - cy.get('tbody').find('tr').should('have.length', 5); - - // next, click on a specific test - cy.get('tbody').find('tr').eq(3).find('td').eq(7).as('failing_test'); - cy.get('@failing_test').should('contain', '10'); - cy.get('@failing_test').find('a').click(); - cy.url().should('contain', 'viewTest.php?onlyfailed&buildid=13&filtercount=1&showfilters=1&field1=label&compare1=63&value1=ra'); - - // make sure the expected number of tests are displayed - cy.get('#viewTestTable').find('tbody').find('tr').should('have.length', 10); - }); - - it('inserts new filters in the right order', () => { cy.visit('index.php?project=Trilinos&date=2011-07-22&showfilters=1');