diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..a070231 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: +- package-ecosystem: github-actions + directory: "/" + schedule: + interval: daily + timezone: Etc/UTC + open-pull-requests-limit: 10 + labels: + - "A-CI" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..6944b14 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,88 @@ +name: CI checks + +on: [push, pull_request] + +jobs: + test: + name: Test on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - uses: actions/checkout@v4 + - name: Run tests + run: cargo test --all-features --verbose --release + - name: Verify working directory is clean + run: git diff --exit-code + + build-latest: + name: Latest build on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + id: toolchain + - run: rustup override set ${{steps.toolchain.outputs.name}} + - name: Remove lockfile to build with latest dependencies + run: rm Cargo.lock + - name: Build crate + run: cargo build --all-targets --all-features --verbose + - name: Verify working directory is clean (excluding lockfile) + run: git diff --exit-code ':!Cargo.lock' + + build-nodefault: + name: Build target ${{ matrix.target }} + runs-on: ubuntu-latest + strategy: + matrix: + target: + - wasm32-wasi + steps: + - uses: actions/checkout@v4 + - name: Add target + run: rustup target add ${{ matrix.target }} + - name: Build crate + run: cargo build --no-default-features --verbose --target ${{ matrix.target }} + + bitrot: + name: Bitrot check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + # Build benchmarks to prevent bitrot + - name: Build benchmarks + run: cargo build --all --benches + + clippy: + name: Clippy (MSRV) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run Clippy + uses: auguwu/clippy-action@1.3.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + working-directory: ${{ inputs.target }} + deny: warnings + + doc-links: + name: Intra-doc links + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: cargo fetch + # Requires #![deny(rustdoc::broken_intra_doc_links)] in crate. + - name: Check intra-doc links + run: cargo doc --all-features --document-private-items + + fmt: + name: Rustfmt + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check formatting + run: cargo fmt -- --check