| name: CI |
| |
| on: |
| push: |
| branches: |
| - master |
| pull_request: |
| branches: |
| - master |
| schedule: |
| - cron: '00 01 * * *' |
| env: |
| RUST_BACKTRACE: 1 |
| jobs: |
| test: |
| name: Test ${{ matrix.target }} |
| |
| strategy: |
| fail-fast: false |
| |
| matrix: |
| include: |
| - { 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.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.host }} |
| targets: ${{ matrix.target }} |
| |
| - run: cargo build --features bundled --workspace --all-targets --verbose |
| - run: cargo test --features bundled --workspace --all-targets --verbose |
| - run: cargo test --features bundled --workspace --doc --verbose |
| |
| - name: Test Features |
| # TODO: clang is installed on these -- but `bindgen` can't find it... |
| if: matrix.os != 'windows-latest' |
| run: | |
| cargo test --features 'bundled-full session buildtime_bindgen time' --all-targets --workspace --verbose |
| cargo test --features 'bundled-full session buildtime_bindgen time' --doc --workspace --verbose |
| |
| - name: Static build |
| # Do we expect this to work / should we test with gnu toolchain? |
| if: matrix.os == 'x86_64-pc-windows-msvc' |
| env: |
| RUSTFLAGS: -Ctarget-feature=+crt-static |
| run: cargo build --features bundled |
| |
| winsqlite3: |
| name: Test with winsqlite3 |
| runs-on: windows-latest |
| steps: |
| - uses: actions/checkout@v2 |
| - uses: hecrj/setup-rust-action@v1 |
| # TODO: Should this test GNU toolchain? What about +crt-static? |
| # TODO: Is it worth testing other features? |
| - run: cargo build --features winsqlite3 --workspace --all-targets --verbose |
| - run: cargo test --features winsqlite3 --workspace --all-targets --verbose |
| |
| sqlcipher: |
| name: Test with sqlcipher |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v2 |
| - uses: hecrj/setup-rust-action@v1 |
| - run: sudo apt-get install sqlcipher libsqlcipher-dev |
| - run: sqlcipher --version |
| # TODO: Is it worth testing other features? |
| - run: cargo build --features sqlcipher --workspace --all-targets --verbose |
| - run: cargo test --features sqlcipher --workspace --all-targets --verbose |
| |
| sanitizer: |
| name: Address Sanitizer |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v2 |
| # Need nightly rust. |
| - uses: hecrj/setup-rust-action@v1 |
| with: |
| rust-version: nightly |
| components: rust-src |
| - name: Tests with asan |
| env: |
| RUSTFLAGS: -Zsanitizer=address |
| RUSTDOCFLAGS: -Zsanitizer=address |
| ASAN_OPTIONS: 'detect_stack_use_after_return=1' |
| # Work around https://github.com/rust-lang/rust/issues/59125 by |
| # disabling backtraces. In an ideal world we'd probably suppress the |
| # leak sanitization, but we don't care about backtraces here, so long |
| # as the other tests have them. |
| RUST_BACKTRACE: '0' |
| run: cargo -Z build-std test --features 'bundled-full session buildtime_bindgen time with-asan' --target x86_64-unknown-linux-gnu |
| |
| # Ensure clippy doesn't complain. |
| clippy: |
| name: Clippy |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v2 |
| - uses: hecrj/setup-rust-action@v1 |
| with: |
| components: clippy |
| - run: cargo clippy --all-targets --workspace --features bundled -- -D warnings |
| # Clippy with all non-conflicting features |
| - run: cargo clippy --all-targets --workspace --features 'bundled-full session buildtime_bindgen time' -- -D warnings |
| |
| # Ensure patch is formatted. |
| fmt: |
| name: Format |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v2 |
| - uses: hecrj/setup-rust-action@v1 |
| with: |
| components: rustfmt |
| - run: cargo fmt --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: hecrj/setup-rust-action@v1 |
| with: |
| rust-version: nightly |
| # Need to use `cargo rustdoc` to actually get it to respect -D |
| # warnings... Note: this also requires nightly. |
| - run: cargo rustdoc --features 'bundled-full session buildtime_bindgen time' -- -D warnings |
| |
| codecov: |
| name: Generate code coverage |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v2 |
| - uses: hecrj/setup-rust-action@v1 |
| - name: Run cargo-tarpaulin |
| uses: actions-rs/tarpaulin@v0.1 |
| with: |
| # Intentionally omit time feature until we're on time 0.3, at which |
| # point it should be added to `bundled-full`. |
| args: '--features "bundled-full session buildtime_bindgen"' |
| |
| - name: Upload to codecov.io |
| uses: codecov/codecov-action@v1 |