name: Tests on: push: branches: - master pull_request: branches: - 'master' - 'stable/**' jobs: test_legacy_linux: name: Test Corrosion (CMake 3.15) uses: ./.github/workflows/test_legacy.yaml with : os: ubuntu-20.04 rust: 1.46.0 test_legacy_mac: name: Test Corrosion (CMake 3.15) uses: ./.github/workflows/test_legacy.yaml with: os: macos-12 rust: 1.54.0 test_legacy_windows: name: Test Corrosion (CMake 3.15) uses: ./.github/workflows/test_legacy.yaml with: os: windows-2019 rust: 1.46.0 test_legacy_stable: name: Legacy CMake + stable Rust uses: ./.github/workflows/test_legacy.yaml strategy: fail-fast: false matrix: os: - windows-2019 # windows-latest is currently not having a supported MSVC compiler - ubuntu-20.04 - macos-12 with: os: ${{ matrix.os }} rust: stable test_legacy_nightly: name: Legacy CMake + nightly Rust uses: ./.github/workflows/test_legacy.yaml with: os: ubuntu-20.04 rust: nightly test_legacy_new_lockfile_msrv: name: Test MSRV of the new lockfile runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4 - name: Install Rust id: install_rust uses: dtolnay/rust-toolchain@1.56 - name: Test Generator build with MSRV run: cargo build working-directory: generator test: name: Test Corrosion runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.rust == 'nightly' }} strategy: fail-fast: false matrix: os: - windows-2019 # windows-latest is currently not having a supported MSVC compiler - ubuntu-latest - macos-12 arch: - x86_64 - i686 - aarch64 - powerpc64le abi: - gnu - darwin - msvc cmake: - 3.19.0 rust: # Our MSRV is already tested with the legacy generator, so just test the current stable rust here. - stable generator: - default # This is just whatever the platform default is - ninja compiler: [default] include: - rust: nightly cmake: 3.19.0 generator: ninja arch: x86_64 abi: msvc os: windows-2019 - rust: nightly cmake: 3.19.0 generator: ninja arch: x86_64 abi: gnu os: ubuntu-latest - rust: nightly cmake: 3.19.0 generator: ninja arch: x86_64 abi: darwin os: macos-12 - rust: 1.54 cmake: 3.19.0 generator: ninja arch: x86_64 abi: msvc os: windows-2019 compiler: clang - os: ubuntu-latest arch: x86_64 abi: gnu cmake: 3.20.0 rust: 1.54 generator: ninja-multiconfig exclude: # We have a separate test Matrix for the Visual Studio Generator - os: windows-2019 generator: default # Default generator is Visual Studio # ARCH - os: windows-2019 arch: i686 abi: gnu - os: windows-2019 arch: aarch64 abi: gnu - os: windows-2019 arch: i686 generator: ninja - os: windows-2019 arch: aarch64 generator: ninja - os: windows-2019 arch: powerpc64le - os: macos-12 arch: i686 - os: macos-12 arch: aarch64 - os: macos-12 arch: powerpc64le # ABI - os: ubuntu-latest abi: msvc - os: ubuntu-latest abi: darwin - os: windows-2019 abi: darwin - os: macos-12 abi: msvc - os: macos-12 abi: gnu steps: - uses: actions/checkout@v4 - name: Setup Environment and Configure CMake uses: "./.github/actions/setup_test" with: target_arch: ${{matrix.arch}} abi: ${{matrix.abi}} cmake: ${{matrix.cmake}} rust: ${{matrix.rust}} generator: ${{matrix.generator}} build_dir: build compiler: ${{matrix.compiler}} - name: Run Tests id: run_tests working-directory: build run: ctest --output-on-failure --build-config Debug -j 3 test_msvc: name: Test MSVC Generator runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: - windows-2019 - windows-2022 arch: - x86_64 - i686 - aarch64 include: - rust: 1.54.0 # Override rust version for x86_64 - arch: x86_64 rust: 1.46.0 - os: windows-2019 cmake: 3.20.6 # Multi-config Generators require at least CMake 3.20 - os: windows-2022 cmake: 3.21.5 # VS on windows-2022 requires at least CMake 3.21 steps: - uses: actions/checkout@v4 # The initial configure for MSVC is quite slow, so we cache the build directory # (including the build directories of the tests) since reconfiguring is # significantly faster. - name: Cache MSVC build directory id: cache-msvc-builddir uses: actions/cache@v4 with: path: build key: ${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.rust }}-msvc-build - name: Setup Environment and Configure CMake uses: "./.github/actions/setup_test" with: target_arch: ${{matrix.arch}} abi: msvc cmake: ${{matrix.cmake}} rust: ${{matrix.rust}} generator: default build_dir: build configure_params: "-DCORROSION_TESTS_KEEP_BUILDDIRS=ON" - name: Run Tests working-directory: build run: ctest --output-on-failure --build-config Debug -j 3 test_cxxbridge: name: Test cxxbridge integration runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: - windows-2019 - ubuntu-latest - macos-12 include: - abi: default # - os: windows-2019 # abi: gnu steps: - uses: actions/checkout@v4 - uses: actions/cache@v4 id: cache_cxxbridge with: path: "~/.cargo/bin/cxxbridge*" key: ${{ runner.os }}-cxxbridge_1_0_86 - name: Install cxxbridge if: steps.cache_cxxbridge.outputs.cache-hit != 'true' run: cargo install cxxbridge-cmd@1.0.86 - name: Install lld run: sudo apt update && sudo apt install -y lld if: ${{ 'Linux' == runner.os }} - name: Setup Environment and Configure CMake uses: "./.github/actions/setup_test" with: target_arch: x86_64 cmake: 3.15.7 rust: stable minus 2 releases abi: ${{ matrix.abi }} generator: ninja build_dir: build configure_params: -DCORROSION_TESTS_CXXBRIDGE=ON - name: Run Tests working-directory: build run: ctest --output-on-failure --build-config Debug -j 3 -R "^cxxbridge" install: name: Test Corrosion as a Library runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: - windows-2019 - ubuntu-latest - macos-12 include: - rust: 1.46.0 - os: macos-12 rust: 1.54.0 # On MacOS-12 linking fails before Rust 1.54 steps: - uses: actions/checkout@v4 - name: Setup MSVC Development Environment uses: ilammy/msvc-dev-cmd@v1 if: runner.os == 'Windows' - name: Install CMake uses: lukka/get-cmake@519de0c7b4812477d74976b2523a9417f552d126 with: cmakeVersion: "~3.18.0" ninjaVersion: "~1.10.0" - name: Install Rust uses: dtolnay/rust-toolchain@master with: toolchain: ${{matrix.rust}} - name: CMake Version run: cmake --version - name: Rust Version run: rustc --version - name: Test Corrosion as subdirectory run: > cmake -S. -Bbuild -GNinja -DCORROSION_VERBOSE_OUTPUT=ON -DCORROSION_TESTS_INSTALL_CORROSION=OFF && cd build && ctest --output-on-failure -C Debug -j 3 - name: Test Corrosion as installed module run: > cmake -E remove_directory build && cmake -S. -Bbuild -GNinja -DCORROSION_VERBOSE_OUTPUT=ON -DCMAKE_BUILD_TYPE=Release -DCORROSION_TESTS_INSTALL_CORROSION=ON && cd build && ctest --output-on-failure -C Release -j 3 # We need some "accumulation" job here because bors fails (timeouts) to # listen on matrix builds. # Hence, we have some kind of dummy here that bors can listen on ci-success: name: bors-ci-status if: ${{ always() }} needs: - test_legacy_linux - test_legacy_mac - test_legacy_windows - test_legacy_stable - test_legacy_new_lockfile_msrv - test - test_msvc - test_cxxbridge - install runs-on: ubuntu-latest # Step copied from: https://github.com/cross-rs/cross/blob/80c9f9109a719ffb0f694060ddc6e371d5b3a540/.github/workflows/ci.yml#L361 steps: - name: Result run: | jq -C <<< "${needs}" # Check if all needs were successful or skipped. "$(jq -r 'all(.result as $result | (["success", "skipped"] | contains([$result])))' <<< "${needs}")" env: needs: ${{ toJson(needs) }}