# 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://www.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-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
