image: Visual Studio 2017
clone_depth: 1
skip_tags: true

environment:
  # Python version used
  MICROPY_CPYTHON3: c:/python38/python.exe

init:
  # Set build version number to commit to be travis-like
- ps: Update-AppveyorBuild -Version $env:appveyor_repo_commit.substring(0,8)

configuration:
- Debug
- Release

platform:
- x86
- x64

before_build:
- ps: |
    @"
    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Target Name="Build">
        <MsBuild BuildInParallel="True" Projects="mpy-cross\mpy-cross.vcxproj;ports\windows\micropython.vcxproj"/>
      </Target>
    </Project>
    "@ | Set-Content build.proj

build:
  project: build.proj
  parallel: true
  verbosity: normal

test_script:
- ps: |
    cd (Join-Path $env:APPVEYOR_BUILD_FOLDER 'tests')
    & $env:MICROPY_CPYTHON3 run-tests.py
    if ($LASTEXITCODE -ne 0) {
      & $env:MICROPY_CPYTHON3 run-tests.py --print-failures
      throw "Test failure"
    }
    & $env:MICROPY_CPYTHON3 run-tests.py --via-mpy -d basics float micropython
    if ($LASTEXITCODE -ne 0) {
      & $env:MICROPY_CPYTHON3 run-tests.py --print-failures
      throw "Test failure"
    }

# After the build/test phase for the MSVC build completes,
# build and test with mingw-w64, release versions only.
after_test:
- ps: |
    if ($env:configuration -eq 'Debug') {
      return
    }
    $env:MSYSTEM = if ($platform -eq 'x86') {'MINGW32'} else {'MINGW64'}
    $env:CHERE_INVOKING = 'enabled_from_arguments'
    cd (Join-Path $env:APPVEYOR_BUILD_FOLDER 'ports/windows')
    C:\msys64\usr\bin\bash.exe -l -c "make -B -j4 V=1"
    if ($LASTEXITCODE -ne 0) {
      throw "$env:MSYSTEM build exited with code $LASTEXITCODE"
    }
    cd (Join-Path $env:APPVEYOR_BUILD_FOLDER 'mpy-cross')
    C:\msys64\usr\bin\bash.exe -l -c "make -B -j4 V=1"
    if ($LASTEXITCODE -ne 0) {
      throw "$env:MSYSTEM mpy_cross build exited with code $LASTEXITCODE"
    }
    cd (Join-Path $env:APPVEYOR_BUILD_FOLDER 'tests')
    $testArgs = @('run-tests.py')
    foreach ($skipTest in @('math_fun', 'float2int_double', 'float_parse', 'math_domain_special')) {
      $testArgs = $testArgs + '-e' + $skipTest
    }
    & $env:MICROPY_CPYTHON3 $testArgs
    if ($LASTEXITCODE -ne 0) {
      & $env:MICROPY_CPYTHON3 run-tests.py --print-failures
      throw "Test failure"
    }
    & $env:MICROPY_CPYTHON3 ($testArgs + @('--via-mpy', '-d', 'basics', 'float', 'micropython'))
    if ($LASTEXITCODE -ne 0) {
      & $env:MICROPY_CPYTHON3 run-tests.py --print-failures
      throw "Test failure"
    }
