name: CI env: CARGO_TERM_COLOR: always MSRV: '1.60' on: push: branches: - main pull_request: {} jobs: check: runs-on: ubuntu-latest steps: - uses: actions/checkout@master - uses: arduino/setup-protoc@v1 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - uses: dtolnay/rust-toolchain@beta with: components: clippy, rustfmt - uses: Swatinem/rust-cache@v2 - name: Check uses: actions-rs/cargo@v1 with: command: clippy args: --workspace --all-targets --all-features -- -D warnings - name: rustfmt uses: actions-rs/cargo@v1 with: command: fmt args: -- --check check-docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@master - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v1 - name: cargo doc env: RUSTDOCFLAGS: "-D rustdoc::all -A rustdoc::private-doc-tests" run: cargo doc --all-features --no-deps cargo-hack: runs-on: ubuntu-latest steps: - uses: actions/checkout@master - uses: arduino/setup-protoc@v1 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v1 - name: Install cargo-hack run: | curl -LsSf https://github.com/taiki-e/cargo-hack/releases/latest/download/cargo-hack-x86_64-unknown-linux-gnu.tar.gz | tar xzf - -C ~/.cargo/bin - name: cargo hack check run: cargo hack check --each-feature --no-dev-deps --all cargo-public-api-crates: runs-on: ubuntu-latest strategy: matrix: crate: [axum, axum-core, axum-extra, axum-macros] steps: - uses: actions/checkout@master - uses: dtolnay/rust-toolchain@nightly - uses: Swatinem/rust-cache@v1 - name: Install cargo-public-api-crates run: | cargo install --git https://github.com/davidpdrsn/cargo-public-api-crates - name: cargo public-api-crates check run: cargo public-api-crates --manifest-path ${{ matrix.crate }}/Cargo.toml check test-versions: needs: check runs-on: ubuntu-latest strategy: matrix: rust: [stable, beta] steps: - uses: actions/checkout@master - uses: arduino/setup-protoc@v1 - uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.rust }} - uses: Swatinem/rust-cache@v1 - name: Run tests uses: actions-rs/cargo@v1 with: command: test args: --all --all-features --all-targets # some examples doesn't support our MSRV so we only test axum itself on our MSRV test-nightly: needs: check runs-on: ubuntu-latest steps: - uses: actions/checkout@master - uses: dtolnay/rust-toolchain@master with: # same as `axum-macros/rust-toolchain` toolchain: nightly-2022-11-18 - uses: Swatinem/rust-cache@v1 - name: Run nightly tests working-directory: axum-macros run: | cargo test # some examples doesn't support our MSRV (such as async-graphql) # so we only test axum itself on our MSRV test-msrv: needs: check runs-on: ubuntu-latest steps: - uses: actions/checkout@master - uses: dtolnay/rust-toolchain@master with: toolchain: ${{ env.MSRV }} - name: "install Rust nightly" uses: dtolnay/rust-toolchain@nightly - uses: Swatinem/rust-cache@v1 - name: Select minimal versions uses: actions-rs/cargo@v1 with: command: update args: -Z minimal-versions toolchain: nightly - name: Fix up Cargo.lock uses: actions-rs/cargo@v1 with: command: update args: -p crc32fast --precise 1.1.1 toolchain: nightly - name: Run tests uses: actions-rs/cargo@v1 with: command: test args: > -p axum -p axum-extra -p axum-core --all-features --all-targets --locked toolchain: ${{ env.MSRV }} # the compiler errors are different on our MSRV which makes # the trybuild tests in axum-macros fail, so just run the doc # tests - name: Run axum-macros doc tests uses: actions-rs/cargo@v1 with: command: test args: > -p axum-macros --doc --all-features --locked toolchain: ${{ env.MSRV }} test-docs: needs: check runs-on: ubuntu-latest steps: - uses: actions/checkout@master - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v1 - name: Run doc tests uses: actions-rs/cargo@v1 with: command: test args: --all-features --doc deny-check: name: cargo-deny check runs-on: ubuntu-latest continue-on-error: ${{ matrix.checks == 'advisories' }} strategy: matrix: checks: - advisories - bans licenses sources steps: - uses: actions/checkout@v2 - uses: EmbarkStudios/cargo-deny-action@v1 with: command: check ${{ matrix.checks }} arguments: --all-features --manifest-path axum/Cargo.toml armv5te-unknown-linux-musleabi: needs: check runs-on: ubuntu-latest steps: - uses: actions/checkout@master - uses: dtolnay/rust-toolchain@stable with: target: armv5te-unknown-linux-musleabi - uses: Swatinem/rust-cache@v1 - name: Check uses: actions-rs/cargo@v1 env: # Clang has native cross-compilation support CC: clang with: command: check args: > --all-targets --all-features -p axum -p axum-core -p axum-extra -p axum-macros --target armv5te-unknown-linux-musleabi wasm32-unknown-unknown: needs: check runs-on: ubuntu-latest steps: - uses: actions/checkout@master - uses: dtolnay/rust-toolchain@stable with: target: wasm32-unknown-unknown - uses: Swatinem/rust-cache@v1 - name: Check uses: actions-rs/cargo@v1 with: command: check args: > --manifest-path ./examples/simple-router-wasm/Cargo.toml --target wasm32-unknown-unknown dependencies-are-sorted: runs-on: ubuntu-latest steps: - uses: actions/checkout@master - uses: dtolnay/rust-toolchain@beta - uses: Swatinem/rust-cache@v2 - name: Install cargo-sort run: | cargo install cargo-sort # Work around cargo-sort not honoring workspace.exclude - name: Remove non-crate folder run: rm -rf examples/async-graphql - name: Check dependency tables run: | cargo sort --workspace --grouped --check