112 lines
5.0 KiB
YAML
112 lines
5.0 KiB
YAML
# This is the main CI workflow that runs the test suite on all pushes to main and all pull requests.
|
|
# It runs the following jobs:
|
|
# - required: runs the test suite on ubuntu with stable and beta rust toolchains
|
|
# - minimal: runs the test suite with the minimal versions of the dependencies that satisfy the
|
|
# requirements of this crate, and its dependencies
|
|
# - os-check: runs the test suite on mac and windows
|
|
# - coverage: runs the test suite and collects coverage information
|
|
# See check.yml for information about how the concurrency cancellation and workflow triggering works
|
|
permissions:
|
|
contents: read
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
name: test
|
|
jobs:
|
|
required:
|
|
runs-on: ubuntu-latest
|
|
name: ubuntu / ${{ matrix.toolchain }}
|
|
strategy:
|
|
matrix:
|
|
# run on stable and beta to ensure that tests won't break on the next version of the rust
|
|
# toolchain
|
|
toolchain: [stable, beta]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: true
|
|
- name: Install ${{ matrix.toolchain }}
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
toolchain: ${{ matrix.toolchain }}
|
|
- name: cargo generate-lockfile
|
|
# enable this ci template to run regardless of whether the lockfile is checked in or not
|
|
if: hashFiles('Cargo.lock') == ''
|
|
run: cargo generate-lockfile
|
|
# https://twitter.com/jonhoo/status/1571290371124260865
|
|
- name: cargo test --locked
|
|
run: cargo test --locked --all-features --all-targets
|
|
# https://github.com/rust-lang/cargo/issues/6669
|
|
- name: cargo test --doc
|
|
run: cargo test --locked --all-features --doc
|
|
minimal:
|
|
# This action chooses the oldest version of the dependencies permitted by Cargo.toml to ensure
|
|
# that this crate is compatible with the minimal version that this crate and its dependencies
|
|
# require. This will pickup issues where this create relies on functionality that was introduced
|
|
# later than the actual version specified (e.g., when we choose just a major version, but a
|
|
# method was added after this version).
|
|
#
|
|
# This particular check can be difficult to get to succeed as often transitive dependencies may
|
|
# be incorrectly specified (e.g., a dependency specifies 1.0 but really requires 1.1.5). There
|
|
# is an alternative flag available -Zdirect-minimal-versions that uses the minimal versions for
|
|
# direct dependencies of this crate, while selecting the maximal versions for the transitive
|
|
# dependencies. Alternatively, you can add a line in your Cargo.toml to artificially increase
|
|
# the minimal dependency, which you do with e.g.:
|
|
# ```toml
|
|
# # for minimal-versions
|
|
# [target.'cfg(any())'.dependencies]
|
|
# openssl = { version = "0.10.55", optional = true } # needed to allow foo to build with -Zminimal-versions
|
|
# ```
|
|
# The optional = true is necessary in case that dependency isn't otherwise transitively required
|
|
# by your library, and the target bit is so that this dependency edge never actually affects
|
|
# Cargo build order. See also
|
|
# https://github.com/jonhoo/fantoccini/blob/fde336472b712bc7ebf5b4e772023a7ba71b2262/Cargo.toml#L47-L49.
|
|
# This action is run on ubuntu with the stable toolchain, as it is not expected to fail
|
|
runs-on: ubuntu-latest
|
|
name: ubuntu / stable / minimal-versions
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: true
|
|
- name: Install stable
|
|
uses: dtolnay/rust-toolchain@stable
|
|
- name: Install nightly for -Zminimal-versions
|
|
uses: dtolnay/rust-toolchain@nightly
|
|
- name: rustup default stable
|
|
run: rustup default stable
|
|
- name: cargo update -Zminimal-versions
|
|
run: cargo +nightly update -Zminimal-versions
|
|
- name: cargo test
|
|
run: cargo test --locked --all-features --all-targets
|
|
os-check:
|
|
# run cargo test on mac and windows
|
|
runs-on: ${{ matrix.os }}
|
|
name: ${{ matrix.os }} / stable
|
|
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
|
|
with:
|
|
submodules: true
|
|
- name: Install stable
|
|
uses: dtolnay/rust-toolchain@stable
|
|
- name: cargo generate-lockfile
|
|
if: hashFiles('Cargo.lock') == ''
|
|
run: cargo generate-lockfile
|
|
- name: cargo test
|
|
run: cargo test --locked --all-features --all-targets
|
|
# continue using our own coverage.yml for now to get doctest checking
|
|
# https://github.com/taiki-e/cargo-llvm-cov/issues/2
|