gsw 0.2.3

TEOS-10 v3.06.12 Gibbs Seawater Oceanographic Toolbox in Rust
Documentation
name: Rust checks

on:
  push:
    branches: [main]
  pull_request:
  schedule:
    - cron: '0 5 * * 5'

jobs:
  check:
    name: Check
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4

      - name: Install stable toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true

      - name: Run cargo check
        uses: actions-rs/cargo@v1
        with:
          command: check

  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        build: [beta, stable, windows, macos]
        include:
          - build: macos
            os: macos-latest
            rust: stable
          - build: windows
            os: windows-latest
            rust: stable
          - build: beta
            os: ubuntu-latest
            rust: beta
          - build: stable
            os: ubuntu-latest
            rust: stable
    steps:
      - uses: actions/checkout@v4

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.rust }}
          override: true

      - name: Run tests
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --no-fail-fast

  test_c_api:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, ubuntu-latest]
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: prefix-dev/setup-pixi@v0.8.1
        with:
          pixi-version: v0.34.0
          cache: true
          frozen: true

      - name: Build C API
        run: |
          pixi run cargo cbuild --verbose --release

      - name: Run C API tests
        run: |
          pixi run cargo capi test --verbose --release

      - name: Install into temporary location
        if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu')
        run: |
          pixi run cargo cinstall --verbose --release --destdir=temp

      - name: Copy installed files to /usr/local
        if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu')
        run: |
          sudo cp -r temp/usr/local/* /usr/local/

#      - name: Test pkg-config
#        if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu')
#        run: |
#          set -x
#          test "`echo $(pixi run pkgconf --cflags gsw) | xargs`" = "-I/usr/local/include"
#          test "`echo $(pixi run pkgconf --libs gsw) | xargs`" = "-L/usr/local/lib -lgsw"

#      - name: Update dynamic linker cache
#        if: startsWith(matrix.os, 'ubuntu')
#        run: |
#          sudo ldconfig
#
#      - name: Test usage from C (using Makefile)
#        if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu')
#        working-directory: examples/usage-from-c
#        run: |
#          pixi run make

  cross_testing:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        target: [
          aarch64-unknown-linux-gnu,
          powerpc64le-unknown-linux-gnu,
          s390x-unknown-linux-gnu,
        ]
    steps:
      - uses: actions/checkout@v4

      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: stable
          targets: ${{ matrix.target }}

      - name: Run tests
        uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: test
          args: --target ${{ matrix.target }} --no-fail-fast --

  coverage:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          override: true

      - name: Get Rust Version
        id: rust-version
        run: echo "::set-output name=version::$(cargo -V | head -n1 | awk '{print $2}')"

      - name: Get Tarpaulin Version
        id: tarpaulin-version
        run: echo "::set-output name=version::$(wget -qO- 'https://api.github.com/repos/xd009642/tarpaulin/releases/latest' | jq -r '.tag_name')"

      - uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/bin/cargo-tarpaulin
            ~/.cargo/git
            ~/.cargo/registry
            target
          key: ${{ runner.os }}-cargo-${{ steps.rust-version.outputs.version }}-tarpaulin-${{ steps.tarpaulin-version.outputs.version }} }}

      - name: Install Tarpaulin
        run: |
          test -e ~/.cargo/bin/cargo-tarpaulin || cargo install cargo-tarpaulin --version ${{ steps.tarpaulin-version.outputs.version }}

      - name: Run cargo-tarpaulin
        run: cargo tarpaulin --timeout 600 --out Xml -- --test-threads 1

      - name: Upload coverage to codecov
        uses: codecov/codecov-action@v3

  lints:
    name: Lints
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
        with:
          submodules: 'recursive'

      - name: Install stable toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          profile: minimal
          toolchain: stable
          override: true
          components: rustfmt, clippy

      - name: Run cargo fmt
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --all -- --check

      - name: Run cargo clippy
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --all-features --tests -- -D warnings

  check_cbindgen:
    name: "Check if cbindgen runs cleanly for generating the C headers"
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true

      - run: cargo build --features cbindgen

      - name: check if headers have the same content
        run: |
          git update-index --refresh
          git diff
          git diff-index --quiet HEAD -- assets/gswteos-10.h || echo "::error file=assets/gswteos-10.h::Header doesn't match committed file, did you forget to rerun cbindgen?"

  minimum_rust_version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: check if README matches MSRV defined here
        run: grep '1.74.0' README.md

      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: 1.74.0

      - name: Check if it builds
        run: cargo build

  publish:
    name: Publish (dry-run)
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4

      - uses: prefix-dev/setup-pixi@v0.8.1
        with:
          pixi-version: v0.34.0
          cache: true
          frozen: true

      - name: Make sure we can publish
        run: pixi run cargo publish --dry-run