jobs:
  ###################################################
  # Formatting
  ###################################################

  - job: check_formatting
    displayName: Check formatting
    pool:
      vmImage: ubuntu-16.04
    steps:
      - script: |
          export CARGO_HOME="$HOME/.cargo"
          curl https://sh.rustup.rs -sSf | sh -s -- -y
          $HOME/.cargo/bin/rustup component add rustfmt
        displayName: Install stable Rust
      - script: |
          $HOME/.cargo/bin/cargo fmt -- --check
        displayName: Run rustfmt

  ###################################################
  # Book
  ###################################################

  - job: run_book_tests
    displayName: Book code example tests
    pool:
      vmImage: ubuntu-16.04
    steps:
      - script: |
          export CARGO_HOME="$HOME/.cargo"
          curl https://sh.rustup.rs -sSf | sh -s -- -y
          $HOME/.cargo/bin/rustup component add rustfmt
        displayName: Install stable Rust
      - script: |
          cd docs/book/tests && $HOME/.cargo/bin/cargo test
        displayName: Test book code examples via skeptic

  - job: build_book_master
    displayName: Build rendered book on master branch and push to Github
    pool:
      vmImage: ubuntu-16.04
    dependsOn: run_book_tests
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
    variables:
      - group: github-keys
    steps:
      - task: InstallSSHKey@0
        inputs:
          hostName: $(GHSshKnownHosts)
          sshPublicKey: $(GHSshPub)
          sshKeySecureFile: $(GHSshPriv)
      - script: |
          ./docs/book/ci-build.sh master

  ###################################################
  # Main Builds
  ###################################################

  - template: _build/azure-pipelines-template.yml
    parameters:
      name: Linux
      vmImage: ubuntu-16.04

  - template: _build/azure-pipelines-template.yml
    parameters:
      name: macOS
      vmImage: macOS-10.13

  - template: _build/azure-pipelines-template.yml
    parameters:
      name: Windows
      vmImage: vs2017-win2016

  ###################################################
  # Releases
  ###################################################

  - job: check_release_automation
    displayName: Check release automation
    pool:
      vmImage: ubuntu-16.04
    steps:
      - script: |
          export CARGO_HOME="$HOME/.cargo"
          curl https://sh.rustup.rs -sSf | sh -s -- -y
          echo "##vso[task.setvariable variable=PATH;]$PATH:$HOME/.cargo/bin"
        displayName: Install stable Rust
      - script: |
          _build/cargo-make.sh "0.20.0" "x86_64-unknown-linux-musl"
        displayName: Install cargo-make binary
      - script: |
         cargo install --debug --version=0.11.2 cargo-release
        displayName: Install cargo-release binary
      - script: |
          git config --local user.name "Release Test Bot"
          git config --local user.email "juniper@example.com"
        displayName: Set up git
      - script: |
          RELEASE_LEVEL="minor" cargo make release-dry-run
        displayName: Dry run mode
      - script: |
          RELEASE_LEVEL="minor" cargo make release-local-test
        displayName: Local test mode
      - script: |
          git --no-pager log -p HEAD...HEAD~20
          # NOTE: this is rolled into one task due to onerous 
          # "bash not found" error on Azure.
          cargo make workspace-ci-flow --no-workspace
        displayName: Echo local changes && make sure build and tests still work