name: Build on: push: branches: - "master" tags: - "*" schedule: - cron: "40 4 * * *" # every day at 4:40 pull_request: jobs: test: name: "Test" strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} timeout-minutes: 15 steps: - name: "Checkout Repository" uses: actions/checkout@v1 - name: Install Rustup run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain nightly echo ::add-path::$HOME/.cargo/bin if: runner.os == 'macOS' - name: Set Rustup profile to minimal run: rustup set profile minimal - name: Install musl target on Linux run: | rustup target add x86_64-unknown-linux-musl sudo apt-get install musl-tools musl-dev if: runner.os == 'Linux' - name: "Print Rust Version" run: | rustc -Vv cargo -Vv - name: Cache binaries id: cache-bin uses: actions/cache@v1 with: path: binaries key: ${{ runner.OS }}-binaries - name: Add binaries/bin to PATH run: echo ::add-path::$GITHUB_WORKSPACE/binaries/bin shell: bash - name: "Run cargo build" run: cargo build - name: "Run cargo build for stable" run: cargo build --no-default-features --features stable if: runner.os != 'Windows' - name: "Run cargo build for stable on musl" run: cargo build --target x86_64-unknown-linux-musl --no-default-features --features stable if: runner.os == 'Linux' - name: "Run cargo test" run: cargo test - name: "Run cargo test for stable" run: cargo test --no-default-features --features stable if: runner.os != 'Windows' - name: "Run cargo test for stable on musl" run: cargo test --target x86_64-unknown-linux-musl --no-default-features --features stable if: runner.os == 'Linux' - name: "Install Rustup Targets" run: | rustup target add i686-unknown-linux-gnu rustup target add thumbv7em-none-eabihf - name: "Install Rustup Components" run: rustup component add rust-src llvm-tools-preview - name: "Install cargo-xbuild" run: cargo install cargo-xbuild --debug --root binaries - name: "Install bootimage" run: cargo install bootimage --debug --root binaries # install QEMU - name: Install QEMU (Linux) run: | sudo apt update sudo apt install qemu-system-x86 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 ::add-path::$HOME\scoop\shims if: runner.os == 'Windows' shell: pwsh - name: Install QEMU (Windows) run: scoop install qemu if: runner.os == 'Windows' shell: pwsh - name: "Print QEMU Version" run: qemu-system-x86_64 --version - name: "Run Test Framework" run: cargo xtest working-directory: "testing" check_formatting: name: "Check Formatting" runs-on: ubuntu-latest timeout-minutes: 2 steps: - uses: actions/checkout@v1 - run: rustup install nightly - run: cargo +nightly fmt -- --check clippy: name: "Clippy" runs-on: ubuntu-latest timeout-minutes: 10 steps: - uses: actions/checkout@v1 - run: rustup install nightly - run: cargo +nightly clippy -- -D warnings