| # 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 |
| |
| on: |
| # always trigger |
| push: |
| pull_request: |
| |
| jobs: |
| |
| # build the library, a compilation step used by multiple steps below |
| linux-build-lib: |
| name: Build Libraries on AMD64 Rust ${{ matrix.rust }} |
| runs-on: ubuntu-latest |
| strategy: |
| matrix: |
| arch: [amd64] |
| rust: [stable] |
| container: |
| image: ${{ matrix.arch }}/rust |
| env: |
| # Disable full debug symbol generation to speed up CI build and keep memory down |
| # "1" means line tables only, which is useful for panic tracebacks. |
| RUSTFLAGS: "-C debuginfo=1" |
| steps: |
| - uses: actions/checkout@v2 |
| - name: Cache Cargo |
| uses: actions/cache@v2 |
| with: |
| # these represent dependencies downloaded by cargo |
| # and thus do not depend on the OS, arch nor rust version. |
| path: /github/home/.cargo |
| key: cargo-cache- |
| - name: Cache Rust dependencies |
| uses: actions/cache@v2 |
| with: |
| # these represent compiled steps of both dependencies and arrow |
| # and thus are specific for a particular OS, arch and rust version. |
| path: /github/home/target |
| key: ${{ runner.os }}-${{ matrix.arch }}-target-cache-${{ matrix.rust }}- |
| - name: Setup Rust toolchain |
| run: | |
| rustup toolchain install ${{ matrix.rust }} |
| rustup default ${{ matrix.rust }} |
| rustup component add rustfmt |
| - name: Build Workspace |
| run: | |
| export CARGO_HOME="/github/home/.cargo" |
| export CARGO_TARGET_DIR="/github/home/target" |
| cargo build |
| |
| # test the crate |
| linux-test: |
| name: Test Workspace on AMD64 Rust ${{ matrix.rust }} |
| needs: [linux-build-lib] |
| runs-on: ubuntu-latest |
| strategy: |
| matrix: |
| arch: [amd64] |
| rust: [stable] |
| container: |
| image: ${{ matrix.arch }}/rust |
| env: |
| # Disable full debug symbol generation to speed up CI build and keep memory down |
| # "1" means line tables only, which is useful for panic tracebacks. |
| RUSTFLAGS: "-C debuginfo=1" |
| ARROW_TEST_DATA: /__w/arrow-rs/arrow-rs/testing/data |
| PARQUET_TEST_DATA: /__w/arrow-rs/arrow-rs/parquet-testing/data |
| steps: |
| - uses: actions/checkout@v2 |
| with: |
| submodules: true |
| - name: Cache Cargo |
| uses: actions/cache@v2 |
| with: |
| path: /github/home/.cargo |
| # this key equals the ones on `linux-build-lib` for re-use |
| key: cargo-cache- |
| - name: Cache Rust dependencies |
| uses: actions/cache@v2 |
| with: |
| path: /github/home/target |
| # this key equals the ones on `linux-build-lib` for re-use |
| key: ${{ runner.os }}-${{ matrix.arch }}-target-cache-${{ matrix.rust }} |
| - name: Setup Rust toolchain |
| run: | |
| rustup toolchain install ${{ matrix.rust }} |
| rustup default ${{ matrix.rust }} |
| rustup component add rustfmt |
| - name: Run tests |
| run: | |
| export CARGO_HOME="/github/home/.cargo" |
| export CARGO_TARGET_DIR="/github/home/target" |
| # run tests on all workspace members with default feature list |
| cargo test |
| |
| windows-and-macos: |
| name: Test on ${{ matrix.os }} Rust ${{ matrix.rust }} |
| runs-on: ${{ matrix.os }} |
| strategy: |
| matrix: |
| os: [windows-latest, macos-latest] |
| rust: [stable] |
| steps: |
| - uses: actions/checkout@v2 |
| with: |
| submodules: true |
| # TODO: this won't cache anything, which is expensive. Setup this action |
| # with a OS-dependent path. |
| - name: Setup Rust toolchain |
| run: | |
| rustup toolchain install ${{ matrix.rust }} |
| rustup default ${{ matrix.rust }} |
| rustup component add rustfmt |
| - name: Run tests |
| shell: bash |
| run: | |
| export ARROW_TEST_DATA=$(pwd)/testing/data |
| export PARQUET_TEST_DATA=$(pwd)/parquet-testing/data |
| # do not produce debug symbols to keep memory usage down |
| export RUSTFLAGS="-C debuginfo=0" |
| cargo test |
| |
| clippy: |
| name: Clippy |
| needs: [linux-build-lib] |
| runs-on: ubuntu-latest |
| strategy: |
| matrix: |
| arch: [amd64] |
| rust: [stable] |
| container: |
| image: ${{ matrix.arch }}/rust |
| env: |
| # Disable full debug symbol generation to speed up CI build and keep memory down |
| # "1" means line tables only, which is useful for panic tracebacks. |
| RUSTFLAGS: "-C debuginfo=1" |
| steps: |
| - uses: actions/checkout@v2 |
| with: |
| submodules: true |
| - name: Cache Cargo |
| uses: actions/cache@v2 |
| with: |
| path: /github/home/.cargo |
| # this key equals the ones on `linux-build-lib` for re-use |
| key: cargo-cache- |
| - name: Cache Rust dependencies |
| uses: actions/cache@v2 |
| with: |
| path: /github/home/target |
| # this key equals the ones on `linux-build-lib` for re-use |
| key: ${{ runner.os }}-${{ matrix.arch }}-target-cache-${{ matrix.rust }} |
| - name: Setup Rust toolchain |
| run: | |
| rustup toolchain install ${{ matrix.rust }} |
| rustup default ${{ matrix.rust }} |
| rustup component add rustfmt clippy |
| - name: Run clippy |
| run: | |
| export CARGO_HOME="/github/home/.cargo" |
| export CARGO_TARGET_DIR="/github/home/target" |
| cargo clippy --all-targets --workspace -- -D warnings -A clippy::redundant_field_names |
| |
| lint: |
| name: Lint |
| runs-on: ubuntu-latest |
| container: |
| image: amd64/rust |
| steps: |
| - uses: actions/checkout@v2 |
| - name: Setup toolchain |
| run: | |
| rustup toolchain install stable |
| rustup default stable |
| rustup component add rustfmt |
| - name: Run |
| run: cargo fmt --all -- --check |
| coverage: |
| name: Coverage |
| runs-on: ubuntu-latest |
| strategy: |
| matrix: |
| arch: [amd64] |
| rust: [stable] |
| steps: |
| - uses: actions/checkout@v2 |
| with: |
| submodules: true |
| - name: Cache Cargo |
| uses: actions/cache@v2 |
| with: |
| path: /home/runner/.cargo |
| # this key is not equal because the user is different than on a container (runner vs github) |
| key: cargo-coverage-cache- |
| - name: Cache Rust dependencies |
| uses: actions/cache@v2 |
| with: |
| path: /home/runner/target |
| # this key is not equal because coverage uses different compilation flags. |
| key: ${{ runner.os }}-${{ matrix.arch }}-target-coverage-cache-${{ matrix.rust }}- |
| - name: Run coverage |
| run: | |
| export CARGO_HOME="/home/runner/.cargo" |
| export CARGO_TARGET_DIR="/home/runner/target" |
| |
| export ARROW_TEST_DATA=$(pwd)/testing/data |
| export PARQUET_TEST_DATA=$(pwd)/parquet-testing/data |
| |
| # 2020-11-15: There is a cargo-tarpaulin regression in 0.17.0 |
| # see https://github.com/xd009642/tarpaulin/issues/618 |
| cargo install --version 0.16.0 cargo-tarpaulin |
| cargo tarpaulin --out Xml |
| - name: Report coverage |
| continue-on-error: true |
| run: bash <(curl -s https://codecov.io/bash) |