# 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.
version: '{build}'
os: Windows Server 2012
init:		
 - git config --global core.autocrlf true
install:
  # Make unix-compatible patch.exe available to the build by copying it from
  # Git\usr\bin (that we remove from PATH) to another directory and adding it to
  # PATH; the reason we copy it is that logic below removes
  # C:\Program Files\Git\usr\bin from Path to avoid build issue resulting from
  # sh.exe being on the path.
  - cmd: mkdir "C:\Program Files\PatchFromGit"
  - ps: copy "C:\Program Files\Git\usr\bin\patch.exe" "C:\Program Files\PatchFromGit"
  - ps: copy "C:\Program Files\Git\usr\bin\msys*.dll" "C:\Program Files\PatchFromGit"
  - cmd: SET PATH=C:\Program Files\PatchFromGit;%PATH%

  - ps: |
      Add-Type -AssemblyName System.IO.Compression.FileSystem
      if (!(Test-Path -Path "C:\maven" )) {
        (new-object System.Net.WebClient).DownloadFile('https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip', 'C:\maven-bin.zip')
        [System.IO.Compression.ZipFile]::ExtractToDirectory("C:\maven-bin.zip", "C:\maven")
      }
  - cmd: SET PATH=C:\maven\apache-maven-3.5.4\bin;%JAVA_HOME%\bin;%PATH%
  - cmd: SET JAVA_HOME=C:\Program Files\Java\jdk1.8.0
  - cmd: SET M2_HOME=C:\maven\apache-maven-3.5.4
  - cmd: SET MAVEN_OPTS=-Xmx4g
  - cmd: SET JAVA_OPTS=-Xmx4g

  - echo %PATH%
build_script:
  - mvn --show-version --quiet -T 1C -PskipTests,all,without-eclipse --batch-mode
test_script:
  - cd fit\core-reference
  - mvn clean verify
cache:
  - C:\maven\
  - C:\Users\appveyor\.m2
