name: CI on: pull_request: push: branches: - main - master - develop env: CARGO_TERM_COLOR: always # ensure that the workflow is only triggered once per PR, subsequent pushes to the PR will cancel # and restart the workflow. See https://docs.github.com/en/actions/using-jobs/using-concurrency concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: fmt: name: fmt runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: components: rustfmt - name: check formatting run: cargo fmt -- --check - name: Cache Cargo dependencies uses: Swatinem/rust-cache@v2 clippy: name: clippy runs-on: ubuntu-latest permissions: contents: read checks: write steps: - name: Checkout uses: actions/checkout@v4 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: components: clippy - name: Run clippy action uses: clechasseur/rs-clippy-check@v3 - name: Cache Cargo dependencies uses: Swatinem/rust-cache@v2 doc: # run docs generation on nightly rather than stable. This enables features like # https://doc.rust-lang.org/beta/unstable-book/language-features/doc-cfg.html which allows an # API be documented as only available in some specific platforms. name: doc runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust nightly uses: dtolnay/rust-toolchain@nightly - name: Run cargo doc run: cargo doc --no-deps --all-features env: RUSTDOCFLAGS: --cfg docsrs test: runs-on: ${{ matrix.os }} name: test ${{ matrix.os }} strategy: fail-fast: false matrix: os: [macos-latest, windows-latest] steps: # if your project needs OpenSSL, uncomment this to fix Windows builds. # it's commented out by default as the install command takes 5-10m. # - run: echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append # if: runner.os == 'Windows' # - run: vcpkg install openssl:x64-windows-static-md # if: runner.os == 'Windows' - uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@stable # enable this ci template to run regardless of whether the lockfile is checked in or not - name: cargo generate-lockfile if: hashFiles('Cargo.lock') == '' run: cargo generate-lockfile - name: cargo test --locked run: cargo test --locked --all-features --all-targets - name: Cache Cargo dependencies uses: Swatinem/rust-cache@v2