diff --git a/.github/workflows/rust-bindings.yml b/.github/workflows/rust-bindings.yml new file mode 100644 index 00000000000000..80fa75bce50029 --- /dev/null +++ b/.github/workflows/rust-bindings.yml @@ -0,0 +1,101 @@ +--- +name: Rust Bindings + +on: + push: + paths: + - ".github/workflows/rust-bindings.yml" + - "include/" + - "src/" + - "rust/" + - "*akefile*" + branches: + - main + pull_request: + +env: + RUSTFLAGS: "-D warnings" + +jobs: + cargo-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: head + bundler-cache: true + - uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }} + restore-keys: | + ${{ runner.os }}-cargo-${{ hashFiles('Cargo.toml') }} + ${{ runner.os }}-cargo + - name: rake compile + run: bundle exec rake compile + - name: cargo test + working-directory: rust/yarp-sys + run: cargo test + + cargo-clippy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: head + bundler-cache: true + - uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }} + restore-keys: | + ${{ runner.os }}-cargo-${{ hashFiles('Cargo.toml') }} + ${{ runner.os }}-cargo + - name: rake compile + run: bundle exec rake compile + - name: cargo clippy + working-directory: rust/yarp-sys + run: cargo clippy --tests -- -W "clippy::pedantic" + + sanitizer-test: + name: Test with -Zsanitizer=${{ matrix.sanitizer }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + sanitizer: [address, leak] + steps: + - uses: actions/checkout@v3 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: head + bundler-cache: true + - name: rake compile + run: bundle exec rake compile + - uses: dtolnay/rust-toolchain@nightly + with: + target: "x86_64-unknown-linux-gnu" + components: "rust-src" + - name: Test with sanitizer + env: + RUSTFLAGS: -Zsanitizer=${{ matrix.sanitizer }} + RUSTDOCFLAGS: -Zsanitizer=${{ matrix.sanitizer }} + # only needed by asan + ASAN_OPTIONS: detect_stack_use_after_return=1 + # Asan's leak detection occasionally complains + # about some small leaks if backtraces are captured, + # so ensure they're not + RUST_BACKTRACE: 0 + working-directory: rust/yarp-sys + run: cargo test -Zbuild-std --verbose --target=x86_64-unknown-linux-gnu