name: Rust
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
env:
CARGO_TERM_COLOR: always
jobs:
minimal-rustc-version:
name: minimal-rustc-version
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install latest nightly
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
- uses: Swatinem/rust-cache@v1
- name: Install cargo-hack
run: cargo install cargo-hack
- name: "check --all-features -Z minimal-versions"
run: |
# Remove dev-dependencies from Cargo.toml to prevent the next `cargo update`
# from determining minimal versions based on dev-dependencies.
cargo hack --remove-dev-deps --workspace
# Update Cargo.lock to minimal version dependencies.
cargo update -Z minimal-versions
cargo hack check --all-features --ignore-private
- name: "check --all-features --unstable -Z minimal-versions"
run: |
# Remove dev-dependencies from Cargo.toml to prevent the next `cargo update`
# from determining minimal versions based on dev-dependencies.
cargo hack --remove-dev-deps --workspace
# Update Cargo.lock to minimal version dependencies.
cargo update -Z minimal-versions
cargo hack check --all-features --ignore-private
doc:
name: doc
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install Rust nightly
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
- uses: Swatinem/rust-cache@v1
- name: "doc --lib --all-features"
run: cargo doc --lib --no-deps --all-features --document-private-items
env:
RUSTFLAGS: --cfg docsrs
RUSTDOCFLAGS: --cfg docsrs -Dwarnings
fmt:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install latest stable
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
components: rustfmt
- name: Check code format
run: cargo fmt --all -- --check
clippy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install latest stable
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
components: clippy
- name: Check lints
run: cargo clippy --all --tests --all-features
stable-build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install latest stable
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
components: rustfmt, clippy
- name: Build debug
run: cargo build --verbose
- name: Build release
run: cargo build --release --verbose
- uses: actions/upload-artifact@master
with:
name: cargo-artefacts
path: target
nightly-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install latest nightly
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
components: rustfmt, clippy
- name: Build debug
run: cargo build --verbose
- name: Build release
run: cargo build --release --verbose
- uses: actions/upload-artifact@master
with:
name: nightly-cargo-artefacts
path: target
beta-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install latest beta
uses: actions-rs/toolchain@v1
with:
toolchain: beta
override: true
components: rustfmt, clippy
- name: Build debug
run: cargo build --verbose
- name: Build release
run: cargo build --release --verbose
- uses: actions/upload-artifact@master
with:
name: nightly-cargo-artefacts
path: target
stable-tests:
runs-on: ubuntu-latest
needs: ['stable-build']
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install latest stable
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
components: rustfmt, clippy
- uses: actions/download-artifact@master
with:
name: cargo-artefacts
path: target
- name: Cargo test debug
run: cargo test --all-features
- name: Cargo test release
run: cargo test --release --all-features
nightly-tests:
runs-on: ubuntu-latest
needs: ['nightly-build']
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install latest nightly
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
components: rustfmt, clippy
- uses: actions/download-artifact@master
with:
name: nightly-cargo-artefacts
path: target
- name: Cargo test debug
run: cargo test --all-features
- name: Cargo test release
run: cargo test --release --all-features
beta-tests:
runs-on: ubuntu-latest
needs: ['beta-build']
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install latest nightly
uses: actions-rs/toolchain@v1
with:
toolchain: beta
override: true
components: rustfmt, clippy
- uses: actions/download-artifact@master
with:
name: nightly-cargo-artefacts
path: target
- name: Cargo test debug
run: cargo test --all-features
- name: Cargo test release
run: cargo test --release --all-features
bench:
runs-on: ubuntu-latest
needs: ["stable-tests"]
steps:
- name: Checkout repository
uses: actions/checkout@v2
- uses: actions/download-artifact@master
with:
name: nightly-cargo-artefacts
path: target
- name: Install latest nightly
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
- name: Run benchmark
run: cargo +nightly bench --all-features -- --include-ignored | tee bench.txt
- name: Archive code coverage results
uses: actions/upload-artifact@v1
with:
name: benchmarks
path: bench.txt