From e6e23b92e3019e27471c9bf7a97db5f95e7a9a29 Mon Sep 17 00:00:00 2001 From: Steve Loveless Date: Mon, 26 Jun 2023 22:04:24 -0700 Subject: [PATCH] [ruby/yarp] rust: Initial yarp-sys Still need to add more tests Update Cargo.toml; add README Switch yp_string_t_type variants to SNAKE_CASE Add unescape tests Add encoding callback tests Add pack_parse test Add diagnostic test Add comment test Add node tests Add string_list tests Add other string tests Add shared string test Add list tests Fixes for updated branch Run bundle install before running Rust tests Fix version test ci: Add proper config for rust-toolchain step for sanitizers ci: Fix tests, clippy Remove extra `bundle install`; run `bundle exec rake` Didn't realize `setup-ruby`'s `bundle-cache: true` runs `bundle install`. Remove `rake compile` from build.rs This is complicating CI for me; maybe we add it back later. Undo README formatting changes Fix UB in C callbacks Use slice+str instead of String for raw things Move bindings to bindings module Handle non-UTF-8 strings in paths rust ci: test with sanitizers; add -D warnings Update rust-bindings.yml Update Cargo.toml Don't need to compile extra crate_types PR changes Apply patch from @kddnewton Delete unescape_tests.rs Fix things after rebasing https://github.com/ruby/yarp/commit/273790e40b --- .github/workflows/rust-bindings.yml | 101 ++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 .github/workflows/rust-bindings.yml diff --git a/.github/workflows/rust-bindings.yml b/.github/workflows/rust-bindings.yml new file mode 100644 index 0000000000..80fa75bce5 --- /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