#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

# build Apache Thrift on AppVeyor - https://ci.appveyor.com

version: '1.0.0-dev.{build}'

shallow_clone: true

os:
  - Visual Studio 2015

cache:
  - C:\projects\thrift\buildcache -> build\appveyor\MSVC-appveyor-install.bat
  - C:\ProgramData\chocolatey\lib -> build\appveyor\MSVC-appveyor-install.bat
  - C:\msys64\var\cache\pacman    -> build\appveyor\MSYS-appveyor-install.bat

environment:
  matrix:
   - PROFILE: MSVC2010
     PLATFORM: x86
     CONFIGURATION: Debug
     BOOST_VERSION: 1.54.0
     LIBEVENT_VERSION: 2.0.22
     QT_VERSION: 5.6
     ZLIB_VERSION: 1.2.8
     DISABLED_TESTS: StressTestNonBlocking|concurrency_test

   - PROFILE: MSVC2015
     PLATFORM: x64
     CONFIGURATION: Release
     BOOST_VERSION: 1.64.0
     LIBEVENT_VERSION: 2.0.22
     PYTHON_VERSION: 3.6
     QT_VERSION: 5.8
     ZLIB_VERSION: 1.2.11
     DISABLED_TESTS: StressTestNonBlocking

   - PROFILE: MINGW
     PLATFORM: x64
     CONFIGURATION: Release

matrix:
  fast_finish: true

install:
  - cd %APPVEYOR_BUILD_FOLDER%
  - call build\appveyor\%PROFILE:~0,4%-appveyor-install.bat
  - refreshenv

build_script:
  - cd %APPVEYOR_BUILD_FOLDER%
  - call build\appveyor\%PROFILE:~0,4%-appveyor-build.bat

test_script:
  - cd %APPVEYOR_BUILD_FOLDER%
  - call build\appveyor\%PROFILE:~0,4%-appveyor-test.bat


# artifact capture disabled as it might increase service cost for little gain:
#
# artifacts:
#  - path: local-thrift-inst
#    name: cmake installed content
#    type: zip
#
#  - path: local-thrift-build\Testing
#    name: ctest output
#    type: zip

# RDP support: use one or the other...
#
# enables RDP for each build job so you can inspect the environment at the beginning of the job:
# init:
#  - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
#
# enables RDP at the end of the build job so you can login and re-run
# commands to see why something failed...
#on_finish:
#  - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
#
# also need:
# environment:
#   APPVEYOR_RDP_PASSWORD: thr1FT2345$xyzZ

