Rust checks #7321
This file contains hidden or 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: [latest] | |
tags: | |
- 'r*' | |
pull_request: | |
schedule: | |
- cron: "0 0 * * *" # daily | |
env: | |
PIXI_VERSION: "v0.53.0" | |
jobs: | |
check: | |
name: Check | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v5 | |
- name: set up pixi | |
uses: prefix-dev/[email protected] | |
with: | |
pixi-version: ${{ env.PIXI_VERSION }} | |
cache: true | |
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'latest' }} | |
frozen: true | |
- uses: Swatinem/rust-cache@v2 | |
- name: Run cargo check | |
run: | | |
pixi run cargo check | |
test: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
build: [beta, stable, windows, macos] | |
include: | |
- build: macos | |
os: macos-latest | |
rust: stable | |
continue: false | |
- build: windows | |
os: windows-latest | |
rust: stable | |
continue: true | |
- build: beta | |
os: ubuntu-latest | |
rust: beta | |
continue: false | |
- build: stable | |
os: ubuntu-latest | |
rust: stable | |
continue: false | |
steps: | |
- uses: actions/checkout@v5 | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
- uses: Swatinem/rust-cache@v2 | |
- uses: taiki-e/install-action@nextest | |
- name: Run tests | |
run: | | |
cargo nextest run | |
test_all_features: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v5 | |
- name: set up pixi | |
uses: prefix-dev/[email protected] | |
with: | |
pixi-version: ${{ env.PIXI_VERSION }} | |
cache: true | |
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'latest' }} | |
frozen: true | |
- uses: Swatinem/rust-cache@v2 | |
- name: Run tests for all feature combinations | |
run: pixi run check-features | |
coverage: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v5 | |
- name: set up pixi | |
uses: prefix-dev/[email protected] | |
with: | |
pixi-version: ${{ env.PIXI_VERSION }} | |
cache: true | |
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'latest' }} | |
frozen: true | |
- uses: Swatinem/rust-cache@v2 | |
- name: Collect coverage data | |
run: pixi run coverage-rust | |
- name: Upload Rust coverage to codecov | |
uses: codecov/codecov-action@v3 | |
with: | |
flags: rust | |
fail_ci_if_error: true | |
files: lcov.info | |
lints: | |
name: Lints | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
build: [beta, stable] | |
include: | |
- build: beta | |
rust: beta | |
- build: stable | |
rust: stable | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v5 | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
components: "clippy, rustfmt" | |
- uses: Swatinem/rust-cache@v2 | |
- name: Run cargo fmt | |
run: | | |
cargo fmt --all -- --check | |
- name: Run cargo clippy | |
run: | | |
cargo clippy --all -- -D warnings | |
wasm-pack: | |
name: Check if wasm-pack builds a valid package for the sourmash crate | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v5 | |
- name: set up pixi | |
uses: prefix-dev/[email protected] | |
with: | |
pixi-version: ${{ env.PIXI_VERSION }} | |
cache: true | |
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'latest' }} | |
frozen: true | |
- uses: Swatinem/rust-cache@v2 | |
- name: run wasm tests | |
continue-on-error: true ## TODO: remove this when tests works again... | |
run: pixi run -e wasm test-wasm | |
- name: run wasm-pack build | |
run: pixi run -e wasm build-wasm | |
- name: Prepare package for NPM publishing | |
run: pixi run -e wasm pack-npm | |
- name: Publish to NPM | |
if: startsWith(github.ref, 'refs/tags/r') | |
run: pixi run -e wasm publish-npm | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- uses: actions/upload-artifact@v4 | |
with: | |
path: 'pkg/sourmash*.tgz' | |
publish: | |
name: Publish (on tags, dry-run otherwise) | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v5 | |
- name: set up pixi | |
uses: prefix-dev/[email protected] | |
with: | |
pixi-version: ${{ env.PIXI_VERSION }} | |
cache: true | |
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'latest' }} | |
frozen: true | |
- uses: Swatinem/rust-cache@v2 | |
- name: Check semver | |
run: pixi run semver-check | |
- name: Make sure we can publish the sourmash crate | |
run: pixi run cargo publish --dry-run --manifest-path src/core/Cargo.toml | |
# Login to crates.io on tags | |
- name: login to crates.io | |
if: startsWith(github.ref, 'refs/tags/r') | |
run: pixi run cargo login ${{ secrets.CRATES_IO_TOKEN }} | |
# Publish to crates.io on tags | |
- name: Publish to crates.io | |
if: startsWith(github.ref, 'refs/tags/r') | |
run: pixi run cargo publish --manifest-path src/core/Cargo.toml | |
minimum_rust_version: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v5 | |
- name: set up pixi | |
uses: prefix-dev/[email protected] | |
with: | |
pixi-version: ${{ env.PIXI_VERSION }} | |
cache: true | |
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'latest' }} | |
frozen: true | |
- uses: Swatinem/rust-cache@v2 | |
- name: check if README matches MSRV defined here | |
run: grep '1.74.0' src/core/README.md | |
- name: Check if it builds properly | |
run: pixi run check-msrv | |
check_cbindgen: | |
name: "Check if cbindgen runs cleanly for generating the C headers" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v5 | |
- name: set up pixi | |
uses: prefix-dev/[email protected] | |
with: | |
pixi-version: ${{ env.PIXI_VERSION }} | |
cache: true | |
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'latest' }} | |
frozen: true | |
- uses: Swatinem/rust-cache@v2 | |
- run: pixi run cbindgen-generate | |
- name: check if headers have the same content | |
run: | | |
git update-index --refresh | |
git diff | |
git diff-index --quiet HEAD -- include/sourmash.h || echo "::error file=include/sourmash.h::Header doesn't match committed file, did you forget to rerun cbindgen?" |