aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/main.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/main.yml')
-rw-r--r--.github/workflows/main.yml168
1 files changed, 168 insertions, 0 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 0000000..d64ee25
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,168 @@
+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