Rust checks #639
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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@v2 | |
- 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@v2 | |
- 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, windows-latest, ubuntu-latest] | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
override: true | |
- name: Get Rust Version | |
id: rust-version | |
run: echo "::set-output name=version::$(cargo -V | head -n1 | awk '{print $2}')" | |
- uses: actions/cache@v2 | |
with: | |
path: | | |
~/.cargo/git | |
~/.cargo/registry | |
target | |
key: ${{ runner.os }}-cargo-${{ steps.rust-version.outputs.version }} | |
- name: Install cargo-c (linux) | |
if: startsWith(matrix.os, 'ubuntu') | |
env: | |
LINK: https://github.com/lu-zero/cargo-c/releases/download | |
CARGO_C_VERSION: 0.8.0 | |
run: | | |
curl -L "$LINK/v$CARGO_C_VERSION/cargo-c-linux.tar.gz" | | |
tar xz -C $HOME/.cargo/bin | |
- name: Install cargo-c (macos) | |
if: startsWith(matrix.os, 'macos') | |
env: | |
LINK: https://github.com/lu-zero/cargo-c/releases/download | |
CARGO_C_VERSION: 0.8.0 | |
run: | | |
curl -LO "$LINK/v$CARGO_C_VERSION/cargo-c-macos.zip" | |
7z e -y "cargo-c-macos.zip" -o$HOME/.cargo/bin | |
- name: Install cargo-c (win) | |
if: startsWith(matrix.os, 'windows') | |
run: | | |
$LINK = "https://github.com/lu-zero/cargo-c/releases/download/v0.8.0" | |
$CARGO_C_FILE = "cargo-c-windows-msvc" | |
curl -LO "$LINK/$CARGO_C_FILE.zip" | |
7z e -y "$CARGO_C_FILE.zip" -o"${env:USERPROFILE}\.cargo\bin" | |
- name: Build C API | |
run: | | |
cargo cbuild --verbose --release | |
- name: Run C API tests | |
run: | | |
cargo capi test --verbose --release | |
- name: Install into temporary location | |
if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu') | |
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 $(pkg-config --cflags gsw) | xargs`" = "-I/usr/local/include" | |
test "`echo $(pkg-config --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: | | |
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@v2 | |
- uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
target: ${{ matrix.target }} | |
override: true | |
- 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@v2 | |
- 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@v2 | |
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@v2 | |
with: | |
submodules: 'recursive' | |
- name: Install stable toolchain | |
uses: actions-rs/toolchain@v1 | |
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@v2 | |
- 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@v2 | |
- name: check if README matches MSRV defined here | |
run: grep '1.68.0' README.md | |
- uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: 1.68.0 | |
override: true | |
- name: Check if it builds | |
uses: actions-rs/cargo@v1 | |
with: | |
command: build | |
publish: | |
name: Publish (dry-run) | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
- name: Install stable toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: stable | |
override: true | |
- name: Make sure we can publish | |
uses: actions-rs/cargo@v1 | |
with: | |
command: publish | |
args: --dry-run |