# 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++, C#, Go, R, Ruby, or Rust
  files:
    - appveyor.yml
    - c_glib/
    - ci/
    - cpp/
    - csharp/
    - format/
    - go/
    - python/
    - r/
    - ruby/
    - rust/

cache:
  - C:\Users\Appveyor\clcache1
  - C:\msys64\home\appveyor\.ccache
  - C:\Users\Appveyor\.cargo\registry
  - '%LocalAppData%\\go-build'

matrix:
  fast_finish: true

environment:
  global:
    # Make these variables visible in all jobs and build steps
    USE_CLCACHE: true
    # Change the clcache dir to reset caches everywhere when a setting
    # is changed incompatibly (e.g. CLCACHE_COMPRESS).
    CLCACHE_DIR: C:\Users\Appveyor\clcache1
    CLCACHE_SERVER: 1
    CLCACHE_COMPRESS: 1
    CLCACHE_COMPRESSLEVEL: 6
    ARROW_BUILD_GANDIVA: "OFF"
    ARROW_LLVM_VERSION: "7.0.*"
    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: Ninja
      CONFIGURATION: "Release"
      ARROW_BUILD_FLIGHT: "ON"
      ARROW_BUILD_GANDIVA: "ON"
    # NOTE: Since ARROW-5403 we have disabled the static CRT build
    # - JOB: "Static_Crt_Build"
    #   GENERATOR: Ninja
    - JOB: "Build_Debug"
      GENERATOR: Ninja
      CONFIGURATION: "Debug"
    - JOB: "MinGW32"
      MINGW_ARCH: i686
      MINGW_PACKAGE_PREFIX: mingw-w64-i686
      MINGW_PREFIX: c:\msys64\mingw32
      MSYSTEM: MINGW32
      USE_CLCACHE: false
    - JOB: "MinGW64"
      MINGW_ARCH: x86_64
      MINGW_PACKAGE_PREFIX: mingw-w64-x86_64
      MINGW_PREFIX: c:\msys64\mingw64
      MSYSTEM: MINGW64
      USE_CLCACHE: false
    - JOB: "Rust"
      TARGET: x86_64-pc-windows-msvc
      USE_CLCACHE: false
    - JOB: "C#"
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
      USE_CLCACHE: false
    - JOB: "Go"
      MINGW_PACKAGE_PREFIX: mingw-w64-x86_64
      MINGW_PREFIX: c:\msys64\mingw64
      MSYSTEM: MINGW64
      USE_CLCACHE: false
      GOROOT: 'c:\go112'
      GOPATH: c:\gopath
      GO111MODULE: on
      GOTOOLDIR: '%GOROOT%\pkg\tool\windows_amd64'
      PATH: '%GOPATH%\bin;%GOROOT%\bin;%PATH%'
    - JOB: "R with libarrow"
      USE_CLCACHE: false
      TEST_R_WITH_ARROW: "TRUE"
      RWINLIB_LOCAL: '%APPVEYOR_BUILD_FOLDER%\libarrow.zip'

  MSVC_DEFAULT_OPTIONS: ON
  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

for:
-
  matrix:
    only:
      - JOB: "R with libarrow"
  init:
    ps: |
          $ErrorActionPreference = "Stop"
          Invoke-WebRequest http://raw.githubusercontent.com/krlmlr/r-appveyor/master/scripts/appveyor-tool.ps1 -OutFile "..\appveyor-tool.ps1"
          Import-Module '..\appveyor-tool.ps1'

  before_build:
    - cd r
    - ps: Bootstrap
    - cd %APPVEYOR_BUILD_FOLDER%

  build_script:
    - rmdir /s /Q C:\OpenSSL-Win32 C:\OpenSSL-Win64
    - C:\msys64\usr\bin\pacman --noconfirm --ask 20 --sync --refresh --refresh --sysupgrade --sysupgrade
    - C:\msys64\usr\bin\bash --login -c "$(cygpath ${APPVEYOR_BUILD_FOLDER})/ci/appveyor-build-r.sh"
    - pushd r
    - travis-tool.sh install_deps

  test_script:
    - travis-tool.sh run_tests

  on_failure:
    - travis-tool.sh dump_logs

  environment:
    NOT_CRAN: true

  artifacts:
    - path: '*.pkg.tar.xz'
      name: binaries

    - path: 'build\*.zip'
      name: binaries

    - path: 'r\*.Rcheck\**\*.log'
      name: Logs

    - path: 'r\*.Rcheck\**\*.out'
      name: Logs

    - path: 'r\*.Rcheck\**\*.fail'
      name: Logs

    - path: 'r\*.Rcheck\**\*.Rout'
      name: Logs

    - path: 'r\*_*.tar.gz'
      name: Bits

    - path: 'r\*_*.zip'
      name: Bits

# Disable test discovery
test: off

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