#
# 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: '0.16.0.{build}'

shallow_clone: true

branches:
  only:
    - master
    - /^(release/)?\d+\.\d+\.\d+$/

matrix:
  fast_finish: true

environment:
  matrix:
   - PROFILE: MSVC2017
     PROFILE_CLASS: MSVC
     APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
     PLATFORM: x64
     CONFIGURATION: Release
     BUILD_SHARED_LIBS: ON
     BOOST_VERSION: 1.67.0
     LIBEVENT_VERSION: 2.1.8
     PYTHON_VERSION: 3.6
     QT_VERSION: 5.10
     ZLIB_VERSION: 1.2.11

   - PROFILE: MSVC2015
     PROFILE_CLASS: MSVC
     APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
     PLATFORM: x86
     CONFIGURATION: Debug
     BUILD_SHARED_LIBS: OFF
     BOOST_VERSION: 1.62.0
     LIBEVENT_VERSION: 2.0.22
     PYTHON_VERSION: 3.5
     QT_VERSION: 5.8
     ZLIB_VERSION: 1.2.8

   - PROFILE: MINGW
     PROFILE_CLASS: MINGW
     # Currently the the latest MSYS2 is in the following image:
     APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
     PLATFORM: x64
     CONFIGURATION: RelWithDebInfo
     DISABLED_TESTS: (StalenessCheckTest)

  # As of 2021.08.06, the Cygwin build is broken with a missing dll exception.
  # See for an example https://ci.appveyor.com/project/ApacheSoftwareFoundation/thrift/builds/40263513/job/a69xt6m4o0y9x1bw?fullLog=true
  # - PROFILE: CYGWIN
  #   PROFILE_CLASS: CYGWIN
  #   PLATFORM: x64
  #   CONFIGURATION: RelWithDebInfo
  #   DISABLED_TESTS: (ZlibTest|OpenSSLManualInitTest|TNonblockingServerTest)


build_script:
  - cd %APPVEYOR_BUILD_FOLDER%
  - call build\appveyor\%PROFILE_CLASS%-appveyor-full.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
