name: CI on: push: branches: - master pull_request: branches: - master schedule: - cron: '00 01 * * *' env: RUST_BACKTRACE: 1 jobs: test: name: Test strategy: fail-fast: false matrix: platform: - { target: x86_64-pc-windows-msvc, os: windows-latest } - { target: x86_64-unknown-linux-gnu, os: ubuntu-latest } - { target: x86_64-apple-darwin, os: macos-latest } - { target: x86_64-pc-windows-gnu, os: windows-latest, host: -x86_64-pc-windows-gnu } runs-on: ${{ matrix.platform.os }} steps: - uses: actions/checkout@v2 # This has a matcher for test panics, so we use it even though elsewhere # we use actions-rs/toolchain. - uses: hecrj/setup-rust-action@v1 with: rust-version: stable${{ matrix.platform.host }} targets: ${{ matrix.platform.target }} - uses: actions-rs/cargo@v1 with: command: build args: --features bundled --workspace --all-targets - uses: actions-rs/cargo@v1 with: command: test args: --features bundled --workspace --all-targets - name: "cargo test --features 'bundled-full session buildtime_bindgen'" # TODO: clang is installed on these -- but `bindgen` can't find it... if: matrix.platform.os != 'windows-latest' uses: actions-rs/cargo@v1 with: command: test args: --features 'bundled-full session buildtime_bindgen' --all-targets --workspace - name: "cargo test --features bundled-full" uses: actions-rs/cargo@v1 with: command: test args: --features bundled-full --all-targets --workspace - name: Static build # Do we expect this to work / should we test with gnu toolchain? if: matrix.platform.os == 'x86_64-pc-windows-msvc' shell: cmd run: | set RUSTFLAGS=-Ctarget-feature=+crt-static cargo build --features bundled sanitizer: name: Address Sanitizer runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 # Need nightly rust. - uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: nightly override: true components: rust-src - name: Tests with asan env: RUSTFLAGS: -Zsanitizer=address RUSTDOCFLAGS: -Zsanitizer=address ASAN_OPTIONS: 'detect_stack_use_after_return=1' run: cargo -Z build-std test --features 'bundled-full session buildtime_bindgen with-asan' --target x86_64-unknown-linux-gnu # Ensure clippy doesn't complain. clippy: name: Clippy strategy: fail-fast: false runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - run: rustup component add clippy - uses: actions-rs/cargo@v1 with: command: clippy # clippy with just bundled args: --all-targets --workspace --features bundled -- -D warnings - uses: actions-rs/cargo@v1 with: command: clippy # Clippy with all non-conflicting features args: --all-targets --workspace --features 'bundled-full session buildtime_bindgen' -- -D warnings # Ensure patch is formatted. fmt: name: Format runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 # This has a matcher for rustfmt errors, so we use it even though # elsewhere we use actions-rs/toolchain. - uses: hecrj/setup-rust-action@v1 with: rust-version: stable components: rustfmt - run: rustup component add rustfmt - uses: actions-rs/cargo@v1 with: command: fmt args: --all -- --check # Detect cases where documentation links don't resolve and such. doc: name: Docs runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: profile: minimal # Docs.rs uses nightly, which allows for easier syntax for linking to functions. toolchain: nightly override: true - uses: actions-rs/cargo@v1 with: # Need to use `cargo rustdoc` to actually get it to respect -D # warnings... Note: this also requires nightly. command: rustdoc args: --features 'bundled-full session buildtime_bindgen' -- -D warnings codecov: name: Generate code coverage runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: toolchain: stable override: true - name: Run cargo-tarpaulin uses: actions-rs/tarpaulin@v0.1 with: args: '--features "bundled-full session buildtime_bindgen"' - name: Upload to codecov.io uses: codecov/codecov-action@v1