Skip to content

feat: builds, packages, pushing contains to ghcr #814

feat: builds, packages, pushing contains to ghcr

feat: builds, packages, pushing contains to ghcr #814

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@v2
id: filter
with:
filters: |
examples:
- 'examples/**'
rust:
- '**/Cargo.*'
- '**/src/**'
- '**/tests/**'
- '**/config/**'
- '**/build.rs'
- '**/migrations/**'
- '**/fixtures/**'
deny:
- 'deny.toml'
run-checks:
needs: changes
if: ${{ needs.changes.outputs.rust == 'true' || needs.changes.outputs.examples == 'true' }}
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
rust-toolchain: [stable, nightly]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
# Smarter caching action, speeds up build times compared to regular cache:
# https://github.com/Swatinem/rust-cache
- 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: 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: Check Format
run: cargo fmt --all -- --check
- name: Run Linter
run: cargo clippy --all -- -D warnings
# 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: Cache Project
uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
shared-key: deny-stable-ubuntu-latest
save-if: ${{ github.event_name == 'push' }}
- name: Use mold-linker
uses: rui314/setup-mold@v1
- name: Install Rust Toolchain
uses: dtolnay/rust-toolchain@stable
# 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-latest]
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: 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: 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: 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
- name: Run Tests (no-default-features)
if: ${{ matrix.default-features == 'none' }}
run: cargo nextest run --workspace --profile ci --no-default-features --features "test-utils"
- name: Run Doc Tests
if: ${{ matrix.default-features == 'all' }}
run: cargo test --doc --workspace
run-tests-windows:
needs: changes
if: ${{ needs.changes.outputs.rust == 'true' }}
env:
RUSTFLAGS: -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: 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 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: 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 --workspace --profile ci --no-default-features --features "test-utils"
- name: Run Doc Tests
if: ${{ matrix.default-features == 'all' }}
run: cargo test --doc --workspace
continue-on-error: ${{ matrix.rust-toolchain == 'nightly' }}
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: Cache Project
uses: Swatinem/rust-cache@v2
with:
shared-key: doc
save-if: ${{ github.event_name == 'push' }}
- name: Sccache
uses: mozilla-actions/[email protected]
- name: Use mold-linker
uses: rui314/setup-mold@v1
- name: Install Rust Toolchain
uses: dtolnay/rust-toolchain@stable
- name: Run Doc(s) compilation
env:
RUSTDOCFLAGS: -Dwarnings
run: cargo doc --workspace --document-private-items