summaryrefslogtreecommitdiffstats
path: root/appveyor.yml
blob: 6ef08fd8df531fbb6d5703841ae9fdc12a7d195b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
version: '{build}'

os: Visual Studio 2015

environment:
  matrix:
    - compiler: msvc-15-seh
      generator: "Visual Studio 15 2017"
      build_system: cmake
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017

    - compiler: msvc-15-seh
      generator: "Visual Studio 15 2017 Win64"
      build_system: cmake
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
      enabled_on_pr: yes

    - compiler: msvc-15-seh
      build_system: bazel
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
      enabled_on_pr: yes

    - compiler: msvc-14-seh
      build_system: cmake
      generator: "Visual Studio 14 2015"
      enabled_on_pr: yes

    - compiler: msvc-14-seh
      build_system: cmake
      generator: "Visual Studio 14 2015 Win64"

    - compiler: gcc-6.3.0-posix
      build_system: cmake
      generator: "MinGW Makefiles"
      cxx_path: 'C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin'
      enabled_on_pr: yes

configuration:
  - Debug

build:
  verbosity: minimal

install:
- ps: |
    Write-Output "Compiler: $env:compiler"
    Write-Output "Generator: $env:generator"
    Write-Output "Env:Configuation: $env:configuration"
    Write-Output "Env: $env"
    if (-not (Test-Path env:APPVEYOR_PULL_REQUEST_NUMBER)) {
      Write-Output "This is *NOT* a pull request build"
    } else {
      Write-Output "This is a pull request build"
      if (-not (Test-Path env:enabled_on_pr) -or $env:enabled_on_pr -ne "yes") {
        Write-Output "PR builds are *NOT* explicitly enabled"
      }
    }

    # install Bazel
    if ($env:build_system -eq "bazel") {
        appveyor DownloadFile https://github.com/bazelbuild/bazel/releases/download/0.21.0/bazel-0.21.0-windows-x86_64.exe -FileName bazel.exe
    }

    if ($env:build_system -eq "cmake") {
        # git bash conflicts with MinGW makefiles
        if ($env:generator -eq "MinGW Makefiles") {
            $env:path = $env:path.replace("C:\Program Files\Git\usr\bin;", "")
            if ($env:cxx_path -ne "") {
                $env:path += ";$env:cxx_path"
            }
        }
    }

before_build:
- ps: |
     $env:root=$env:APPVEYOR_BUILD_FOLDER
     Write-Output "env:root: $env:root"

build_script:
- ps: |
    # Only enable some builds for pull requests, the AppVeyor queue is too long.
    if ((Test-Path env:APPVEYOR_PULL_REQUEST_NUMBER) -And (-not (Test-Path env:enabled_on_pr) -or $env:enabled_on_pr -ne "yes")) {
      return
    } else {
        # special case - build with Bazel
        if ($env:build_system -eq "bazel") {
            & $env:root\bazel.exe build -c opt //:gtest_samples
            if ($LastExitCode -eq 0) { # bazel writes to StdErr and PowerShell interprets it as an error
                $host.SetShouldExit(0)
            } else { # a real error
                throw "Exec: $ErrorMessage"
            }
            return
        }
    }
    # by default build with CMake
    md _build -Force | Out-Null
    cd _build

    $conf = if ($env:generator -eq "MinGW Makefiles") {"-DCMAKE_BUILD_TYPE=$env:configuration"} else {"-DCMAKE_CONFIGURATION_TYPES=Debug;Release"}
    # Disable test for MinGW (gtest tests fail, gmock tests can not build)
    $gtest_build_tests = if ($env:generator -eq "MinGW Makefiles") {"-Dgtest_build_tests=OFF"} else {"-Dgtest_build_tests=ON"}
    $gmock_build_tests = if ($env:generator -eq "MinGW Makefiles") {"-Dgmock_build_tests=OFF"} else {"-Dgmock_build_tests=ON"}
    & cmake -G "$env:generator" $conf -Dgtest_build_samples=ON $gtest_build_tests $gmock_build_tests ..
    if ($LastExitCode -ne 0) {
        throw "Exec: $ErrorMessage"
    }
    $cmake_parallel = if ($env:generator -eq "MinGW Makefiles") {"-j2"} else  {"/m"}
    & cmake --build . --config $env:configuration -- $cmake_parallel
    if ($LastExitCode -ne 0) {
        throw "Exec: $ErrorMessage"
    }


skip_commits:
  files:
    - '**/*.md'

test_script:
- ps: |
    # Only enable some builds for pull requests, the AppVeyor queue is too long.
    if ((Test-Path env:APPVEYOR_PULL_REQUEST_NUMBER) -And (-not (Test-Path env:enabled_on_pr) -or $env:enabled_on_pr -ne "yes")) {
      return
    }
    if ($env:build_system -eq "bazel") {
        # special case - testing with Bazel
        & $env:root\bazel.exe test //:gtest_samples
        if ($LastExitCode -eq 0) { # bazel writes to StdErr and PowerShell interprets it as an error
            $host.SetShouldExit(0)
        } else { # a real error
            throw "Exec: $ErrorMessage"
        }
    }
    if ($env:build_system -eq "cmake") {
        # built with CMake - test with CTest
        if ($env:generator -eq "MinGW Makefiles") {
            return # No test available for MinGW
        }

        & ctest -C $env:configuration --timeout 600 --output-on-failure
        if ($LastExitCode -ne 0) {
            throw "Exec: $ErrorMessage"
        }
    }

artifacts:
  - path: '_build/CMakeFiles/*.log'
    name: logs
  - path: '_build/Testing/**/*.xml'
    name: test_results
  - path: 'bazel-testlogs/**/test.log'
    name: test_logs
  - path: 'bazel-testlogs/**/test.xml'
    name: test_results