name: windows
on:
  push:
    branches:
      - main
  pull_request:

jobs:
  test:
    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: [
          i686-pc-windows-gnu,
          i686-pc-windows-msvc,
          x86_64-pc-windows-gnu,
          x86_64-pc-windows-msvc,
        ]
        cfg_release_channel: [nightly, 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@v4

      # 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 mingw32 to path for i686-gnu
      run: |
        echo "C:\msys64\mingw32\bin" >> $GITHUB_PATH
      if: matrix.target == 'i686-pc-windows-gnu' && matrix.channel == 'nightly'
      shell: bash

    - 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: Build and Test
      shell: cmd
      run: ci\build_and_test.bat
