--- name: CI on: push: branches: - master pull_request: types: - opened - reopened - synchronize branches: - master schedule: - cron: '0 0 15 * *' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: CARGO_TERM_COLOR: always jobs: typos: name: Spell checking (typos) runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Check spelling uses: crate-ci/typos@f12cee1d8f3c79282a98ecb41d235aef17dfa8fd # v1.25.0 format-and-clippy: name: rustfmt runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: {submodules: true} - name: Install netCDF run: sudo apt-get update && sudo apt-get install libnetcdf-dev - name: Install rust uses: dtolnay/rust-toolchain@stable with: toolchain: stable components: rustfmt, clippy - name: Check formatting run: cargo fmt -- --check - name: Documentation run: cargo doc --workspace --features netcdf/derive --exclude netcdf-src - name: Clippy run: cargo clippy --features netcdf/derive --workspace --exclude netcdf-src -- -D warnings test_apt: name: test apt runs-on: ubuntu-latest strategy: matrix: build: - stable - beta - nightly include: - build: stable rust: stable - build: beta rust: beta - build: nightly rust: nightly steps: - name: Checkout repository uses: actions/checkout@v4 with: {submodules: false} - name: Install netcdf run: sudo apt-get update && sudo apt-get install libnetcdf-dev - name: Install rust uses: dtolnay/rust-toolchain@stable with: toolchain: ${{ matrix.rust }} - name: Build run: cargo build --verbose --features netcdf/derive --workspace --exclude netcdf-src - name: Test run: cargo test --verbose --features netcdf/derive --workspace --exclude netcdf-src --exclude netcdf-derive conda: name: conda runs-on: ${{matrix.os}}-latest strategy: fail-fast: false matrix: include: - {os: ubuntu, channel: conda-forge, rust: stable} - {os: windows, channel: conda-forge, rust: stable} - {os: macos, channel: conda-forge, rust: stable} defaults: run: shell: bash -l {0} steps: - name: Checkout repository uses: actions/checkout@v4 with: {submodules: false} - name: Install Rust (${{matrix.rust}}) uses: dtolnay/rust-toolchain@stable with: {toolchain: '${{matrix.rust}}'} - name: Install conda uses: conda-incubator/setup-miniconda@v3 with: {auto-update-conda: false, activate-environment: testenv} - name: Install netCDF run: conda install -y -c ${{matrix.channel}} libnetcdf=4.8.1 - name: Build and test run: | export HDF5_DIR="$CONDA_PREFIX" export NETCDF_DIR="$CONDA_PREFIX" [ "${{runner.os}}" != "Windows" ] && export RUSTFLAGS="-C link-args=-Wl,-rpath,$CONDA_PREFIX/lib" cargo test -vv --workspace --exclude netcdf-src --exclude netcdf-derive --features netcdf/derive static_builds: name: static builds runs-on: ${{matrix.os}} strategy: fail-fast: false matrix: include: - {os: ubuntu-latest, rust: stable} - {os: windows-latest, rust: stable-msvc} # - {os: windows-latest, rust: stable-gnu} # failing with vasprintf missing - {os: macos-14, rust: stable} - {os: macos-latest, rust: stable} defaults: run: shell: bash -l {0} steps: - name: Checkout repository uses: actions/checkout@v4 with: {submodules: true} - name: Install Rust (${{matrix.rust}}) uses: dtolnay/rust-toolchain@stable with: {toolchain: '${{matrix.rust}}'} - name: Set target version for macos-13 run: | echo "MACOSX_DEPLOYMENT_TARGET=13.7" >> $GITHUB_ENV if : ${{ matrix.os == 'macos-13' }} - name: Build and test run: cargo test -vv --features netcdf/derive,static --workspace --exclude netcdf-derive addr_san: name: Address sanitizer runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: {submodules: true} - name: Install Rust uses: dtolnay/rust-toolchain@stable with: {toolchain: nightly} - name: Run test with sanitizer env: RUSTFLAGS: "-Z sanitizer=address" RUSTDOCFLAGS: "-Z sanitizer=address" run: cargo test --features netcdf-sys/static,netcdf/derive --target x86_64-unknown-linux-gnu --workspace --exclude netcdf-derive mpi: name: mpi-runner runs-on: ubuntu-latest env: NETCDF_DIR: /usr/lib/x86_64-linux-gnu/netcdf/mpi/ steps: - name: Checkout repository uses: actions/checkout@v4 with: {submodules: false} - name: Install netcdf run: sudo apt-get update && sudo apt-get install libnetcdf-mpi-dev libhdf5-openmpi-dev - name: Install rust uses: dtolnay/rust-toolchain@stable with: toolchain: "nightly" - name: Build run: cargo build --verbose --workspace --exclude netcdf-src --features netcdf/mpi,derive - name: Test run: cargo test --verbose --workspace --exclude netcdf-src --features netcdf/mpi,derive - name: Run example run: cargo run --verbose --package netcdf-examples --features mpi - name: Run example in parallel run: mpirun -np 10 --oversubscribe -- target/debug/netcdf-examples