# 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.

# Operating system (build VM template)
os: Visual Studio 2015

only_commits:
  # Skip commits not related to Python, C++ or Rust
  files:
    - appveyor.yml
    - ci/
    - cpp/
    - format/
    - python/
    - rust/

cache:
  - C:\Users\Appveyor\clcache
  - C:\Users\Appveyor\.cargo\registry

matrix:
  fast_finish: true

environment:
  global:
    USE_CLCACHE: true
    PYTHON: "3.6"
    ARCH: "64"

  matrix:
    # NOTE: clcache seems to work best with Ninja and worst with msbuild
    # (as generated by cmake)
    - JOB: "Build"
      GENERATOR: Ninja
      CONFIGURATION: "Release"
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
    - JOB: "Toolchain"
      GENERATOR: Visual Studio 14 2015 Win64
      CONFIGURATION: "Release"
    - JOB: "Static_Crt_Build"
      GENERATOR: Ninja
    - JOB: "Build_Debug"
      GENERATOR: Ninja
      CONFIGURATION: "Debug"
    - JOB: "Cmake_Script_Tests"
      GENERATOR: Ninja
      CONFIGURATION: "Release"
      BUILD_SCRIPT: "CMake_Build_Script"
    - JOB: "Rust"
      TARGET: x86_64-pc-windows-msvc
      USE_CLCACHE: false

  MSVC_DEFAULT_OPTIONS: ON
  BOOST_ROOT: C:\Libraries\boost_1_67_0
  BOOST_LIBRARYDIR: C:\Libraries\boost_1_67_0\lib64-msvc-14.0
  APPVEYOR_SAVE_CACHE_ON_ERROR: true

install:
  - python ci\detect-changes.py > generated_changes.bat
  # Populate ARROW_CI_* variables
  - call generated_changes.bat
  # Decide to exit if current job doesn't exercise affected topics
  - call ci\appveyor-filter-changes.bat

before_build:
  - call ci\appveyor-install.bat

build_script:
  - call ci\appveyor-build.bat

# Disable test discovery
test: off

after_build:
  - if "%USE_CLCACHE%" == "true" clcache -s
