name: Build on: push: branches: - '*' pull_request: jobs: test: name: Test strategy: matrix: platform: [ ubuntu-latest, macos-latest, windows-latest ] runs-on: ${{ matrix.platform }} timeout-minutes: 30 steps: - name: "Checkout Repository" uses: actions/checkout@v1 - name: Install Rustup (macOS) run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y echo "$HOME/.cargo/bin" >> $GITHUB_PATH if: runner.os == 'macOS' - name: Set Rustup profile to minimal run: rustup set profile minimal - name: "Switch to Rust nightly" run: rustup default nightly - name: "Print Rust Version" run: | rustc -Vv cargo -Vv - name: "Install build tools" run: cargo install cargo-make cargo-binutils - name: "Prepare packages (Linux)" run: | sudo apt install software-properties-common sudo add-apt-repository ppa:jacob/virtualisation sudo apt update if: runner.os == 'Linux' - name: "Install dev libraries (Linux)" run: sudo apt install libudev-dev if: runner.os == 'Linux' - name: "Validate rust-lld" run: | which rust-lld || echo "Not found" otool -L ~/.cargo/bin/rust-lld if: runner.os == 'macOS' - name: "Print Tools Version" run: | cargo make --version cargo objcopy --version - name: "Deny Warnings" run: cargo make build env: RUSTFLAGS: "-D warnings" - name: Install QEMU (Linux) run: | sudo apt install qemu-system-aarch64 if: runner.os == 'Linux' - name: Install QEMU (macOS) run: brew install qemu if: runner.os == 'macOS' env: HOMEBREW_NO_AUTO_UPDATE: 1 HOMEBREW_NO_BOTTLE_SOURCE_FALLBACK: 1 HOMEBREW_NO_INSTALL_CLEANUP: 1 - name: Install Scoop (Windows) run: | Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') echo "$HOME\scoop\shims" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append if: runner.os == 'Windows' shell: pwsh - name: Add custom Scoop bucket (Windows) run: | scoop bucket add scoop-for-ci https://github.com/metta-systems/scoop-for-ci if: runner.os == 'Windows' shell: pwsh - name: Install QEMU (Windows) run: scoop install qemu-510 if: runner.os == 'Windows' shell: pwsh - name: "Print QEMU Version" run: qemu-system-aarch64 --version - name: 'Build kernel' run: cargo make build - name: 'Run tests (macOS)' run: cargo make test if: runner.os == 'macOS' - name: 'Run tests (other OSes)' run: env QEMU_MACHINE=raspi3 cargo make test if: runner.os != 'macOS' check_formatting: name: "Check Formatting" runs-on: ubuntu-latest timeout-minutes: 2 steps: - uses: actions/checkout@v1 - run: rustup toolchain install nightly --profile minimal --component rustfmt - run: cargo +nightly fmt -- --check clippy: name: "Clippy" strategy: matrix: features: [ "", "noserial", "qemu", "noserial,qemu", "jtag", "noserial,jtag", # jtag and qemu together don't make much sense ] runs-on: ubuntu-latest timeout-minutes: 10 steps: - uses: actions/checkout@v1 - run: sudo apt update - run: sudo apt install libudev-dev - run: rustup toolchain install nightly - run: cargo install cargo-make - run: env CLIPPY_FEATURES=${{ matrix.features }} cargo make clippy