name: windows

on:
  push:
    branches:
      - master
    paths:
      - packages/**
      - examples/**
      - src/**
      - .github/**
      - lib.rs
      - Cargo.toml

  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]
    branches:
      - master
    paths:
      - packages/**
      - examples/**
      - src/**
      - .github/**
      - lib.rs
      - Cargo.toml

jobs:
  test:
    if: github.event.pull_request.draft == false
    runs-on: windows-latest
    name: (${{ matrix.target }}, ${{ matrix.cfg_release_channel }})
    env:
      CFG_RELEASE_CHANNEL: ${{ matrix.cfg_release_channel }}
    strategy:
      # https://help.github.com/en/actions/getting-started-with-github-actions/about-github-actions#usage-limits
      # There's a limit of 60 concurrent jobs across all repos in the rust-lang organization.
      # In order to prevent overusing too much of that 60 limit, we throttle the
      # number of rustfmt jobs that will run concurrently.
      max-parallel: 2
      fail-fast: false
      matrix:
        target: [x86_64-pc-windows-gnu, x86_64-pc-windows-msvc]
        cfg_release_channel: [stable]

    steps:
      # The Windows runners have autocrlf enabled by default
      # which causes failures for some of rustfmt's line-ending sensitive tests
      - name: disable git eol translation
        run: git config --global core.autocrlf false
      - name: checkout
        uses: actions/checkout@v2

        # Run build
      - name: Install Rustup using win.rustup.rs
        run: |
          # Disable the download progress bar which can cause perf issues
          $ProgressPreference = "SilentlyContinue"
          Invoke-WebRequest https://win.rustup.rs/ -OutFile rustup-init.exe
          .\rustup-init.exe -y --default-host=x86_64-pc-windows-msvc --default-toolchain=none
          del rustup-init.exe
          rustup target add ${{ matrix.target }}
        shell: powershell

      - name: Add mingw64 to path for x86_64-gnu
        run: echo "C:\msys64\mingw64\bin" >> $GITHUB_PATH
        if: matrix.target == 'x86_64-pc-windows-gnu' && matrix.channel == 'nightly'
        shell: bash

      - name: test
        run: |
          rustc -Vv
          cargo -V
          set RUST_BACKTRACE=1
          cargo build --all --tests --examples
          cargo test --all --tests
        shell: cmd
