on: push: branches: [ master ] pull_request: merge_group: name: Build check (riscv) jobs: # We check that the crate builds and links for all the toolchains and targets. build-riscv: strategy: matrix: # All generated code should be running on stable now, MRSV is 1.60.0 toolchain: [ stable, nightly, 1.60.0 ] target: - riscv32i-unknown-none-elf - riscv32imc-unknown-none-elf - riscv32imac-unknown-none-elf - riscv64imac-unknown-none-elf - riscv64gc-unknown-none-elf include: # Nightly is only for reference and allowed to fail - toolchain: nightly experimental: true runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || false }} steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.toolchain }} targets: ${{ matrix.target }} - name: Build (M-mode) run: cargo build --package riscv --target ${{ matrix.target }} - name: Build (M-mode, critical section) run: cargo build --package riscv --target ${{ matrix.target }} --features=critical-section-single-hart - name: Build (S-mode) run: cargo build --package riscv --target ${{ matrix.target }} --features=s-mode - name: Build (all features) run: cargo build --package riscv --target ${{ matrix.target }} --all-features # On MacOS, Ubuntu, and Windows, we at least make sure that the crate builds and links. build-others: strategy: matrix: os: [ macos-latest, ubuntu-latest, windows-latest ] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable - name: Build (no features) run: cargo build --package riscv - name: Build (all features) run: cargo build --package riscv --all-features # Job to check that all the builds succeeded build-check: needs: - build-riscv - build-others runs-on: ubuntu-latest if: always() steps: - run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'