| # 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 |
| cd arrow |
| # re-run tests on arrow workspace with additional features |
| cargo test --features=prettyprint |
| cargo run --example builders |
| cargo run --example dynamic_types |
| cargo run --example read_csv |
| cargo run --example read_csv_infer_schema |
| |
| # test the --features "simd" of the arrow crate. This requires nightly. |
| linux-test-simd: |
| name: Test SIMD on AMD64 Rust ${{ matrix.rust }} |
| runs-on: ubuntu-latest |
| strategy: |
| matrix: |
| arch: [amd64] |
| rust: [nightly-2021-03-24] |
| 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 |
| 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" |
| cd arrow |
| cargo test --features "simd" |
| |
| 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 |
| |
| miri-checks: |
| name: MIRI |
| runs-on: ubuntu-latest |
| strategy: |
| matrix: |
| arch: [amd64] |
| rust: [nightly-2021-03-24] |
| steps: |
| - uses: actions/checkout@v2 |
| with: |
| submodules: true |
| - uses: actions/cache@v2 |
| with: |
| path: | |
| ~/.cargo/registry |
| ~/.cargo/git |
| target |
| key: ${{ runner.os }}-cargo-miri-${{ hashFiles('**/Cargo.lock') }} |
| - name: Setup Rust toolchain |
| run: | |
| rustup toolchain install ${{ matrix.rust }} |
| rustup default ${{ matrix.rust }} |
| rustup component add rustfmt clippy miri |
| - name: Run Miri Checks |
| env: |
| RUST_BACKTRACE: full |
| RUST_LOG: 'trace' |
| run: | |
| export MIRIFLAGS="-Zmiri-disable-isolation" |
| cargo miri setup |
| cargo clean |
| # Ignore MIRI errors until we can get a clean run |
| cargo miri test || true |
| |
| 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) |
| |
| # test FFI against the C-Data interface exposed by pyarrow |
| pyarrow-integration-test: |
| name: Test Pyarrow C Data Interface |
| runs-on: ubuntu-latest |
| strategy: |
| matrix: |
| rust: [stable] |
| steps: |
| - uses: actions/checkout@v2 |
| with: |
| submodules: true |
| - name: Setup Rust toolchain |
| run: | |
| rustup toolchain install ${{ matrix.rust }} |
| rustup default ${{ matrix.rust }} |
| rustup component add rustfmt clippy |
| - name: Cache Cargo |
| uses: actions/cache@v2 |
| with: |
| path: /home/runner/.cargo |
| key: cargo-maturin-cache- |
| - name: Cache Rust dependencies |
| uses: actions/cache@v2 |
| with: |
| path: /home/runner/target |
| # this key is not equal because maturin uses different compilation flags. |
| key: ${{ runner.os }}-${{ matrix.arch }}-target-maturin-cache-${{ matrix.rust }}- |
| - uses: actions/setup-python@v2 |
| with: |
| python-version: '3.7' |
| - name: Install Python dependencies |
| run: python -m pip install --upgrade pip setuptools wheel |
| - name: Run tests |
| run: | |
| export CARGO_HOME="/home/runner/.cargo" |
| export CARGO_TARGET_DIR="/home/runner/target" |
| |
| cd arrow-pyarrow-integration-testing |
| |
| python -m venv venv |
| source venv/bin/activate |
| |
| pip install maturin==0.8.2 toml==0.10.1 pyarrow==1.0.0 |
| maturin develop |
| python -m unittest discover tests |
| |
| # test the arrow crate builds against wasm32 in stable rust |
| wasm32-build: |
| name: Build wasm32 on AMD64 Rust ${{ matrix.rust }} |
| runs-on: ubuntu-latest |
| strategy: |
| matrix: |
| arch: [amd64] |
| rust: [nightly-2021-03-24] |
| 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/arrow/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 |
| key: ${{ runner.os }}-${{ matrix.arch }}-target-wasm32-cache-${{ matrix.rust }} |
| - name: Setup Rust toolchain |
| run: | |
| rustup toolchain install ${{ matrix.rust }} |
| rustup override set ${{ matrix.rust }} |
| rustup component add rustfmt |
| rustup target add wasm32-unknown-unknown |
| - name: Build arrow crate |
| run: | |
| export CARGO_HOME="/github/home/.cargo" |
| export CARGO_TARGET_DIR="/github/home/target" |
| cd arrow |
| cargo build --target wasm32-unknown-unknown |
| |
| # test the projects can build without default features |
| default-build: |
| name: Check No Defaults 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" |
| ARROW_TEST_DATA: /__w/arrow-rs/arrow-rs/testing/data |
| PARQUET_TEST_DATA: /__w/arrow/arrow/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 |
| key: ${{ runner.os }}-${{ matrix.arch }}-target-wasm32-cache-${{ matrix.rust }} |
| - name: Setup Rust toolchain |
| run: | |
| rustup toolchain install ${{ matrix.rust }} |
| rustup override set ${{ matrix.rust }} |
| rustup component add rustfmt |
| - name: Build arrow crate |
| run: | |
| export CARGO_HOME="/github/home/.cargo" |
| export CARGO_TARGET_DIR="/github/home/target" |
| cd arrow |
| cargo check --all-targets --no-default-features |