From 27d3f3540f6f1ea90fe81f3083c80d597a556718 Mon Sep 17 00:00:00 2001 From: Marco Edoardo Santimaria Date: Tue, 3 Feb 2026 10:50:04 +0000 Subject: [PATCH 01/12] Updated the version of CI/CD runners This commit updates the verision of the ubuntu runners for the CAPIO CI/CD. --- .github/workflows/ci-tests.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-tests.yaml b/.github/workflows/ci-tests.yaml index 57ec5b230..029765701 100644 --- a/.github/workflows/ci-tests.yaml +++ b/.github/workflows/ci-tests.yaml @@ -12,14 +12,14 @@ concurrency: jobs: codespell-check: name: "Check codespell conformance" - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - name: "Run codespell" uses: codespell-project/actions-codespell@v2 docker-check: name: "Check Docker image" - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 strategy: matrix: cmake-build-type: @@ -84,7 +84,7 @@ jobs: format-check: name: "Check ${{ matrix.path }} clang-format conformance" - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 strategy: matrix: path: @@ -101,7 +101,7 @@ jobs: check-path: "${{ matrix.path }}" unit-tests: name: "Build ${{ matrix.build_type }} with ${{ matrix.cxx }}" - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 strategy: matrix: build_type: @@ -228,7 +228,7 @@ jobs: upload-to-codecov: name: "Codecov report upload" needs: [ "unit-tests" , "codespell-check" , "format-check" ] - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - name: "Download artifacts" From 8b864a6ddda75f64355c251721338a3a16427518 Mon Sep 17 00:00:00 2001 From: Marco Edoardo Santimaria Date: Tue, 3 Feb 2026 11:11:32 +0000 Subject: [PATCH 02/12] Migrated from manual installation of compilers to existing compiler images --- .github/workflows/ci-tests.yaml | 104 ++++++++++++++++++-------------- 1 file changed, 59 insertions(+), 45 deletions(-) diff --git a/.github/workflows/ci-tests.yaml b/.github/workflows/ci-tests.yaml index 029765701..930948a42 100644 --- a/.github/workflows/ci-tests.yaml +++ b/.github/workflows/ci-tests.yaml @@ -100,60 +100,59 @@ jobs: clang-format-version: "16" check-path: "${{ matrix.path }}" unit-tests: - name: "Build ${{ matrix.build_type }} with ${{ matrix.cxx }}" + name: "Build ${{ matrix.build_type }} with ${{ matrix.compiler }}" runs-on: ubuntu-24.04 strategy: matrix: build_type: - Debug - Release - cxx: - - g++-9 - - g++-10 - - g++-11 - - g++-12 - - g++-13 - - clang-13 - - clang-14 - - clang-15 - - clang-16 - - clang-17 - - clang-18 + compiler: + - gcc:9 + - gcc:10 + - gcc:11 + - gcc:12 + - gcc:13 + - silkeh/clang:13 + - silkeh/clang:14 + - silkeh/clang:15 + - silkeh/clang:16 + - silkeh/clang:17 + - silkeh/clang:18 + + container: + image: ${{ matrix.compiler }} + steps: - uses: actions/checkout@v4 - - name: "Install packages" - run: | - sudo apt install -y \ - libcapstone-dev \ - libopenmpi-dev \ - ninja-build \ - openmpi-bin \ - pkg-config - - name: "Get compiler version" - run: | - IFS='-' read -r -a COMPILER <<< "${{ matrix.cxx }}" - echo "CXX_VERSION=${COMPILER[1]}" >> $GITHUB_ENV - - name: "Install Clang" - if: ${{ startsWith(matrix.cxx, 'clang-') }} - run: | - wget -O /tmp/llvm.sh https://apt.llvm.org/llvm.sh - chmod u+x /tmp/llvm.sh - sudo /tmp/llvm.sh ${{ env.CXX_VERSION }} - rm -f /tmp/llvm.sh - - name: "Fix missing libclang_rt.profile for Clang 14" - if: ${{ matrix.cxx == 'clang-14' }} + + - name: "Install gfortran (OpenMPI dependency)" + if: ${{ startsWith(matrix.compiler, 'gcc:') }} run: | - sudo apt download libclang-rt-14-dev - sudo dpkg --force-all -i libclang-rt-14-dev* - - name: "Install GCC" - if: ${{ startsWith(matrix.cxx, 'g++-') }} + apt update + apt remove --purge -y gfortran gfortran-10 libgfortran5 libgfortran-10-dev || true + apt install -y gfortran + update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-10 100 + + - name: "Install packages" run: | - sudo add-apt-repository ppa:ubuntu-toolchain-r/test - sudo apt update - sudo apt install -y ${{ matrix.cxx }} + apt update + apt install -y \ + libcapstone-dev \ + ninja-build \ + cmake \ + make \ + sudo \ + bash \ + git \ + jq \ + pkg-config \ + build-essential \ + wget \ + tar + - name: "Run CMake" - env: - CXX: ${{ startsWith(matrix.cxx, 'clang-') && 'clang++' || 'g++' }}-${{ env.CXX_VERSION }} + shell: bash run: | cmake -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ -DCAPIO_LOG=${{ matrix.build_type == 'Debug' && 'ON' || 'OFF' }} \ @@ -166,6 +165,7 @@ jobs: sudo cmake --install ../build --prefix /usr/local - name: "Run tests" id: run-tests + shell: bash timeout-minutes: 5 env: CAPIO_DIR: ${{ github.workspace }} @@ -208,6 +208,20 @@ jobs: - name: "Show server logs on failure" if: ${{ always() && steps.run-tests.outcome == 'failure' && matrix.build_type == 'Debug' }} run: tail -v -n +1 capio_logs/server/$(hostname)/server_thread_*.log + + - name: "Select gcov tool" + shell: bash + run: | + COMPILER="${{ matrix.compiler }}" + + if [[ "$COMPILER" == silkeh/clang:* ]]; then + VERSION="${COMPILER#*:}" + echo "GCOV=llvm-cov-$VERSION gcov" >> "$GITHUB_ENV" + else + VERSION="${COMPILER#*:}" + echo "GCOV=gcov-$VERSION" >> "$GITHUB_ENV" + fi + - name: "Generate coverage report" if: ${{ matrix.build_type == 'Debug' }} run: | @@ -215,13 +229,13 @@ jobs: gcovr \ --exclude-throw-branches \ --xml coverage.xml \ - --gcov-executable "${{ startsWith(matrix.cxx, 'clang-') && format('llvm-cov-{0} gcov', env.CXX_VERSION) || format('gcov-{0}', env.CXX_VERSION) }}" \ + --gcov-executable $GCOV \ ../build - name: "Upload coverage report" if: ${{ matrix.build_type == 'Debug' }} uses: actions/upload-artifact@v4 with: - name: ${{ format('{0}-tests', matrix.cxx) }} + name: ${{ format('{0}-tests', matrix.compiler) }} path: ./coverage.xml retention-days: 1 if-no-files-found: error From 06130ea85528fa4c99a4cd9e81430416cddcbc16 Mon Sep 17 00:00:00 2001 From: Marco Edoardo Santimaria Date: Tue, 3 Feb 2026 12:13:23 +0000 Subject: [PATCH 03/12] Removed fortran dependency --- .github/workflows/ci-tests.yaml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-tests.yaml b/.github/workflows/ci-tests.yaml index 930948a42..bb32df731 100644 --- a/.github/workflows/ci-tests.yaml +++ b/.github/workflows/ci-tests.yaml @@ -130,15 +130,16 @@ jobs: if: ${{ startsWith(matrix.compiler, 'gcc:') }} run: | apt update - apt remove --purge -y gfortran gfortran-10 libgfortran5 libgfortran-10-dev || true - apt install -y gfortran - update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-10 100 + apt install -y gfortran || true + update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-* 100 - name: "Install packages" run: | apt update apt install -y \ libcapstone-dev \ + openmpi-bin \ + libopenmpi-dev \ ninja-build \ cmake \ make \ @@ -149,7 +150,9 @@ jobs: pkg-config \ build-essential \ wget \ - tar + tar \ + python3 \ + python3-pip - name: "Run CMake" shell: bash From 0b98ca19d30df11a62becc85bad874534940be64 Mon Sep 17 00:00:00 2001 From: Marco Edoardo Santimaria Date: Fri, 13 Feb 2026 17:23:04 +0000 Subject: [PATCH 04/12] Updated clang format action --- .github/workflows/ci-tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-tests.yaml b/.github/workflows/ci-tests.yaml index bb32df731..f7d08e574 100644 --- a/.github/workflows/ci-tests.yaml +++ b/.github/workflows/ci-tests.yaml @@ -95,7 +95,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: "Run clang-format style check" - uses: jidicula/clang-format-action@v4.11.0 + uses: jidicula/clang-format-action@v4.16.0 with: clang-format-version: "16" check-path: "${{ matrix.path }}" From ebb2c54f8b0b37713ab51b02d531b93c7a0e65fb Mon Sep 17 00:00:00 2001 From: Marco Edoardo Santimaria Date: Fri, 13 Feb 2026 17:40:16 +0000 Subject: [PATCH 05/12] logs --- capio/server/include/handlers/unlink.hpp | 5 +++++ capio/server/include/utils/capio_file.hpp | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/capio/server/include/handlers/unlink.hpp b/capio/server/include/handlers/unlink.hpp index 22b670001..9674e146d 100644 --- a/capio/server/include/handlers/unlink.hpp +++ b/capio/server/include/handlers/unlink.hpp @@ -10,19 +10,24 @@ void unlink_handler(const char *const str) { char path[PATH_MAX]; int tid; sscanf(str, "%d %s", &tid, path); + START_LOG(gettid(), "call(tid=%d, path=%s)", tid, path); if (CapioCLEngine::get().isExcluded(path)) { + LOG("File is excluded. Skipping removal"); client_manager->replyToClient(tid, CAPIO_POSIX_SYSCALL_REQUEST_SKIP); return; } const auto c_file_opt = storage_manager->tryGet(path); if (c_file_opt) { // TODO: it works only in the local case + LOG("Found local path"); CapioFile &c_file = c_file_opt->get(); if (c_file.is_deletable()) { + LOG("File is deletable!"); storage_manager->remove(path); delete_from_files_location(path); } client_manager->replyToClient(tid, 0); } else { + LOG("File not found"); client_manager->replyToClient(tid, -1); } } diff --git a/capio/server/include/utils/capio_file.hpp b/capio/server/include/utils/capio_file.hpp index ed68732ff..5062de8b3 100644 --- a/capio/server/include/utils/capio_file.hpp +++ b/capio/server/include/utils/capio_file.hpp @@ -369,7 +369,11 @@ class CapioFile { return _n_close_expected == -1 || _n_close == _n_close_expected; } - [[nodiscard]] inline bool is_deletable() const { return _n_opens <= 0; } + [[nodiscard]] inline bool is_deletable() const { + START_LOG(gettid(), "call()"); + LOG("_n_opens=%d", _n_opens); + return _n_opens <= 0; + } [[nodiscard]] inline bool is_dir() const { return _directory; } From 826fce10a3440d56c5ab8f0b6d2f2133e99be59e Mon Sep 17 00:00:00 2001 From: Marco Edoardo Santimaria Date: Fri, 13 Feb 2026 17:49:41 +0000 Subject: [PATCH 06/12] logs --- capio/server/include/utils/capio_file.hpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/capio/server/include/utils/capio_file.hpp b/capio/server/include/utils/capio_file.hpp index 5062de8b3..aa837ef28 100644 --- a/capio/server/include/utils/capio_file.hpp +++ b/capio/server/include/utils/capio_file.hpp @@ -377,7 +377,11 @@ class CapioFile { [[nodiscard]] inline bool is_dir() const { return _directory; } - inline void open() { _n_opens++; } + inline void open() { + START_LOG(gettid(), "call()"); + _n_opens++; + LOG("_n_opens=%d", _n_opens); + } /* * From the manual: From e61d1cc42db44874cf9b5809df5d657e5e3ca6de Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 16 Feb 2026 18:20:05 +0100 Subject: [PATCH 07/12] Changed docker base images --- .github/workflows/ci-tests.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci-tests.yaml b/.github/workflows/ci-tests.yaml index f7d08e574..ad20147f5 100644 --- a/.github/workflows/ci-tests.yaml +++ b/.github/workflows/ci-tests.yaml @@ -113,12 +113,12 @@ jobs: - gcc:11 - gcc:12 - gcc:13 - - silkeh/clang:13 - - silkeh/clang:14 - - silkeh/clang:15 - - silkeh/clang:16 - - silkeh/clang:17 - - silkeh/clang:18 + - zhongruoyu/llvm-ports:13 + - zhongruoyu/llvm-ports:14 + - zhongruoyu/llvm-ports:15 + - zhongruoyu/llvm-ports:16 + - zhongruoyu/llvm-ports:17 + - zhongruoyu/llvm-ports:18 container: image: ${{ matrix.compiler }} From 9ef3ca7f5fa11073a4a8b516b905b06fd17fb6d9 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 16 Feb 2026 18:56:20 +0100 Subject: [PATCH 08/12] Logs --- capio/server/include/utils/capio_file.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/capio/server/include/utils/capio_file.hpp b/capio/server/include/utils/capio_file.hpp index aa837ef28..21954151f 100644 --- a/capio/server/include/utils/capio_file.hpp +++ b/capio/server/include/utils/capio_file.hpp @@ -147,8 +147,10 @@ class CapioFile { } inline void close() { + START_LOG(gettid(), "call()"); _n_close++; _n_opens--; + LOG("after: _n_close=%d, n_opens=%d", _n_close, _n_opens); } void commit() { @@ -380,7 +382,7 @@ class CapioFile { inline void open() { START_LOG(gettid(), "call()"); _n_opens++; - LOG("_n_opens=%d", _n_opens); + LOG("after: _n_opens=%d", _n_opens); } /* From a1f4cda9310fe91048fe3386a9e5127d333388d1 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 16 Feb 2026 19:15:49 +0100 Subject: [PATCH 09/12] Bugfix --- capio/server/include/storage/manager.hpp | 3 ++- capio/server/src/storage_manager.cpp | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/capio/server/include/storage/manager.hpp b/capio/server/include/storage/manager.hpp index d2fc927c1..febce0f45 100644 --- a/capio/server/include/storage/manager.hpp +++ b/capio/server/include/storage/manager.hpp @@ -96,8 +96,9 @@ class StorageManager { * @param tid The thread ID. * @param fd The file descriptor number. * @param path The path of the file being opened. + * @param register_open */ - void _addNewFdToStorage(pid_t tid, int fd, const std::filesystem::path &path); + void _addNewFdToStorage(pid_t tid, int fd, const std::filesystem::path &path, bool register_open); public: /** diff --git a/capio/server/src/storage_manager.cpp b/capio/server/src/storage_manager.cpp index 75267cfa4..1031307f5 100644 --- a/capio/server/src/storage_manager.cpp +++ b/capio/server/src/storage_manager.cpp @@ -221,7 +221,7 @@ void StorageManager::clone(const pid_t parent_tid, const pid_t child_tid) { const auto path = _opened_fd_map[parent_tid][fd]._path; const auto offset = *_opened_fd_map[parent_tid][fd]._offset; - _addNewFdToStorage(child_tid, fd, path); + _addNewFdToStorage(child_tid, fd, path, false); _addNewFdToMap(child_tid, fd, path, offset); } } @@ -276,8 +276,11 @@ void StorageManager::_addNewFdToMap(const pid_t tid, const int fd, } void StorageManager::_addNewFdToStorage(const pid_t tid, const int fd, - const std::filesystem::path &path) { - _storage[path].open(); + const std::filesystem::path &path, + const bool register_open) { + if (register_open) { + _storage[path].open(); + } _storage[path].add_fd(tid, fd); } @@ -287,7 +290,7 @@ void StorageManager::addFileToTid(const pid_t tid, const int fd, const std::file { const std::lock_guard lg(_mutex_storage); - _addNewFdToStorage(tid, fd, path); + _addNewFdToStorage(tid, fd, path, true); } { From 8519d507fd640ba3a71db3e05994beda0d8c96db Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 21 Feb 2026 19:05:57 +0000 Subject: [PATCH 10/12] reverted changes and bug fix --- .github/workflows/ci-tests.yaml | 2 +- capio/server/include/handlers/unlink.hpp | 5 ----- capio/server/include/utils/capio_file.hpp | 14 ++------------ capio/server/src/storage_manager.cpp | 2 +- 4 files changed, 4 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci-tests.yaml b/.github/workflows/ci-tests.yaml index cfbb98b5c..6fb4d7660 100644 --- a/.github/workflows/ci-tests.yaml +++ b/.github/workflows/ci-tests.yaml @@ -229,7 +229,7 @@ jobs: - name: "Generate coverage report" if: ${{ matrix.build_type == 'Debug' }} run: | - pip install --upgrade gcovr + pip install --upgrade gcovr --break-system-packages gcovr \ --exclude-throw-branches \ --xml coverage.xml \ diff --git a/capio/server/include/handlers/unlink.hpp b/capio/server/include/handlers/unlink.hpp index 9674e146d..22b670001 100644 --- a/capio/server/include/handlers/unlink.hpp +++ b/capio/server/include/handlers/unlink.hpp @@ -10,24 +10,19 @@ void unlink_handler(const char *const str) { char path[PATH_MAX]; int tid; sscanf(str, "%d %s", &tid, path); - START_LOG(gettid(), "call(tid=%d, path=%s)", tid, path); if (CapioCLEngine::get().isExcluded(path)) { - LOG("File is excluded. Skipping removal"); client_manager->replyToClient(tid, CAPIO_POSIX_SYSCALL_REQUEST_SKIP); return; } const auto c_file_opt = storage_manager->tryGet(path); if (c_file_opt) { // TODO: it works only in the local case - LOG("Found local path"); CapioFile &c_file = c_file_opt->get(); if (c_file.is_deletable()) { - LOG("File is deletable!"); storage_manager->remove(path); delete_from_files_location(path); } client_manager->replyToClient(tid, 0); } else { - LOG("File not found"); client_manager->replyToClient(tid, -1); } } diff --git a/capio/server/include/utils/capio_file.hpp b/capio/server/include/utils/capio_file.hpp index 21954151f..ed68732ff 100644 --- a/capio/server/include/utils/capio_file.hpp +++ b/capio/server/include/utils/capio_file.hpp @@ -147,10 +147,8 @@ class CapioFile { } inline void close() { - START_LOG(gettid(), "call()"); _n_close++; _n_opens--; - LOG("after: _n_close=%d, n_opens=%d", _n_close, _n_opens); } void commit() { @@ -371,19 +369,11 @@ class CapioFile { return _n_close_expected == -1 || _n_close == _n_close_expected; } - [[nodiscard]] inline bool is_deletable() const { - START_LOG(gettid(), "call()"); - LOG("_n_opens=%d", _n_opens); - return _n_opens <= 0; - } + [[nodiscard]] inline bool is_deletable() const { return _n_opens <= 0; } [[nodiscard]] inline bool is_dir() const { return _directory; } - inline void open() { - START_LOG(gettid(), "call()"); - _n_opens++; - LOG("after: _n_opens=%d", _n_opens); - } + inline void open() { _n_opens++; } /* * From the manual: diff --git a/capio/server/src/storage_manager.cpp b/capio/server/src/storage_manager.cpp index c07632bf6..d4f7eb55a 100644 --- a/capio/server/src/storage_manager.cpp +++ b/capio/server/src/storage_manager.cpp @@ -290,7 +290,7 @@ void StorageManager::addFileToTid(const pid_t tid, const int fd, const std::file { const std::lock_guard lg(_mutex_storage); - _addNewFdToStorage(tid, fd, path, true); + _addNewFdToStorage(tid, fd, path); } { From 4cef3c97dfbb8a1311d52cc9d8651c22b27af7d8 Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 21 Feb 2026 19:12:35 +0000 Subject: [PATCH 11/12] fix --- .github/workflows/ci-tests.yaml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci-tests.yaml b/.github/workflows/ci-tests.yaml index 6fb4d7660..36a9ee9b7 100644 --- a/.github/workflows/ci-tests.yaml +++ b/.github/workflows/ci-tests.yaml @@ -137,7 +137,7 @@ jobs: - name: "Install packages" run: | apt update - apt install -y \ + apt install -y \ libcapstone-dev \ openmpi-bin \ libopenmpi-dev \ @@ -153,7 +153,8 @@ jobs: wget \ tar \ python3 \ - python3-pip + python3-pip \ + python3-venv - name: "Run CMake" shell: bash @@ -229,11 +230,13 @@ jobs: - name: "Generate coverage report" if: ${{ matrix.build_type == 'Debug' }} run: | - pip install --upgrade gcovr --break-system-packages + python3 -m venv venv + . venv/bin/activate + pip install --upgrade gcovr gcovr \ - --exclude-throw-branches \ - --xml coverage.xml \ - --gcov-executable $GCOV \ + --exclude-throw-branches \ + --xml coverage.xml \ + --gcov-executable gcov \ ../build - name: "Upload coverage report" if: ${{ matrix.build_type == 'Debug' }} From 8488fa3deadf982372dd2dc5998eb0c3e3d6edc6 Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 21 Feb 2026 20:15:47 +0000 Subject: [PATCH 12/12] change of strategy for artifact name computation --- .github/workflows/ci-tests.yaml | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci-tests.yaml b/.github/workflows/ci-tests.yaml index 36a9ee9b7..c395dd125 100644 --- a/.github/workflows/ci-tests.yaml +++ b/.github/workflows/ci-tests.yaml @@ -214,19 +214,6 @@ jobs: if: ${{ always() && steps.run-tests.outcome == 'failure' && matrix.build_type == 'Debug' }} run: tail -v -n +1 capio_logs/server/$(hostname)/server_thread_*.log - - name: "Select gcov tool" - shell: bash - run: | - COMPILER="${{ matrix.compiler }}" - - if [[ "$COMPILER" == silkeh/clang:* ]]; then - VERSION="${COMPILER#*:}" - echo "GCOV=llvm-cov-$VERSION gcov" >> "$GITHUB_ENV" - else - VERSION="${COMPILER#*:}" - echo "GCOV=gcov-$VERSION" >> "$GITHUB_ENV" - fi - - name: "Generate coverage report" if: ${{ matrix.build_type == 'Debug' }} run: | @@ -238,14 +225,23 @@ jobs: --xml coverage.xml \ --gcov-executable gcov \ ../build + + - name: "Compute Valid Artifact Name" + if: ${{ matrix.build_type == 'Debug' }} + id: calc-name + run: | + CLEAN_NAME=$(echo "${{ matrix.compiler }}" | tr '/:.' '-' | sed 's/--/-/g') + echo "artifact_name=${CLEAN_NAME}-tests" >> $GITHUB_OUTPUT + - name: "Upload coverage report" if: ${{ matrix.build_type == 'Debug' }} uses: actions/upload-artifact@v4 with: - name: ${{ format('{0}-tests', matrix.compiler) }} + name: ${{ steps.calc-name.outputs.artifact_name }} path: ./coverage.xml retention-days: 1 if-no-files-found: error + upload-to-codecov: name: "Codecov report upload" needs: [ "unit-tests" , "codespell-check" , "format-check" ]