mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-21 00:00:10 +02:00
It is hard to maintain features list manually, so use cargo-hack's `--each-feature` flag. And cargo-hack provides a workaround for an issue that dev-dependencies leaking into normal build (`--no-dev-deps` flag), so removed own ci tool. Also, compared to running tests on all features, there is not much advantage in running tests on each feature, so only the default features and all features are tested. If the behavior changes depending on the feature, we need to test it as another job in CI.
89 lines
3.2 KiB
YAML
89 lines
3.2 KiB
YAML
jobs:
|
|
- job: ${{ parameters.name }}
|
|
displayName: ${{ parameters.displayName }}
|
|
strategy:
|
|
matrix:
|
|
Linux:
|
|
vmImage: ubuntu-16.04
|
|
|
|
${{ if parameters.cross }}:
|
|
MacOS:
|
|
vmImage: macOS-10.13
|
|
Windows:
|
|
vmImage: vs2017-win2016
|
|
pool:
|
|
vmImage: $(vmImage)
|
|
|
|
steps:
|
|
- template: azure-install-rust.yml
|
|
parameters:
|
|
# rust_version: stable
|
|
rust_version: ${{ parameters.rust }}
|
|
|
|
- script: cargo install cargo-hack
|
|
displayName: Install cargo-hack
|
|
# FIXME(taiki-e): many features of current cargo-hack are not available on windows: https://github.com/taiki-e/cargo-hack/issues/3
|
|
condition: not(eq(variables['Agent.OS'], 'Windows_NT'))
|
|
|
|
- template: azure-is-release.yml
|
|
|
|
- ${{ each crate in parameters.crates }}:
|
|
# Run with default crate features
|
|
- script: cargo test
|
|
env:
|
|
LOOM_MAX_PREEMPTIONS: 2
|
|
CI: 'True'
|
|
displayName: ${{ crate }} - cargo test
|
|
workingDirectory: $(Build.SourcesDirectory)/${{ crate }}
|
|
|
|
# Run with all crate features
|
|
- script: cargo test --all-features
|
|
env:
|
|
LOOM_MAX_PREEMPTIONS: 2
|
|
CI: 'True'
|
|
displayName: ${{ crate }} - cargo test --all-features
|
|
workingDirectory: $(Build.SourcesDirectory)/${{ crate }}
|
|
|
|
# Check each specified feature works properly
|
|
# * --each-feature - run for each feature which includes --no-default-features and default features of package
|
|
# * --no-dev-deps - build without dev-dependencies to avoid https://github.com/rust-lang/cargo/issues/4866
|
|
- script: cargo hack check --each-feature --no-dev-deps
|
|
env:
|
|
LOOM_MAX_PREEMPTIONS: 2
|
|
CI: 'True'
|
|
displayName: ${{ crate }} - cargo hack check --each-feature
|
|
workingDirectory: $(Build.SourcesDirectory)/${{ crate }}
|
|
# FIXME(taiki-e): many features of current cargo-hack are not available on windows: https://github.com/taiki-e/cargo-hack/issues/3
|
|
condition: not(eq(variables['Agent.OS'], 'Windows_NT'))
|
|
|
|
- template: azure-patch-crates.yml
|
|
|
|
- ${{ each crate in parameters.crates }}:
|
|
# Run with default crate features
|
|
- script: cargo test
|
|
env:
|
|
LOOM_MAX_PREEMPTIONS: 2
|
|
CI: 'True'
|
|
displayName: ${{ crate }} - cargo test
|
|
workingDirectory: $(Build.SourcesDirectory)/${{ crate }}
|
|
|
|
# Run with all crate features
|
|
- script: cargo test --all-features
|
|
env:
|
|
LOOM_MAX_PREEMPTIONS: 2
|
|
CI: 'True'
|
|
displayName: ${{ crate }} - cargo test --all-features
|
|
workingDirectory: $(Build.SourcesDirectory)/${{ crate }}
|
|
|
|
# Check each specified feature works properly
|
|
# * --each-feature - run for each feature which includes --no-default-features and default features of package
|
|
# * --no-dev-deps - build without dev-dependencies to avoid https://github.com/rust-lang/cargo/issues/4866
|
|
- script: cargo hack check --each-feature --no-dev-deps
|
|
env:
|
|
LOOM_MAX_PREEMPTIONS: 2
|
|
CI: 'True'
|
|
displayName: ${{ crate }} - cargo hack check --each-feature
|
|
workingDirectory: $(Build.SourcesDirectory)/${{ crate }}
|
|
# FIXME(taiki-e): many features of current cargo-hack are not available on windows: https://github.com/taiki-e/cargo-hack/issues/3
|
|
condition: not(eq(variables['Agent.OS'], 'Windows_NT'))
|