This is an automated email from the ASF dual-hosted git repository. mgrigorov pushed a commit to branch add-github-actions-workflows in repository https://gitbox.apache.org/repos/asf/avro-rs.git
commit fb4a8454d9dab4c743e0041dba955d952770e98f Author: Martin Tzvetanov Grigorov <[email protected]> AuthorDate: Mon Sep 23 14:36:49 2024 +0300 Copy the Github Actions workflows from the main repo Signed-off-by: Martin Tzvetanov Grigorov <[email protected]> --- .github/workflows/test-lang-rust-audit.yml | 69 ++++++++ .github/workflows/test-lang-rust-ci-ARM.yml | 71 ++++++++ .github/workflows/test-lang-rust-ci.yml | 247 ++++++++++++++++++++++++++++ .github/workflows/test-lang-rust-clippy.yml | 50 ++++++ 4 files changed, 437 insertions(+) diff --git a/.github/workflows/test-lang-rust-audit.yml b/.github/workflows/test-lang-rust-audit.yml new file mode 100644 index 0000000..0649ae9 --- /dev/null +++ b/.github/workflows/test-lang-rust-audit.yml @@ -0,0 +1,69 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: Rust Security Audit +on: + workflow_dispatch: + push: + branches: [ main ] + paths: + - .github/workflows/test-lang-rust-audit.yml + - '**/Cargo.toml' + - Cargo.lock + - deny.toml + pull_request: + branches: [ main ] + paths: + - .github/workflows/test-lang-rust-audit.yml + - '**/Cargo.toml' + - Cargo.lock + - deny.toml + +permissions: + contents: read + +env: + RUSTFLAGS: -Dwarnings + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + audit: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Dependency Review + if: github.event_name == 'pull_request' + uses: actions/dependency-review-action@v4 + - name: Install Cargo Audit + run: cargo install cargo-audit + - name: Audit + run: cargo audit + + deny: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install Cargo Deny + run: cargo install cargo-deny + - name: Check + run: cargo deny check + \ No newline at end of file diff --git a/.github/workflows/test-lang-rust-ci-ARM.yml b/.github/workflows/test-lang-rust-ci-ARM.yml new file mode 100644 index 0000000..fe2ec39 --- /dev/null +++ b/.github/workflows/test-lang-rust-ci-ARM.yml @@ -0,0 +1,71 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: 'Rust Continuous Integration on ARM' +on: + workflow_dispatch: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +permissions: + contents: read + +env: + RUSTFLAGS: -Dwarnings + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + arm64: + name: Rust on Linux ARM64 + runs-on: ["self-hosted", "asf-arm"] + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Cache Cargo + uses: actions/cache@v4 + with: + # these represent dependencies downloaded by cargo + # and thus do not depend on the OS, arch nor rust version. + path: ~/.cargo + key: ${{ runner.os }}-target-arm64-${{ hashFiles('**/Cargo.lock') }} + + - name: Cache Rust dependencies + uses: actions/cache@v4 + with: + # these represent compiled steps of both dependencies and avro + # and thus are specific for a particular OS, arch and rust version. + path: lang/rust/target + key: ${{ runner.os }}-target-cache1-stable- + + - name: Rust Toolchain + uses: dtolnay/rust-toolchain@nightly + with: + toolchain: stable + components: rustfmt + targets: x86_64-unknown-linux-gnu + + - name: Build + run: | + set -x + ./build.sh test diff --git a/.github/workflows/test-lang-rust-ci.yml b/.github/workflows/test-lang-rust-ci.yml new file mode 100644 index 0000000..9bbd2ba --- /dev/null +++ b/.github/workflows/test-lang-rust-ci.yml @@ -0,0 +1,247 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: Rust Continuous Integration +on: + workflow_dispatch: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +permissions: + contents: read + +env: + RUSTFLAGS: -Dwarnings + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + ci: + runs-on: ubuntu-latest + strategy: + matrix: + rust: + - 'stable' + - 'beta' + - 'nightly' + - '1.73.0' # MSRV + target: + - x86_64-unknown-linux-gnu + - wasm32-unknown-unknown + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Cache Cargo + uses: actions/cache@v4 + with: + # these represent dependencies downloaded by cargo + # and thus do not depend on the OS, arch nor rust version. + path: ~/.cargo + key: ${{ runner.os }}-target-cache1-${{ hashFiles('**/Cargo.lock') }} + - name: Cache Rust dependencies + uses: actions/cache@v4 + with: + # these represent compiled steps of both dependencies and avro + # and thus are specific for a particular OS, arch and rust version. + path: lang/rust/target + key: ${{ runner.os }}-target-cache1-${{ matrix.rust }}-${{ hashFiles('**/Cargo.lock') }} + + - name: Rust Toolchain + uses: dtolnay/rust-toolchain@nightly + with: + toolchain: ${{ matrix.rust }} + components: rustfmt + targets: ${{ matrix.target }} + + - name: Cache cargo-rdme + if: matrix.rust == 'stable' && matrix.target == 'x86_64-unknown-linux-gnu' + uses: actions/cache@v4 + with: + path: ~/.cargo-${{ matrix.rust }}/cargo-rdme + key: cargo-rdme- + + # Check if the doc cumment in avro/src/lib.rs and avro/README.md are in sync. + - name: Run cargo-rdme + # The result is environment independent so one test pattern is enough. + if: matrix.rust == 'stable' && matrix.target == 'x86_64-unknown-linux-gnu' + run: | + cargo install --root ~/.cargo-${{ matrix.rust }}/cargo-rdme --locked cargo-rdme + export PATH=$PATH:~/.cargo-${{ matrix.rust }}/cargo-rdme/bin + cargo rdme --check + + - name: Rust Format + if: matrix.target != 'wasm32-unknown-unknown' + run: cargo fmt --all -- --check + + - name: Rust Build + run: cargo build --all-features --all-targets + + - name: Rust Test + if: matrix.target != 'wasm32-unknown-unknown' + run: cargo test --all-features --target ${{ matrix.target }} + + - name: Rust Test AVRO-3549 + if: matrix.target != 'wasm32-unknown-unknown' + run: cargo test --target ${{ matrix.target }} test_avro_3549_read_not_enabled_codec + + # because of https://github.com/rust-lang/cargo/issues/6669 + - name: Rust Test docs + if: matrix.target != 'wasm32-unknown-unknown' + run: cargo test --doc + + interop: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Rust Toolchain + uses: dtolnay/rust-toolchain@nightly + with: + toolchain: stable + + - name: Cache Cargo + uses: actions/cache@v4 + with: + # these represent dependencies downloaded by cargo + # and thus do not depend on the OS, arch nor rust version. + path: ~/.cargo + key: ${{ runner.os }}-target-cache1-${{ hashFiles('**/Cargo.lock') }} + - name: Cache Rust dependencies + uses: actions/cache@v4 + with: + # these represent compiled steps of both dependencies and avro + # and thus are specific for a particular OS, arch and rust version. + path: lang/rust/target + key: ${{ runner.os }}-target-cache1-stable-${{ hashFiles('**/Cargo.lock') }} + + - name: Cache Local Maven Repository + uses: actions/cache@v4 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + + - name: 'Setup Temurin JDK 8, 11, 17 & 21' + uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 # v4.2.2 + with: + distribution: 'temurin' + java-version: | + 8 + 11 + 17 + 21 + + - name: 'Setup Maven 3.9.6' + uses: stCarolas/setup-maven@d6af6abeda15e98926a57b5aa970a96bb37f97d1 # v5 + with: + maven-version: 3.9.6 + + - name: Install Java Avro for Interop Test + working-directory: . + run: mvn -B install -PskipQuality + + - name: Create Interop Data Directory + working-directory: . + run: mkdir -p build/interop/data + + - name: Generate Interop Resources + working-directory: lang/java/avro + run: mvn -B -P interop-data-generate generate-resources + + - name: Generate interop data + run: ./build.sh interop-data-generate + + - name: Rust reads interop files created by Java and Rust + run: ./build.sh interop-data-test + + - uses: shogo82148/actions-setup-perl@v1 + with: + perl-version: 5.32 + + - name: Install Dependencies + run: | + sudo apt-get -qqy install --no-install-recommends libcompress-raw-zlib-perl \ + libcpan-uploader-perl \ + libencode-perl \ + libio-string-perl \ + libjansson-dev \ + libjson-xs-perl \ + libmodule-install-perl \ + libmodule-install-readmefrompod-perl \ + libobject-tiny-perl \ + libsnappy-dev \ + libtest-exception-perl \ + libtest-pod-perl + cpanm --mirror https://www.cpan.org/ install Compress::Zstd \ + Error::Simple \ + Module::Install::Repository \ + Object::Tiny \ + Regexp::Common \ + Try::Tiny \ + inc::Module::Install + + + - name: Perl reads interop files created by Java and Rust + working-directory: lang/perl + run: ./build.sh interop-data-test + + web-assembly: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Rust Toolchain + uses: dtolnay/rust-toolchain@nightly + with: + toolchain: stable + targets: wasm32-unknown-unknown + + - name: Cache Cargo + uses: actions/cache@v4 + with: + # these represent dependencies downloaded by cargo + # and thus do not depend on the OS, arch nor rust version. + path: ~/.cargo + key: ${{ runner.os }}-target-cache1-${{ hashFiles('**/Cargo.lock') }} + + - name: Cache Rust dependencies + uses: actions/cache@v4 + with: + # these represent compiled steps of both dependencies and avro + # and thus are specific for a particular OS, arch and rust version. + path: lang/rust/target + key: ${{ runner.os }}-target-cache1-stable-${{ hashFiles('**/Cargo.lock') }} + + - name: Install wasm-pack + run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh + + - name: Build the Web Assembly demo app + run: wasm-pack build wasm-demo + + - name: Test the Web Assembly demo app + run: RUST_BACKTRACE=1 wasm-pack test --headless --firefox wasm-demo diff --git a/.github/workflows/test-lang-rust-clippy.yml b/.github/workflows/test-lang-rust-clippy.yml new file mode 100644 index 0000000..2b44ed4 --- /dev/null +++ b/.github/workflows/test-lang-rust-clippy.yml @@ -0,0 +1,50 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: Rust Clippy Check +on: + workflow_dispatch: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +permissions: + contents: read + +env: + RUSTFLAGS: -Dwarnings + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + clippy_check: + runs-on: ubuntu-latest + strategy: + matrix: + rust: + - 'stable' + - '1.73.0' # MSRV + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@nightly + with: + toolchain: ${{ matrix.rust }} + components: clippy + - run: cargo clippy --all-features --all-targets -- -Dclippy::all -Dunused_imports
