predicates 1.0.7

An implementation of boolean-valued predicate functions.
Documentation
trigger:
  branches:
    include: ['master']
  tags:
    include: ['v*']
pr:
  branches:
    include:
    - master
  paths:
    exclude:
    - "*.md"
    - "docs/*"
    - "LICENSE-*"
schedules:
- cron: "16 16 16 * *"
  displayName: Monthly Build
  branches:
    include:
    - master
variables:
  minrust: 1.40.0
  codecov_token: $(CODECOV_TOKEN_SECRET)
  windows_vm: vs2017-win2016
  mac_vm: macos-10.14
  linux_vm: ubuntu-16.04

stages:
- stage: check
  displayName: Compilation Check
  jobs:
  - job: cargo_check
    displayName: cargo check
    pool:
      vmImage: ${{ variables.linux_vm }}
    steps:
    - template: install-rust.yml@templates
      parameters:
        rust: stable
    - script: cargo check --workspace --all-targets
      displayName: Default features
    - script: cargo check --workspace --all-targets --no-default-features
      displayName: No-default features
- stage: test
  displayName: Test
  jobs:
  - job: test
    displayName: Test
    strategy:
      matrix:
        windows:
          imageName: ${{ variables.windows_vm }}
          target: 'x86_64-pc-windows-msvc'
          channel: stable
        mac:
          imageName: ${{ variables.mac_vm }}
          target: 'x86_64-apple-darwin'
          channel: stable
        linux:
          imageName: ${{ variables.linux_vm }}
          target: 'x86_64-unknown-linux-gnu'
          channel: stable
        # Check for upcoming platform-specific compiler breakages
        windows_beta:
          imageName: ${{ variables.windows_vm }}
          target: 'x86_64-pc-windows-msvc'
          channel: beta
        mac_beta:
          imageName: ${{ variables.mac_vm }}
          target: 'x86_64-apple-darwin'
          channel: beta
        linux_beta:
          imageName: ${{ variables.linux_vm }}
          target: 'x86_64-unknown-linux-gnu'
          channel: beta
        # Check for compiler breakages
        linux_nightly:
          imageName: ${{ variables.linux_vm }}
          target: 'x86_64-unknown-linux-gnu'
          channel: nightly
    continueOnError: $[ne(variables.rust, 'stable')]
    pool:
      vmImage: $(imageName)
    steps:
    - template: install-rust.yml@templates
      parameters:
        rust: $(channel)
        targets: ["$(TARGET)"]
    - script: cargo test --target $(TARGET) --workspace
      displayName: cargo test
    - script: cargo doc --target $(TARGET) --workspace --no-deps
      displayName: cargo doc
  - job: msrv
    displayName: "${{ format('Minimum supported Rust version: {0}', variables.minrust) }}"
    dependsOn: []
    pool:
      vmImage: ${{ variables.linux_vm }}
    steps:
      - template: install-rust.yml@templates
        parameters:
          rust: ${{ variables.minrust }}
      - script: cargo check --all --bins --examples --tests
        displayName: cargo check
- stage: style
  displayName: Style checks
  dependsOn: []
  jobs:
  - job: "Committed"
    displayName: Linting commit history
    pool:
      vmImage: ${{ variables.linux_vm }}
    steps:
    - checkout: self
    - template: v1/azdo-step.yml@gh-install
      parameters:
        git: crate-ci/committed
        target: 'x86_64-unknown-linux-gnu'
        to: $(Build.StagingDirectory)/tools
    # The extra verbosity is to help verify the example we're giving works and doesn't need to be copied
    - script: |
        echo "Linting commits:"
        git log --graph --oneline HEAD~..HEAD^2
        echo "Against 'committed.toml':"
        $(Build.StagingDirectory)/tools/committed --dump-config -
        echo ""
        echo "If this fails, don't sweat it. We're trying to encourage clear communication and not hinder contributions."
        echo "If it is a reasonable issue and you lack time or feel uncomfortable fixing it yourself,"
        echo "let us know and we can mentor or fix it."
        $(Build.StagingDirectory)/tools/committed HEAD~..HEAD^2 --no-merge-commit -vvvv
      displayName: Lint commit history
    condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
  - job: style
    displayName: Style checking
    pool:
      vmImage: ${{ variables.linux_vm }}
    steps:
    - template: install-rust.yml@templates
      parameters:
        rust: stable
        components:
          - rustfmt
    - script: cargo fmt --all -- --check
      displayName: rustfmt
  - job: lint
    displayName: Linting
    strategy:
      matrix:
        current:
          channel: ${{ variables.minrust }}
        next:
          channel: stable
    continueOnError: $[eq(variables.channel, 'stable')]
    pool:
      vmImage: ${{ variables.linux_vm }}
    steps:
    - template: install-rust.yml@templates
      parameters:
        rust: $(channel)
        components:
          - clippy
    - script: cargo check --workspace --all-targets --all-features
      displayName: Warnings
      env:
        RUSTFLAGS: "-D warnings"
    - script:  cargo clippy --workspace --all-features --all-targets -- -D warnings
      displayName: clippy
- ${{ if ne('', variables.codecov_token) }}:
  - stage: coverage
    displayName: Code coverage
    dependsOn: test
    jobs:
      - template: coverage.yml@templates
        parameters:
          token: ${{ variables.codecov_token }}

resources:
  repositories:
    - repository: templates
      type: github
      name: crate-ci/azure-pipelines
      endpoint: crate-ci
    - repository: gh-install
      type: github
      name: crate-ci/gh-install
      endpoint: crate-ci