From 2edcd4adeced6ceb4e4faa1f31ffe21d81a66dde Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Wed, 27 Aug 2025 15:29:55 +0200 Subject: [PATCH 1/5] [test] reenable test on Mac Fixes https://github.com/root-project/root/issues/19076 --- roottest/root/io/evolution/CMakeLists.txt | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/roottest/root/io/evolution/CMakeLists.txt b/roottest/root/io/evolution/CMakeLists.txt index be21cbc9ea557..9ea2c29cc925b 100644 --- a/roottest/root/io/evolution/CMakeLists.txt +++ b/roottest/root/io/evolution/CMakeLists.txt @@ -139,14 +139,11 @@ ROOTTEST_ADD_TEST(fixarr1 FIXTURES_REQUIRED root-io-evolution-fixarr1-fixture FIXTURES_SETUP root-io-evolution-fixarrfile-fixture) -# tests fails on some Mac platforms generating stacktrace -if(NOT APPLE) - ROOTTEST_ADD_TEST(fixarr2 - MACRO fixarr2.C+ - OUTREF fixarr2.ref - LABELS longtest io - FIXTURES_REQUIRED root-io-evolution-fixarr2-fixture root-io-evolution-fixarrfile-fixture) -endif() +ROOTTEST_ADD_TEST(fixarr2 + MACRO fixarr2.C+ + OUTREF fixarr2.ref + LABELS longtest io + FIXTURES_REQUIRED root-io-evolution-fixarr2-fixture root-io-evolution-fixarrfile-fixture) ROOTTEST_ADD_TEST(fixarr3 MACRO fixarr3.C+ From bd18108c6cc1dd6e36f2110521d5948bd1a39f8b Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Wed, 27 Aug 2025 15:33:50 +0200 Subject: [PATCH 2/5] only run involved tests --- .github/workflows/root-ci-config/build_root.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/root-ci-config/build_root.py b/.github/workflows/root-ci-config/build_root.py index ed9303effd695..b81997a95015c 100755 --- a/.github/workflows/root-ci-config/build_root.py +++ b/.github/workflows/root-ci-config/build_root.py @@ -317,7 +317,7 @@ def run_ctest(extra_ctest_flags: str) -> int: builddir = os.path.join(WORKDIR, "build") ctest_result = subprocess_with_log(f""" cd '{builddir}' - ctest --output-on-failure --parallel {os.cpu_count()} --output-junit TestResults.xml {extra_ctest_flags} + ctest -R roottest-root-io-evolution-* --output-on-failure --parallel {os.cpu_count()} --output-junit TestResults.xml {extra_ctest_flags} """) return ctest_result From 284978971c18d432659af6c8afe301cb53f9c160 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Wed, 27 Aug 2025 15:35:18 +0200 Subject: [PATCH 3/5] Only run ci on mac for testing --- .github/workflows/root-ci.yml | 379 ---------------------------------- 1 file changed, 379 deletions(-) diff --git a/.github/workflows/root-ci.yml b/.github/workflows/root-ci.yml index 5424b8cf5ef77..8af9ad3103c1c 100644 --- a/.github/workflows/root-ci.yml +++ b/.github/workflows/root-ci.yml @@ -224,385 +224,6 @@ jobs: path: /Users/sftnight/ROOT-CI/packages/root_v* if-no-files-found: error - - build-windows: - # For any event that is not a PR, the CI will always run. In PRs, the CI - # can be skipped if the tag [skip-ci] or [skip ci] is written in the title. - if: | - (github.repository_owner == 'root-project' && github.event_name != 'pull_request') || - (github.event_name == 'pull_request' && !( - contains(github.event.pull_request.title, '[skip-ci]') || - contains(github.event.pull_request.title, '[skip ci]') || - contains(github.event.pull_request.labels.*.name, 'skip ci') - )) - - permissions: - contents: read - - strategy: - fail-fast: false - matrix: - # We have to get a bit creative here: GitHub actions only allows to - # exclude partial matches, so we artificially add the event_name as - # a "constant variable" that we can use to remove the Debug entries - # for pull requests and on branch pushes. This is further complicated - # by the fact that event_name is a string, but we need an array. So - # we construct a JSON string that we can then convert into an array. - event_name: ${{ fromJSON(format('["{0}"]', github.event_name)) }} - config: ["RelWithDebInfo", "Release"] - target_arch: [x64, x86] - exclude: - - event_name: pull_request - config: RelWithDebInfo - - event_name: push - config: RelWithDebInfo - # This is this platform is subject to timeouts when building from - # scratch. - #- target_arch: x86 - # config: RelWithDebInfo - - name: Windows 10 ${{ matrix.target_arch }} ${{ matrix.config }} - - runs-on: # Using '[self-hosted, windows, ${{ matrix.arch }}]' does not work for some reason :) - - self-hosted - - windows - - x64 # machine host, not build target - - target${{ matrix.target_arch }} - - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ inputs.ref_name }} - - - name: Pull Request Build - if: github.event_name == 'pull_request' - env: - INCREMENTAL: ${{ !contains(github.event.pull_request.labels.*.name, 'clean build') }} - GITHUB_PR_ORIGIN: ${{ github.event.pull_request.head.repo.clone_url }} - shell: cmd - run: "C:\\setenv.bat ${{ matrix.target_arch }} && - python .github/workflows/root-ci-config/build_root.py - --buildtype ${{ matrix.config }} - --platform windows10 - --incremental $INCREMENTAL - --base_ref ${{ github.base_ref }} - --sha ${{ github.sha }} - --pull_repository ${{ github.event.pull_request.head.repo.clone_url }} - --head_ref refs/pull/${{ github.event.pull_request.number }}/head:${{ github.event.pull_request.head.ref }} - --head_sha ${{ github.event.pull_request.head.sha }} - --repository ${{ github.server_url }}/${{ github.repository }} - --architecture ${{ matrix.target_arch }}" - - - name: Workflow dispatch/call - if: github.event_name == 'workflow_dispatch' - shell: cmd - run: "C:\\setenv.bat ${{ matrix.target_arch }} && - python .github/workflows/root-ci-config/build_root.py - --buildtype ${{ matrix.config }} - --platform windows10 - --incremental ${{ inputs.incremental }} - --base_ref ${{ inputs.base_ref }} - --head_ref ${{ inputs.head_ref }} - --binaries ${{ inputs.binaries }} - --repository ${{ github.server_url }}/${{ github.repository }} - --architecture ${{ matrix.target_arch }}" - - - name: Nightly build - if: github.event_name == 'schedule' - shell: cmd - run: "C:\\setenv.bat ${{ matrix.target_arch }} && - python .github/workflows/root-ci-config/build_root.py - --buildtype ${{ matrix.config }} - --platform windows10 - --incremental false - --binaries true - --base_ref ${{ inputs.ref_name }} - --repository ${{ github.server_url }}/${{ github.repository }} - --architecture ${{ matrix.target_arch }}" - - - name: Update build cache after push to release branch - if: github.event_name == 'push' - shell: cmd - run: "C:\\setenv.bat ${{ matrix.target_arch }} && - python .github/workflows/root-ci-config/build_root.py - --buildtype ${{ matrix.config }} - --platform windows10 - --incremental false - --base_ref ${{ github.ref_name }} - --binaries ${{ startsWith(github.ref, 'refs/tags/') }} - --repository ${{ github.server_url }}/${{ github.repository }} - --architecture ${{ matrix.target_arch }}" - - - name: Upload test results - if: ${{ !cancelled() }} - uses: actions/upload-artifact@v4 - with: - name: Test Results Windows ${{ matrix.target_arch }} ${{ matrix.config }} - path: C:/ROOT-CI/build/TestResults.xml - - - name: Upload binaries - if: ${{ !cancelled() && (inputs.binaries || github.event_name == 'schedule' || startsWith(github.ref, 'refs/tags/')) }} - uses: actions/upload-artifact@v4 - with: - name: Binaries ${{ matrix.target_arch }} ${{ matrix.config }} - path: C:/ROOT-CI/packages/root_v* - if-no-files-found: error - - - build-linux: - # For any event that is not a PR, the CI will always run. In PRs, the CI - # can be skipped if the tag [skip-ci] or [skip ci] is written in the title. - if: | - (github.repository_owner == 'root-project' && github.event_name != 'pull_request') || - (github.event_name == 'pull_request' && !( - contains(github.event.pull_request.title, '[skip-ci]') || - contains(github.event.pull_request.title, '[skip ci]') || - contains(github.event.pull_request.labels.*.name, 'skip ci') - )) - - permissions: - contents: read - - strategy: - fail-fast: false - matrix: - # Specify image + (optional) build option overrides - # - # Available images: https://github.com/root-project/root-ci-images - # Common configs: {Release,Debug,RelWithDebInfo) - # Build options: https://root.cern/install/build_from_source/#all-build-options - include: - - image: fedora42 - overrides: ["CMAKE_CXX_STANDARD=23"] - - image: fedora43 - overrides: ["CMAKE_CXX_STANDARD=23"] - is_special: true - - image: alma8 - - image: alma9 - overrides: ["CMAKE_BUILD_TYPE=Debug"] - - image: alma10 - - image: ubuntu22 - overrides: ["imt=Off", "CMAKE_BUILD_TYPE=Debug"] - - image: ubuntu2404 - overrides: ["CMAKE_BUILD_TYPE=Debug"] - - image: ubuntu2504 - overrides: ["CMAKE_CXX_STANDARD=23"] - - image: ubuntu2510 - is_special: true - overrides: ["CMAKE_CXX_STANDARD=23"] - - image: debian125 - overrides: ["CMAKE_CXX_STANDARD=20", "dev=ON", "CMAKE_CXX_FLAGS=-Wsuggest-override"] - # Special builds - - image: alma9 - is_special: true - property: modules_off - overrides: ["runtime_cxxmodules=Off"] - - image: alma9 - is_special: true - property: march_native - overrides: ["CMAKE_BUILD_TYPE=RelWithDebInfo", "CMAKE_CXX_FLAGS=-march=native", "CMAKE_C_FLAGS=-march=native", "builtin_zlib=ON", "builtin_zstd=ON"] - - image: alma9 - is_special: true - property: arm64 - overrides: ["CMAKE_BUILD_TYPE=RelWithDebInfo", "builtin_zlib=ON", "builtin_zstd=ON"] - architecture: ARM64 - - image: alma10 - is_special: true - property: "clang Ninja" - overrides: ["CMAKE_C_COMPILER=clang", "CMAKE_CXX_COMPILER=clang++"] - cmake_generator: Ninja - # Fedora Rawhide with Python debug build - - image: rawhide - is_special: true - property: "Fedora pydebug" - overrides: ["CMAKE_CXX_STANDARD=23"] - # Disable GPU builds until the DNS problem is solved - # - image: ubuntu2404-cuda - # is_special: true - # property: gpu - # extra-runs-on: gpu - - runs-on: - - self-hosted - - linux - - ${{ matrix.architecture == null && 'x64' || matrix.architecture }} - - ${{ matrix.extra-runs-on == null && 'cpu' || matrix.extra-runs-on }} - - name: | - ${{ matrix.image }} ${{ matrix.property }} - ${{ (github.event_name != 'schedule' && github.event_name != 'workflow_dispatch' && join( matrix.overrides, ', ' )) || '' }} - - container: - image: registry.cern.ch/root-ci/${{ matrix.image }}:buildready # KEEP IN SYNC WITH env key below - options: --security-opt label=disable --rm ${{ matrix.property == 'gpu' && '--device nvidia.com/gpu=all' || '' }} # KEEP IN SYNC WITH env key below - volumes: - - ${{ matrix.image }}_ccache_volume:/github/home/.cache/ccache - env: - CONTAINER_IMAGE: "registry.cern.ch/root-ci/${{ matrix.image }}:buildready" #KEEP IN SYNC WITH ABOVE - CONTAINER_OPTIONS: "--security-opt label=disable --rm ${{ matrix.property == 'gpu' && '--device nvidia.com/gpu=all' || '' }}" #KEEP IN SYNC WITH ABOVE - - env: - BUILD_DIR: /github/home/ROOT-CI/build - INSTALL_DIR: /github/home/ROOT-CI/install - POST_INSTALL_DIR: /github/home/ROOT-CI/PostInstall - - steps: - - name: Configure large ccache - if: ${{ matrix.is_special }} - run: | - ccache -o max_size=5G - ccache -p || true - ccache -s || true - - - name: Configure small ccache - if: ${{ !matrix.is_special }} - run: | - ccache -o max_size=1.5G - ccache -p || true - ccache -s || true - - - name: Set up Python Virtual Env - # if the `if` expr is false, `if` still has exit code 0. - # if the `if` block is entered, the block's exit code becomes the exit - # code of the `if`. - run: 'if [ -d /py-venv/ROOT-CI/bin/ ]; then . /py-venv/ROOT-CI/bin/activate && echo PATH=$PATH >> $GITHUB_ENV; fi' - - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ inputs.ref_name }} - - - name: Dump GitHub context - env: - GITHUB_CONTEXT: ${{ toJSON(github) }} - JOB_CONTEXT: ${{ toJSON(job) }} - ENV_CONTEXT: ${{ toJSON(env) }} - run: | - echo "$GITHUB_CONTEXT" - echo "--------------------------" - echo "$JOB_CONTEXT" - echo "--------------------------" - echo "$ENV_CONTEXT" - - - name: Print debug info - run: 'printf "%s@%s\\n" "$(whoami)" "$(hostname)"; - ls -la - ' - - - name: Apply option overrides from matrix for this job for all builds except non-special nightlies and releases - if: ${{ ( github.event_name != 'schedule' || matrix.is_special) && github.event_name != 'workflow_dispatch' && matrix.overrides != NaN }} - env: - OVERRIDES: ${{ join( matrix.overrides, ' ') }} - CONFIGFILE: '.github/workflows/root-ci-config/buildconfig/${{ matrix.image }}.txt' - shell: bash - run: | - set -x - - echo '' >> "$CONFIGFILE" - - for ENTRY in $GLOBAL_OVERRIDES $OVERRIDES; do - KEY=$( echo "$ENTRY" | cut -d '=' -f 1 ) - - # Add entry to file if not exists, otherwise replace - - if grep -q "$KEY=" "$CONFIGFILE"; then - sed -i "s/$KEY=.*\$/$ENTRY/" "$CONFIGFILE" - else - echo "$ENTRY" >> "$CONFIGFILE" - fi - done - - cat "$CONFIGFILE" || true - - - uses: root-project/gcc-problem-matcher-improved@main - with: - build-directory: /github/home/ROOT-CI/src/ - - - name: Pull Request Build - if: ${{ github.event_name == 'pull_request' }} - env: - INCREMENTAL: ${{ !contains(github.event.pull_request.labels.*.name, 'clean build') }} - GITHUB_PR_ORIGIN: ${{ github.event.pull_request.head.repo.clone_url }} - CMAKE_GENERATOR: ${{ matrix.cmake_generator }} - run: ".github/workflows/root-ci-config/build_root.py - --buildtype RelWithDebInfo - --platform ${{ matrix.image }} - --dockeropts \"$CONTAINER_OPTIONS\" - --incremental $INCREMENTAL - --base_ref ${{ github.base_ref }} - --sha ${{ github.sha }} - --pull_repository ${{ github.event.pull_request.head.repo.clone_url }} - --head_ref refs/pull/${{ github.event.pull_request.number }}/head:${{ github.event.pull_request.head.ref }} - --head_sha ${{ github.event.pull_request.head.sha }} - --repository ${{ github.server_url }}/${{ github.repository }} - " - - - name: Workflow dispatch - if: ${{ github.event_name == 'workflow_dispatch' && !matrix.is_special }} - run: ".github/workflows/root-ci-config/build_root.py - --buildtype ${{ inputs.buildtype }} - --platform ${{ matrix.image }} - --incremental ${{ inputs.incremental }} - --base_ref ${{ inputs.base_ref }} - --head_ref ${{ inputs.head_ref }} - --binaries ${{ inputs.binaries }} - --repository ${{ github.server_url }}/${{ github.repository }} - " - - - name: Nightly build - if: github.event_name == 'schedule' - run: ".github/workflows/root-ci-config/build_root.py - --buildtype Release - --platform ${{ matrix.image }} - --incremental false - --binaries true - --base_ref ${{ inputs.ref_name }} - --repository ${{ github.server_url }}/${{ github.repository }} - " - - - name: Update build cache after push to release branch - if: github.event_name == 'push' - run: ".github/workflows/root-ci-config/build_root.py - --buildtype RelWithDebInfo - --platform ${{ matrix.image }} - --incremental false - --base_ref ${{ github.ref_name }} - --binaries ${{ startsWith(github.ref, 'refs/tags/') }} - --repository ${{ github.server_url }}/${{ github.repository }} - " - - - name: Upload test results - if: ${{ !cancelled() }} - uses: actions/upload-artifact@v4 - with: - name: Test Results ${{ matrix.image }} ${{ matrix.property }} - path: /github/home/ROOT-CI/build/TestResults.xml - - - name: Upload binaries - if: ${{ !cancelled() && (inputs.binaries || github.event_name == 'schedule' || startsWith(github.ref, 'refs/tags/')) }} - uses: actions/upload-artifact@v4 - with: - name: Binaries ${{ matrix.image }} ${{ matrix.property }} - path: /github/home/ROOT-CI/packages/root_v* - if-no-files-found: error - - - name: ccache info (post) - run: | - ccache -s || true - - - name: Install - run: "cmake --install ${{ env.BUILD_DIR }} --prefix ${{ env.INSTALL_DIR }}" - - - name: Build post-install test project - run: | - cmake -S test/PostInstall/ -B ${{ env.POST_INSTALL_DIR }} -DCMAKE_PREFIX_PATH=${{ env.INSTALL_DIR }}; - cmake --build ${{ env.POST_INSTALL_DIR }}; - - - name: CTest in post-install test project - working-directory: ${{ env.POST_INSTALL_DIR }} - run: ctest -j $(nproc) - event_file: # For any event that is not a PR, the CI will always run. In PRs, the CI # can be skipped if the tag [skip-ci] or [skip ci] is written in the title. From 871d05223dbd76fa3421ca1513eede9460a58cc3 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Wed, 27 Aug 2025 16:02:00 +0200 Subject: [PATCH 4/5] Update build_root.py --- .github/workflows/root-ci-config/build_root.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/root-ci-config/build_root.py b/.github/workflows/root-ci-config/build_root.py index b81997a95015c..aaf3c4a146fe1 100755 --- a/.github/workflows/root-ci-config/build_root.py +++ b/.github/workflows/root-ci-config/build_root.py @@ -317,7 +317,7 @@ def run_ctest(extra_ctest_flags: str) -> int: builddir = os.path.join(WORKDIR, "build") ctest_result = subprocess_with_log(f""" cd '{builddir}' - ctest -R roottest-root-io-evolution-* --output-on-failure --parallel {os.cpu_count()} --output-junit TestResults.xml {extra_ctest_flags} + ctest -R roottest-root-io-evolution-fix* --output-on-failure --parallel {os.cpu_count()} --output-junit TestResults.xml {extra_ctest_flags} """) return ctest_result From 5a9315ae89944fd2c7f606d327409086c9ec1a87 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Wed, 27 Aug 2025 18:29:08 +0200 Subject: [PATCH 5/5] Update fixarr.h --- roottest/root/io/evolution/fixarr.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/roottest/root/io/evolution/fixarr.h b/roottest/root/io/evolution/fixarr.h index 1264498dcbec3..39a4806a05cb0 100644 --- a/roottest/root/io/evolution/fixarr.h +++ b/roottest/root/io/evolution/fixarr.h @@ -9,6 +9,7 @@ const int arrsize = 3; const int arrsize = 7; #endif + class One { public: int myarr[arrsize]; @@ -43,4 +44,4 @@ void read(const char *filename = "arr.root") #ifdef __ROOTCLING__ #pragma link C++ class One+; -#endif \ No newline at end of file +#endif