name: CI
on:
push:
branches:
- master
pull_request:
branches:
- master
schedule:
- cron: '0 18 * * *'
env:
CARGO_TERM_COLOR: always
jobs:
lint:
name: lint
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- {command: fmt, rust: nightly}
- {command: clippy, rust: stable}
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install Rust (${{matrix.rust}})
uses: actions-rs/toolchain@v1
with: {profile: minimal, toolchain: '${{matrix.rust}}', override: true, components: 'rustfmt, clippy'}
- name: Install HDF5
run: sudo apt-get install libhdf5-dev
- name: Run cargo ${{matrix.command}}
uses: actions-rs/cargo@v1
with:
command: ${{matrix.command}}
args: "${{matrix.command == 'fmt' && '--all -- --check' || '-- -D warnings'}}"
doc: runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
with: {submodules: true}
- name: Install Rust (${{matrix.rust}})
uses: actions-rs/toolchain@v1
with: {toolchain: nightly, profile: minimal, override: true}
- name: Document workspace
run: env RUSTDOCFLAGS="--cfg docsrs" cargo doc --features hdf5-sys/static,hdf5-sys/zlib,blosc,lzf
brew:
name: brew
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
include:
- {version: hdf5@1.8}
- {version: hdf5@1.10}
- {version: hdf5@1.12}
- {version: hdf5-mpi, mpi: true}
steps:
- name: Checkout repository
uses: actions/checkout@v2
with: {submodules: true}
- name: Install Rust (${{matrix.rust}})
uses: actions-rs/toolchain@v1
with: {toolchain: stable, profile: minimal, override: true}
- name: Install HDF5 (${{matrix.version}})
run: brew install ${{matrix.version}}
- name: Build and test all crates
run: |
[ "${{matrix.mpi}}" != "" ] && FEATURES=mpio
cargo test -vv --features="$FEATURES"
conda:
name: conda
runs-on: ${{matrix.os}}-latest
strategy:
fail-fast: false
matrix:
include:
- {os: ubuntu, version: 1.8.16, channel: conda-forge, rust: stable}
- {os: windows, version: 1.8.17, channel: conda-forge, rust: stable}
- {os: macos, version: 1.8.18, channel: anaconda, rust: stable}
- {os: ubuntu, version: 1.8.20, channel: anaconda, rust: beta}
- {os: ubuntu, version: 1.10.1, channel: anaconda, rust: nightly}
- {os: windows, version: 1.10.2, channel: anaconda, rust: beta}
- {os: ubuntu, version: 1.10.3, channel: conda-forge, rust: nightly}
- {os: windows, version: 1.10.4, channel: anaconda, rust: nightly}
- {os: ubuntu, version: 1.10.4, mpi: openmpi, channel: conda-forge, rust: stable}
- {os: ubuntu, version: 1.10.5, channel: conda-forge, rust: beta}
- {os: macos, version: 1.10.5, mpi: openmpi, channel: conda-forge, rust: beta}
- {os: ubuntu, version: 1.10.6, channel: anaconda, rust: stable}
- {os: ubuntu, version: 1.10.6, mpi: mpich, channel: conda-forge, rust: nightly}
- {os: ubuntu, version: 1.12.0, mpi: openmpi, channel: conda-forge, rust: stable}
- {os: macos, version: 1.12.0, channel: conda-forge, rust: stable}
- {os: windows, version: 1.12.0, channel: conda-forge, rust: stable}
- {os: ubuntu, version: 1.12.1, channel: conda-forge, rust: stable}
defaults:
run:
shell: bash -l {0}
steps:
- name: Checkout repository
uses: actions/checkout@v2
with: {submodules: true}
- name: Install Rust (${{matrix.rust}})
uses: actions-rs/toolchain@v1
with: {toolchain: '${{matrix.rust}}', profile: minimal, override: true}
- name: Install conda
uses: conda-incubator/setup-miniconda@v2
with: {auto-update-conda: false, activate-environment: testenv}
- name: Install HDF5 (${{matrix.version}}${{matrix.mpi && '-' || ''}}${{matrix.mpi}})
run: |
[ "${{matrix.mpi}}" != "" ] && MPICC_PKG=${{matrix.mpi}}-mpicc
conda install -y -c ${{matrix.channel}} 'hdf5=${{matrix.version}}=*${{matrix.mpi}}*' $MPICC_PKG
- name: Build and test all crates
run: |
export HDF5_DIR="$CONDA_PREFIX"
[ "${{matrix.mpi}}" != "" ] && FEATURES=mpio
[ "${{runner.os}}" != "Windows" ] && export RUSTFLAGS="-C link-args=-Wl,-rpath,$CONDA_PREFIX/lib"
[ "${{matrix.mpi}}" == "mpich" ] && [ "${{runner.os}}" == "Linux" ] && export MPICH_CC=$(which gcc)
[ "${{matrix.mpi}}" == "openmpi" ] && [ "${{runner.os}}" == "Linux" ] && export OMPI_CC=$(which gcc)
cargo test -vv --features="$FEATURES"
static:
name: static
runs-on: ${{matrix.os}}-latest
strategy:
fail-fast: false
matrix:
include:
- {os: ubuntu, rust: stable}
- {os: windows, rust: stable-msvc}
- {os: windows, rust: stable-gnu}
- {os: macos, rust: stable}
steps:
- name: Checkout repository
uses: actions/checkout@v2
with: {submodules: true}
- name: Install Rust (${{matrix.rust}})
uses: actions-rs/toolchain@v1
with: {toolchain: '${{matrix.rust}}', profile: minimal, override: true}
- name: Build and test all crates
run: cargo test --workspace -v --features hdf5-sys/static,hdf5-sys/zlib --exclude hdf5-derive
- name: Build and test with filters
run: cargo test --workspace -v --features hdf5-sys/static,hdf5-sys/zlib,lzf,blosc --exclude hdf5-derive
if: matrix.rust != 'stable-gnu'
- name: Run examples
run: |
cargo r --example simple --features hdf5-sys/static,hdf5-sys/zlib,lzf,blosc
cargo r --example chunking --features hdf5-sys/static,hdf5-sys/zlib,lzf,blosc
if: matrix.rust != 'stable-gnu'
apt:
name: apt
runs-on: ubuntu-${{matrix.ubuntu}}
strategy:
fail-fast: false
matrix:
include:
- {ubuntu: 18.04, mpi: mpich, rust: beta}
- {ubuntu: 20.04, mpi: openmpi, rust: stable}
steps:
- name: Checkout repository
uses: actions/checkout@v2
with: {submodules: true}
- name: Install Rust (${{matrix.rust}})
uses: actions-rs/toolchain@v1
with: {toolchain: '${{matrix.rust}}', profile: minimal, override: true}
- name: Install HDF5 (${{matrix.mpi}})
run: |
[ "${{matrix.mpi}}" == "mpich" ] && PACKAGES="libhdf5-mpich-dev mpich"
[ "${{matrix.mpi}}" == "openmpi" ] && PACKAGES="libhdf5-openmpi-dev openmpi-bin"
[ "${{matrix.mpi}}" == "serial" ] && PACKAGES="libhdf5-dev"
sudo apt-get install $PACKAGES
- name: Build and test all crates
run: |
[ "${{matrix.mpi}}" != "serial" ] && FEATURES=mpio
cargo test -vv --features="$FEATURES"
- name: Test crate for locking on synchronisation
run: |
[ "${{matrix.mpi}}" != "serial" ] && FEATURES=mpio
cargo test -vv --features="$FEATURES" -- lock_part
cargo test -vv --features="$FEATURES" -- lock_part
cargo test -vv --features="$FEATURES" -- lock_part
msi:
name: msi
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
rust: [stable]
version: ["1.8", "1.10", "1.12"]
steps:
- name: Checkout repository
uses: actions/checkout@v2
with: {submodules: true}
- name: Install Rust (${{matrix.rust}})
uses: actions-rs/toolchain@v1
with: {toolchain: '${{matrix.rust}}', profile: minimal, override: true}
- name: Configure environment
shell: bash
run: |
if [[ "${{matrix.version}}" == "1.8" ]]; then
VERSION=1.8.21
DL_PATH=hdf5-1.8.21-Std-win7_64-vs14.zip
echo "MSI_PATH=hdf\\HDF5-1.8.21-win64.msi" >> $GITHUB_ENV
elif [[ "${{matrix.version}}" == "1.10" ]]; then
VERSION=1.10.0
DL_PATH=windows/extra/hdf5-1.10.0-win64-VS2015-shared.zip
echo "MSI_PATH=hdf5\\HDF5-1.10.0-win64.msi" >> $GITHUB_ENV
else
VERSION=1.12.0
DL_PATH=hdf5-1.12.0-Std-win10_64-vs16.zip
echo "MSI_PATH=hdf\\HDF5-1.12.0-win64.msi" >> $GITHUB_ENV
fi
BASE_URL=https://support.hdfgroup.org/ftp/HDF5/prev-releases
echo "DL_URL=$BASE_URL/hdf5-${{matrix.version}}/hdf5-$VERSION/bin/$DL_PATH" >> $GITHUB_ENV
echo "C:\\Program Files\\HDF_Group\\HDF5\\$VERSION\\bin" >> $GITHUB_PATH
- name: Install HDF5 (${{matrix.version}})
shell: pwsh
run: |
C:\msys64\usr\bin\wget.exe -q -O hdf5.zip ${{env.DL_URL}}
7z x hdf5.zip -y
msiexec /i ${{env.MSI_PATH}} /quiet /qn /norestart
- name: Build and test all crates
run: cargo test -vv
msrv:
name: Minimal Supported Rust Version
runs-on: ubuntu-18.04
strategy:
fail-fast: false
steps:
- name: Checkout repository
uses: actions/checkout@v2
with: {submodules: true}
- name: Install Rust
uses: actions-rs/toolchain@v1
with: {toolchain: 1.51, profile: minimal, override: true}
- name: Build and test all crates
run:
cargo test --workspace -vv --features=hdf5-sys/static --exclude=hdf5-derive
wine:
name: wine
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
with: {submodules: true}
- name: Install Rust
uses: actions-rs/toolchain@v1
with: {toolchain: stable, target: x86_64-pc-windows-gnu, profile: minimal, override: true}
- name: Install dependencies
run: sudo apt-get update && sudo apt install wine64 mingw-w64
- name: Build and test
run: env CARGO_TARGET_X86_64_PC_WINDOWS_GNU_RUNNER=wine64 cargo test --features hdf5-sys/static --target x86_64-pc-windows-gnu -- --skip test_compile_fail
addr_san:
name: Address sanitizer
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
with: {submodules: true}
- name: Install Rust
uses: actions-rs/toolchain@v1
with: {toolchain: nightly, profile: minimal, override: true}
- name: Run test with sanitizer
run: env RUSTFLAGS="-Z sanitizer=address" cargo test --features hdf5-sys/static --target x86_64-unknown-linux-gnu --workspace --exclude hdf5-derive