# 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
          # run test on arrow with minimal set of features
          cargo test --no-default-features
          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 are disabled until they runs cleanly:
  # https://github.com/apache/arrow-rs/issues/345
  #
  # 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
  #         # Currently only the arrow crate is tested with miri
  #         # IO related tests and some unsupported tests are skipped
  #         cargo miri test -p arrow -- --skip csv --skip ipc --skip json || 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
