# 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_FLIGHT: "OFF"
    ARROW_BUILD_GANDIVA: "OFF"
    ARROW_LLVM_VERSION: "7.0.*"
    ARROW_S3: "OFF"
    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_S3: "ON"
      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
