Skip to content

Load config from well-known locations + add init command for initializing config #1889

Load config from well-known locations + add init command for initializing config

Load config from well-known locations + add init command for initializing config #1889

name: 🧪 Tests and Checks
on:
push:
branches: [main]
pull_request:
branches: ["**"]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_INCREMENTAL: 0
RUST_BACKTRACE: short
jobs:
changes:
runs-on: ubuntu-latest
permissions:
pull-requests: read
outputs:
examples: ${{ steps.filter.outputs.examples }}
rust: ${{ steps.filter.outputs.rust }}
deny: ${{ steps.filter.outputs.deny }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
examples:
- 'examples/**'
rust:
- '**/Cargo.*'
- '**/src/**'
- '**/tests/**'
- '**/build.rs'
- '**/migrations/**'
- '**/fixtures/**'
- '**/wit/**'
deny:
- 'deny.toml'
run-checks:
needs: changes
if: ${{ needs.changes.outputs.rust == 'true' }}
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-14, windows-latest]
rust-toolchain: [stable, nightly, 1.75.0]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Use mold-linker
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: rui314/setup-mold@v1
- name: Install Rust Toolchain
id: toolchain
uses: dtolnay/rust-toolchain@master
with:
components: rustfmt, clippy
toolchain: ${{ matrix.rust-toolchain }}
- name: Override rust-toolchain.toml
run: rustup override set ${{steps.toolchain.outputs.name}}
- name: Cache Project
uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
shared-key: check-${{ matrix.rust-toolchain }}-${{ matrix.os }}
save-if: ${{ github.event_name == 'push' }}
- name: Sccache
uses: mozilla-actions/[email protected]
- name: Check Format
run: cargo fmt --all -- --check
- name: Run Linter
run: cargo clippy --all -- -D warnings
- name: Install cargo-hakari
if: ${{ matrix.rust-toolchain == 'stable' }}
uses: taiki-e/install-action@v2
with:
tool: cargo-hakari
- name: Check workspace-hack Cargo.toml is up-to-date
if: ${{ matrix.rust-toolchain == 'stable' }}
run: cargo hakari generate --diff
- name: Check Crates Depend on workspace-hack
if: ${{ matrix.rust-toolchain == 'stable' }}
run: cargo hakari manage-deps --dry-run
# Only "test" release build on push event.
- name: Test Release
if: ${{ matrix.rust-toolchain == 'stable' && github.event_name == 'push' }}
run: cargo build --workspace --release
run-deny:
needs: changes
if: ${{ needs.changes.outputs.rust == 'true' || needs.changes.outputs.examples == 'true' || needs.changes.outputs.deny == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Use mold-linker
uses: rui314/setup-mold@v1
- name: Install Rust Toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache Project
uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
shared-key: run-deny-stable-ubuntu-latest
save-if: ${{ github.event_name == 'push' }}
# Check for security advisories
- name: Check Advisories
uses: EmbarkStudios/cargo-deny-action@v1
with:
command: check advisories
continue-on-error: true
# Audit licenses, unreleased crates, and unexpected duplicate versions.
- name: Check Bans, Licenses, and Sources
uses: EmbarkStudios/cargo-deny-action@v1
with:
command: check bans licenses sources
run-tests:
needs: changes
if: ${{ needs.changes.outputs.rust == 'true' }}
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-13]
rust-toolchain: [stable, nightly]
default-features: [all, none]
runs-on: ${{ matrix.os }}
steps:
- name: Setup IPFS
uses: ibnesayeed/setup-ipfs@master
with:
run_daemon: false
- name: Checkout Repository
uses: actions/checkout@v4
- name: Use mold-linker
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: rui314/setup-mold@v1
- name: Install Rust Toolchain
id: toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust-toolchain }}
- name: Override rust-toolchain.toml
run: rustup override set ${{steps.toolchain.outputs.name}}
- name: Cache Project
uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
shared-key: test-all-${{ matrix.rust-toolchain }}-${{ matrix.os }}
save-if: ${{ github.event_name == 'push' }}
- name: Sccache
uses: mozilla-actions/[email protected]
- name: Install nextest
uses: taiki-e/install-action@nextest
- name: Run Tests (all-features)
if: ${{ matrix.default-features == 'all' }}
run: cargo nextest run --workspace --profile ci --all-features
continue-on-error: ${{ matrix.rust-toolchain == 'nightly' }}
- name: Run Tests (no-default-features)
if: ${{ matrix.default-features == 'none' }}
run: cargo nextest run --profile ci --no-default-features --features "test-utils"
continue-on-error: ${{ matrix.rust-toolchain == 'nightly' }}
- name: Run Doc Tests
if: ${{ matrix.default-features == 'all' }}
run: cargo test --doc --workspace
continue-on-error: ${{ matrix.rust-toolchain == 'nightly' }}
run-tests-windows:
needs: changes
if: ${{ needs.changes.outputs.rust == 'true' }}
env:
RUSTFLAGS: -Dwarnings -Ctarget-feature=+crt-static
strategy:
fail-fast: false
matrix:
rust-toolchain: [stable, nightly]
default-features: [all, none]
runs-on: windows-latest
steps:
- name: Setup IPFS
uses: ibnesayeed/setup-ipfs@master
with:
run_daemon: false
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Rust Toolchain
id: toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust-toolchain }}
- name: Override rust-toolchain.toml
run: rustup override set ${{steps.toolchain.outputs.name}}
- name: Cache Project
uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
shared-key: test-all-${{ matrix.rust-toolchain }}-windows-latest
save-if: ${{ github.event_name == 'push' }}
- name: Install nextest
uses: taiki-e/install-action@nextest
- name: Run Tests (all-features)
if: ${{ matrix.default-features == 'all' }}
run: cargo nextest run --workspace --profile ci --all-features
continue-on-error: ${{ matrix.rust-toolchain == 'nightly' }}
- name: Run Tests (no-default-features)
if: ${{ matrix.default-features == 'none' }}
run: cargo nextest run --profile ci --no-default-features --features "test-utils"
continue-on-error: ${{ matrix.rust-toolchain == 'nightly' }}
- name: Run Doc Tests
if: ${{ matrix.default-features == 'all' }}
run: cargo test --doc --workspace
continue-on-error: ${{ matrix.rust-toolchain == 'nightly' }}
run-cargo-tests:
needs: changes
if: ${{ needs.changes.outputs.rust == 'true' }}
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
runs-on: ubuntu-latest
steps:
- name: Setup IPFS
uses: ibnesayeed/setup-ipfs@master
with:
run_daemon: false
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Rust Toolchain
id: toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache Project
uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
shared-key: test-all-stable-ubuntu-latest
save-if: ${{ github.event_name == 'push' }}
- name: Sccache
uses: mozilla-actions/[email protected]
- name: Run Tests (all-features)
run: cargo test --workspace --all-features
run-docs:
needs: [changes]
if: ${{ needs.changes.outputs.rust == 'true' }}
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Use mold-linker
uses: rui314/setup-mold@v1
- name: Install Rust Toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache Project
uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
shared-key: doc
save-if: ${{ github.event_name == 'push' }}
- name: Sccache
uses: mozilla-actions/[email protected]
- name: Run Doc(s) compilation
env:
RUSTDOCFLAGS: -Dwarnings
run: cargo doc --workspace --document-private-items
build-and-run-examples:
needs: changes
if: ${{ needs.changes.outputs.examples == 'true' }}
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
runs-on: ubuntu-latest
steps:
- name: Setup IPFS
uses: ibnesayeed/setup-ipfs@master
with:
run_daemon: false
- name: Checkout Repository
uses: actions/checkout@v4
- name: Use mold-linker
uses: rui314/setup-mold@v1
- name: Install Rust Toolchain
uses: dtolnay/rust-toolchain@nightly
- name: Cache Project
uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
shared-key: cargo-examples
save-if: ${{ github.event_name == 'push' }}
- name: Sccache
uses: mozilla-actions/[email protected]
- name: Build example-websocket-relay
run: cargo build -p websocket-relay
- name: Run example-websocket-relay
shell: bash
run: timeout 10s cargo run -p websocket-relay || true