diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..dda7132 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,87 @@ +name: CI + +on: + pull_request: + push: + branches: [main] + +jobs: + tests: + name: Tests + strategy: + fail-fast: false + matrix: + rust_version: ['1.60.0', stable, nightly] + platform: + - { target: x86_64-pc-windows-msvc, os: windows-latest, } + - { target: i686-pc-windows-msvc, os: windows-latest, } + - { target: x86_64-pc-windows-gnu, os: windows-latest, host: -x86_64-pc-windows-gnu } + - { target: i686-pc-windows-gnu, os: windows-latest, host: -i686-pc-windows-gnu } + - { target: i686-unknown-linux-gnu, os: ubuntu-latest, } + - { target: x86_64-unknown-linux-gnu, os: ubuntu-latest, } + - { target: x86_64-unknown-linux-gnu, os: ubuntu-latest, options: --no-default-features, features: x11 } + - { target: x86_64-unknown-linux-gnu, os: ubuntu-latest, options: --no-default-features, features: "wayland,wayland-dlopen" } + - { target: x86_64-unknown-redox, os: ubuntu-latest, } + - { target: x86_64-apple-darwin, os: macos-latest, } + # We're using Windows rather than Ubuntu to run the wasm tests because caching cargo-web + # doesn't currently work on Linux. + - { target: wasm32-unknown-unknown, os: windows-latest, } + + env: + RUST_BACKTRACE: 1 + CARGO_INCREMENTAL: 0 + RUSTFLAGS: "-C debuginfo=0 --deny warnings" + OPTIONS: ${{ matrix.platform.options }} + FEATURES: ${{ format(',{0}', matrix.platform.features ) }} + CMD: ${{ matrix.platform.cmd }} + RUSTDOCFLAGS: -Dwarnings + + runs-on: ${{ matrix.platform.os }} + steps: + - uses: actions/checkout@v2 + + # Used to cache cargo-web + - name: Cache cargo folder + uses: actions/cache@v1 + with: + path: ~/.cargo + key: ${{ matrix.platform.target }}-cargo-${{ matrix.rust_version }} + + - uses: hecrj/setup-rust-action@v1 + with: + rust-version: ${{ matrix.rust_version }}${{ matrix.platform.host }} + targets: ${{ matrix.platform.target }} + components: clippy + + - name: Install GCC Multilib + if: (matrix.platform.os == 'ubuntu-latest') && contains(matrix.platform.target, 'i686') + run: sudo apt-get update && sudo apt-get install gcc-multilib + + - name: Build crate + shell: bash + run: cargo $CMD build --verbose --target ${{ matrix.platform.target }} $OPTIONS --features $FEATURES + + - name: Build tests + shell: bash + if: > + !((matrix.platform.os == 'ubuntu-latest') && contains(matrix.platform.target, 'i686')) && + !contains(matrix.platform.target, 'redox') && + matrix.rust_version != '1.60.0' + run: cargo $CMD test --no-run --verbose --target ${{ matrix.platform.target }} $OPTIONS --features $FEATURES + + - name: Run tests + shell: bash + if: > + !((matrix.platform.os == 'ubuntu-latest') && contains(matrix.platform.target, 'i686')) && + !contains(matrix.platform.target, 'wasm32') && + !contains(matrix.platform.target, 'redox') + run: cargo $CMD test --verbose --target ${{ matrix.platform.target }} $OPTIONS --features $FEATURES + + - name: Lint with clippy + shell: bash + if: > + (matrix.rust_version == 'stable') && + !contains(matrix.platform.options, '--no-default-features') && + !((matrix.platform.os == 'ubuntu-latest') && contains(matrix.platform.target, 'i686')) && + !contains(matrix.platform.target, 'redox') + run: cargo clippy --all-targets --target ${{ matrix.platform.target }} $OPTIONS --features $FEATURES -- -Dwarnings