v4.0.0
What's Changed
New Features
- Overhaul project members page by @williamjallen in #2778
- Add build instrumentation API by @williamjallen in #2612
- Introduce new states for XML Validation by @josephsnyder in #2804
- Redesign site-wide user management page by @williamjallen in #2830
- Add support for build command outputs by @williamjallen in #2837
- Add admin button to delete project members by @williamjallen in #2856
- Disable manual project membership when LDAP enabled by @williamjallen in #2870
- Add option to customize OAuth button text by @williamjallen in #2887
- Make partial text match filters case-insensitive by @williamjallen in #2893
- Move join/leave project functionality to members page by @williamjallen in #2898
Administration
- Change
QUEUE_CONNECTION
default todatabase
by @williamjallen in #2803 - Use auto-generated container names by @williamjallen in #2807
- Remove helm files by @zackgalbreath in #2826
- Change
latest
Docker tag to refer to latest release by @williamjallen in #2832 - Send httpd logs to stderr when using UBI as base by @williamjallen in #2838
Performance
- Load all top-level Vue components asynchronously by @williamjallen in #2864
- Load minimal set of icons for each page by @williamjallen in #2871
- Enable HTTP Compression by @williamjallen in #2891
User Experience
- Improve GraphQL filter validation by @williamjallen in #2860
- Set project image and title on initial page load by @williamjallen in #2863
Deprecations & Removals
- Remove deprecated
/api/v1/viewProjects.php
API endpoint by @williamjallen in #2779 - Remove integration with non-git repos by @williamjallen in #2795
- Remove unused "bug tracker file url" UI by @williamjallen in #2798
- Delete web-based dependency audit/upgrade by @williamjallen in #2799
- Remove
ACTIVE_PROJECT_DAYS
env variable by @williamjallen in #2802 - Remove
manageCoverage.php
and file priority selection by @williamjallen in #2801 - Remove obsolete
userStatistics.php
page by @williamjallen in #2796 - Remove password history retention by @williamjallen in #2805
- Stop publishing separate cdash-worker image by @williamjallen in #2806
- Remove
upgrade.php
by @williamjallen in #2816 - Remove support for automatic mailing list user creation by @williamjallen in #2783
- Move banner to project table by @williamjallen in #2817
- Remove remaining legacy repository logic by @williamjallen in #2813
- Remove "site maintainer" project access level by @williamjallen in #2834
- Remove "email administrator" project setting by @williamjallen in #2883
- Drop MySQL support by @williamjallen in #2885
Bug Fixes
- Use text emails for auth token notifications by @williamjallen in #2792
- Reinstate
viewTest.php
filters by @williamjallen in #2793 - Fix docker compose postgres volume path by @williamjallen in #2823
- docker: stop listening on port 443 by @zackgalbreath in #2829
- Increase robustness of
TestOutput::DecompressOutput()
by @zackgalbreath in #2833 - Fixed download of mulitple attached files by @Firnor in #2836
- Fix project members link by @williamjallen in #2867
- Use "passed" instead of "Passed" for default test filters by @zackgalbreath in #2888
- Increase the size of the testmeasurement.name field by @zackgalbreath in #2890
- Fix configuration checks for local vs. remote storage by @zackgalbreath in #2892
- Fix project and global invitation access control issues by @williamjallen in #2894
Internals
- Fix flaky email test by @williamjallen in #2782
- Move JS spec and Cypress component tests to dedicated files by @williamjallen in #2785
- Remove broken
autoremovebuilds
test by @williamjallen in #2784 - Fix flaky
manage-build-group
test by @williamjallen in #2788 - Fix PHPUnit config file deprecation warnings by @williamjallen in #2789
- Move simple legacy tests out of the critical path by @williamjallen in #2791
- Modernize CTest config by @williamjallen in #2797
- Fix flaky
SitesIdPageTest
by @williamjallen in #2800 - Restructure Cypress e2e tests by @williamjallen in #2790
- Add storage type to CDash build name by @williamjallen in #2809
- Reduce CI parallelism from 4 to 3 processes by @williamjallen in #2810
- Remove unnecessary dependencies between mocked unit tests by @williamjallen in #2808
- Lock APP_URL in browser and cypress tests by @williamjallen in #2812
- Restrict user email access by @williamjallen in #2818
- Remove legacy User model passthrough by @williamjallen in #2824
- Add
user-profile
Cypress test toinstall_2
dependency list by @williamjallen in #2820 - Fix flaky test-related Cypress tests by @williamjallen in #2825
- Throw exceptions for filesystem errors by @zackgalbreath in #2828
- Limit scope of default route handler by @williamjallen in #2831
- Remove
wget
from Debian-based image by @williamjallen in #2839 - Remove legacy
UserProject
model by @williamjallen in #2835 - Update
.gitignore
list by @williamjallen in #2854 - Bump Node.js to 22.x by @williamjallen in #2840
- Clean up simple Cypress test dependencies by @williamjallen in #2855
- Delete unused
MigrationTest
abstract class by @williamjallen in #2857 - Remove
all-projects
Cypress test by @williamjallen in #2866 - Remove legacy
UploadFile
model by @williamjallen in #2858 - Automate filter input type creation by @williamjallen in #2861
- Remove database queries from submission handler constructors by @williamjallen in #2859
- Delete unused JS by @williamjallen in #2862
- Only include jquery datatables on
viewCoverage.php
by @williamjallen in #2865 - Use GHA arm64 runners for arm64 image build job by @williamjallen in #2868
- Move contents of
ctestparser.php
to submission handler by @williamjallen in #2872 - Adjust waits in flaky
sub-project-group-order
test by @williamjallen in #2873 - Fix sporadic email unique constraint testing issues by @williamjallen in #2874
- Set basic Content Security Policy by @williamjallen in #2877
- Use common Blade template for Vue-only pages by @williamjallen in #2880
- Fix undefined variable code path in remove builds method by @williamjallen in #2882
- Remove misc. dead code by @williamjallen in #2884
- Download GraphiQL assets during Docker build by @williamjallen in #2886
- Add CTest dependencies automatically by @williamjallen in #2875
- Move coverage diff to
coveragesummary
table by @williamjallen in #2896 - Remove MySQL-specific code paths by @williamjallen in #2897
- Pin MinIO in Docker Compose config by @williamjallen in #2900
Dependencies
- Bump eslint-plugin-vue from 9.32.0 to 10.0.0 by @dependabot in #2763
- Bump Docker PHP version to 8.3 by @williamjallen in #2780
- Bump cypress from 13.17.0 to 14.2.1 by @dependabot in #2762
- Bump http-proxy-middleware from 2.0.7 to 2.0.9 by @dependabot in #2815
- Bump axios from 1.8.4 to 1.9.0 by @dependabot in #2844
- Bump cypress from 14.3.0 to 14.3.2 by @dependabot in #2845
- Bump sass from 1.86.1 to 1.87.0 by @dependabot in #2852
- Bump php-di/php-di from 7.0.9 to 7.0.10 by @dependabot in #2841
- Bump @apollo/client from 3.13.5 to 3.13.8 by @dependabot in #2849
- Bump eslint-plugin-vue from 10.0.0 to 10.1.0 by @dependabot in #2853
- Bump webpack from 5.98.0 to 5.99.7 by @dependabot in #2846
- Bump laravel/socialite from 5.18.0 to 5.20.0 by @dependabot in #2843
- Bump graphql from 16.10.0 to 16.11.0 by @dependabot in #2851
- Bump aws/aws-sdk-php from 3.342.19 to 3.343.1 by @dependabot in #2842
- Bump league/commonmark from 2.6.2 to 2.7.0 by @dependabot in #2869
- Update
laravel-graphiql
to 4.0.1 by @williamjallen in #2876 - Bump PHP minimum version to 8.3 by @williamjallen in #2899
Migrating from MySQL to Postgres
CDash 4.0 drops support for MySQL. If you are using MySQL, you will need to migrate your database to Postgres before upgrading to CDash 4.0. To do so, we recommend using pgloader.
Recommended procedure
We recommend performing a "dry run" of the migration ahead of time. This gives you a chance to make sure the migration will be successful, and it will help you schedule an appropriate amount of downtime with your users.
1. Install PostgreSQL server
2. Install pgloader
Installation instructions for pgloader can be found here.
Note that for large CDash databases (> 100 GB), we had better luck with the ccl
build of pgloader (as opposed to sbcl
). We encountered "heap exhausted" memory errors when using sbcl
, and ccl
seems to do a better job of memory management.
3. Write an input file for pgloader
The following sample input file worked well for us when migrating large CDash databases to Postgres.
LOAD DATABASE
FROM mysql://<user>:<password>@<host>/cdash
INTO postgresql://<user>:<password>@<host>/cdash
WITH include no drop, truncate, create no tables, preserve index names,
workers = 8, concurrency = 2,
multiple readers per thread, rows per range = 5000
SET MySQL PARAMETERS
net_read_timeout = '86400',
net_write_timeout = '86400'
SET PostgreSQL PARAMETERS
maintenance_work_mem to '256MB',
work_mem to '256MB'
CAST type tinyint to smallint,
type timestamp to timestamp,
type datetime to timestamptz
ALTER SCHEMA 'cdash' RENAME TO 'public'
;
Please see pgloader's MySQL-to-Postgres migration guide for more information about these configuration settings. For relatively smaller CDash databases, a simpler configuration file may work just fine.
4. Create a Postgres user and database for CDash
$ psql
# CREATE USER cdash WITH ENCRYPTED PASSWORD 'your-password-here';
# CREATE DATABASE cdash OWNER cdash;
5. Pause any asynchronous submission parsers, and put CDash in "maintenance mode"
$ systemctl stop cdash-worker
$ php artisan down
The purpose of this step is to prevent the MySQL database from changing while the migration is underway. This step should be skipped for "dry runs" of the migration process.
6. Change your database configuration to point at Postgres and initialize the database schema
Edit .env
to set DB_CONNECTION=pgsql
and DB_HOST
to point to your new Postgres server.
Once that's done, run php artisan migrate
to initialize CDash's database schema in Postgres.
7. Use pgloader to perform the migration
pgloader cdash.load
This assumes your pgloader input file is named cdash.load
.
8. Take CDash out of maintenance mode and verify that the migration was successful!
$ php artisan up
$ systemctl start cdash-worker
New Contributors
Full Changelog: v3.10.2...v4.0.0