refactor: install clang tools on demand #600
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "Test CI" | |
| on: | |
| push: | |
| branches: [main] | |
| paths: | |
| - cpp-linter/** | |
| - Cargo.toml | |
| - Cargo.lock | |
| - .github/workflows/run-dev-tests.yml | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - cpp-linter/** | |
| - Cargo.toml | |
| - Cargo.lock | |
| - .github/workflows/run-dev-tests.yml | |
| env: | |
| CARGO_TERM_COLOR: always | |
| RUST_BACKTRACE: 1 | |
| permissions: {} | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} | |
| jobs: | |
| test: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: ["windows-latest", ubuntu-latest] | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| persist-credentials: false | |
| - name: Setup Rust | |
| run: |- | |
| rustup update --no-self-update | |
| rustup component add llvm-tools-preview | |
| # https://docs.rs/openssl/latest/openssl/#automatic | |
| # - name: Install OpenSSL (Linux) | |
| # if: runner.os == 'Linux' | |
| # run: sudo apt-get install -y pkg-config libssl-dev | |
| # - name: Install OpenSSL (MacOS) | |
| # if: runner.os == 'macOS' | |
| # run: brew install openssl@3 | |
| # - name: Install OpenSSL (Windows) | |
| # if: runner.os == 'Windows' | |
| # run: vcpkg install openssl | |
| - uses: cargo-bins/cargo-binstall@1800853f2578f8c34492ec76154caef8e163fbca # v1.17.7 | |
| env: | |
| GITHUB_TOKEN: ${{ github.token }} | |
| - name: Install third-party binaries | |
| run: >- | |
| cargo binstall -y --locked cargo-nextest cargo-llvm-cov nur nu | |
| env: | |
| GITHUB_TOKEN: ${{ github.token }} | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: 3.x | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098 # v7.3.1 | |
| with: | |
| enable-cache: true | |
| cache-dependency-glob: "uv.lock" | |
| # # https://github.com/ninja-build/ninja/wiki/Pre-built-Ninja-packages | |
| - name: Install ninja (Linux) | |
| if: runner.os == 'Linux' | |
| run: sudo apt-get install ninja-build | |
| - name: Install ninja (Windows) | |
| if: runner.os == 'Windows' | |
| run: choco install ninja | |
| - name: Cache .cargo locked resources | |
| uses: actions/cache@v5 | |
| with: | |
| path: ~/.cargo | |
| key: ${{ runner.os }}-tests-cargo-${{ hashFiles('Cargo.lock') }} | |
| - name: Fetch .cargo locked resources | |
| run: cargo fetch | |
| - if: runner.os == 'Linux' | |
| run: sudo apt-get update | |
| - name: Install nushell | |
| uses: hustcer/setup-nu@920172d92eb04671776f3ba69d605d3b09351c30 # v3.22 | |
| - name: Run test suite | |
| env: | |
| MIN_CLANG_VERSION: "11" | |
| MAX_CLANG_VERSION: "22" | |
| shell: nu {0} | |
| run: |- | |
| let max_ver = $env.MAX_CLANG_VERSION | into int | |
| let min_ver = $env.MIN_CLANG_VERSION | into int | |
| for $ver in ($min_ver..$max_ver) { | |
| print $"::group::Testing with clang v($ver)" | |
| with-env { CLANG_VERSION: $"($ver)" } { | |
| nur test --profile warmup | |
| let test_profile = ( | |
| if ($ver == $max_ver) { "all" } else { "ci" } | |
| ) | |
| nur test --profile $test_profile | |
| } | |
| print "::endgroup::" | |
| } | |
| - name: Generate Coverage HTML report | |
| run: nur test llvm-cov | |
| - name: Upload coverage data | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: HTML_report-${{ runner.os }} | |
| path: target/llvm-cov/html | |
| - name: Generate Coverage lcov report | |
| run: nur test lcov | |
| - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 | |
| with: | |
| token: ${{secrets.CODECOV_TOKEN}} | |
| files: lcov.info | |
| fail_ci_if_error: true # optional (default = false) |