bond/appveyor.yml

326 строки
11 KiB
YAML

# fsharp feature branch
-
version: 1.0.{build}
clone_depth: 15
branches:
only:
- fsharp
configuration: Debug
build:
project: fsharp\fsharp.sln
verbosity: minimal
test:
assemblies: fsharp\test\TypeProvider\bin\$(configuration)\BondFsharpUnitTest.dll
# other branches
-
version: 1.0.{build}
clone_depth: 15
environment:
global:
STACK_ROOT: "c:\\sr"
BOND_TOKEN:
secure: MdnZ86SpR3+/fVz2u31blV83LH6juiobrvO/l1Ak4zG7ykxtvfUI/Vd4l7etYB4J
# The slowest configurations should come first to help reduce
# overall completion time since we run multiple configurations in
# parallel.
matrix:
# C++ Core build and tests (Visual C++ 2013)
- BOND_BUILD: C++
BOND_VS: "Visual Studio 12 2013"
BOND_VS_NUM: 12
BOND_ARCH: 32
BOND_BOOST: 58
BOND_CMAKE_FLAGS: "-DBOND_ENABLE_GRPC=FALSE;-DBOND_SKIP_GBC_TESTS=TRUE"
# C++ Core build and tests
- BOND_BUILD: C++
BOND_VS: "Visual Studio 14 2015"
BOND_VS_NUM: 14
BOND_ARCH: 64
BOND_BOOST: 60
BOND_CMAKE_FLAGS: "-DBOND_ENABLE_GRPC=FALSE"
- BOND_BUILD: C#
BOND_OUTPUT: Properties
BOND_CONFIG: Debug
- BOND_BUILD: "C# .NET Core"
BOND_CONFIG: Debug
- BOND_BUILD: Doc
- BOND_BUILD: C#
BOND_OUTPUT: Fields
BOND_CONFIG: Fields
- BOND_BUILD: Python
BOND_VS: "Visual Studio 14 2015"
BOND_VS_NUM: 14
BOND_ARCH: 32
BOND_BOOST: 60
BOND_CMAKE_FLAGS: "-DBOND_ENABLE_GRPC=FALSE"
- BOND_BUILD: Python
BOND_VS: "Visual Studio 14 2015"
BOND_VS_NUM: 14
BOND_ARCH: 64
BOND_BOOST: 63
BOND_CMAKE_FLAGS: "-DBOND_ENABLE_GRPC=FALSE"
# C++ Comm build and tests
- BOND_BUILD: C++
BOND_VS: "Visual Studio 14 2015"
BOND_VS_NUM: 14
BOND_ARCH: 64
BOND_BOOST: 63
BOND_CMAKE_FLAGS: "-DBOND_ENABLE_COMM=TRUE;-DBOND_ENABLE_GRPC=FALSE;-DBOND_SKIP_CORE_TESTS=TRUE;-DBOND_SKIP_GBC_TESTS=TRUE"
# C++ gRPC build and tests
- BOND_BUILD: C++
BOND_VS: "Visual Studio 14 2015"
BOND_VS_NUM: 14
BOND_ARCH: 64
BOND_BOOST: 63
BOND_CMAKE_FLAGS: "-DBOND_SKIP_CORE_TESTS=TRUE;-DBOND_SKIP_GBC_TESTS=TRUE"
# C++ Comm build and tests (Visual C++ 2013)
- BOND_BUILD: C++
BOND_VS: "Visual Studio 12 2013"
BOND_VS_NUM: 12
BOND_ARCH: 64
BOND_BOOST: 58
BOND_CMAKE_FLAGS: "-DBOND_ENABLE_COMM=TRUE;-DBOND_ENABLE_GRPC=FALSE;-DBOND_SKIP_CORE_TESTS=TRUE;-DBOND_SKIP_GBC_TESTS=TRUE"
install:
- ps: >-
if (($env:BOND_BUILD -eq 'C++') -or ($env:BOND_BUILD -eq 'Python')) {
git submodule update --init thirdparty\rapidjson
# If gRPC is not disabled, init gRPC and its dependencies
if (($env:BOND_BUILD -eq 'C++') -and (-not ($env:BOND_CMAKE_FLAGS -match '-DBOND_ENABLE_GRPC=FALSE'))) {
git submodule update --init --recursive thirdparty\grpc
}
}
if ($env:BOND_BOOST -eq 56) {
# Hard-coded Boost path per https://www.appveyor.com/docs/installed-software#languages-libraries-frameworks
$env:BOOST_ROOT = "C:/Libraries/boost"
$env:BOOST_LIBRARYDIR = "C:/Libraries/boost/lib${env:BOND_ARCH}-msvc-${env:BOND_VS_NUM}.0"
}
else {
$env:BOOST_ROOT = "C:/Libraries/boost_1_${env:BOND_BOOST}_0"
$env:BOOST_LIBRARYDIR = "C:/Libraries/boost_1_${env:BOND_BOOST}_0/lib${env:BOND_ARCH}-msvc-${env:BOND_VS_NUM}.0"
}
choco install haskell-stack -y
# choco install updated the path, so re-read them from the registry and reset $env:path
$machinePath = [System.Environment]::GetEnvironmentVariable("Path","Machine")
$userPath = [System.Environment]::GetEnvironmentVariable("Path","User")
$env:Path = "$machinePath;$userPath"
if ($env:BOND_BUILD -eq "Doc") {
choco install pandoc --version 1.19.2 -y
choco install doxygen.install -y
$machinePath = [System.Environment]::GetEnvironmentVariable("Path","Machine")
$userPath = [System.Environment]::GetEnvironmentVariable("Path","User")
$env:Path = "$machinePath;$userPath"
}
if (($env:BOND_BUILD -eq 'C++') -and (-not ($env:BOND_CMAKE_FLAGS -match '-DBOND_ENABLE_GRPC=FALSE'))) {
# We're building C++ and gRPC isn't disabled, so we need
# gRPC dependencies.
choco install yasm -y
$machinePath = [System.Environment]::GetEnvironmentVariable("Path","Machine")
$userPath = [System.Environment]::GetEnvironmentVariable("Path","User")
$env:Path = "$machinePath;$userPath"
}
cache:
- cs\packages -> cs\test\core\packages.config
- "c:\\sr"
before_build:
- ps: >-
$env:PreferredToolArchitecture = "x64"
$env:_IsNativeEnvironment = "true"
$cmakeGenerator = $env:BOND_VS
if ($env:BOND_ARCH -eq 64) {
$cmakeGenerator += " Win64"
}
$cmakeFlags = $env:BOND_CMAKE_FLAGS -split ';'
if ($env:BOND_BUILD -eq "C#" -Or $env:BOND_BUILD -eq "C++") {
nuget restore cs\cs.sln
}
if ($env:BOND_BUILD -eq "Python" -Or $env:BOND_BUILD -eq "C++") {
# Make sure we have Python27-64 before any other version
if ($env:BOND_ARCH -eq 64) {
$env:Path = "C:\Python27-x64\scripts;C:\Python27-x64\;${env:Path}"
}
}
if ($env:BOND_BUILD -eq "Python") {
mkdir build
cd build
cmake "-DBoost_ADDITIONAL_VERSIONS=1.${env:BOND_BOOST}.0" $cmakeFlags -G $cmakeGenerator ..
}
if ($env:BOND_BUILD -eq "C++") {
# We don't always need all of these compat tests--depending
# on what part of C++ we're building--but they're pretty
# fast to build, so build them all.
$compatTests = ('Tests\CommCompatClient', 'Tests\CommCompatServer', 'Tests\Compat', 'Tests\GrpcCompatClient', 'Tests\GrpcCompatServer')
msbuild cs\cs.sln /verbosity:minimal "/target:$($compatTests -join ';')" /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
if (-not $?) { throw "cs compat build failed" }
mkdir build
cd build
cmake $cmakeFlags -G $cmakeGenerator .. 2>cmake_stderr.log
Get-Content cmake_stderr.log
}
if ($env:BOND_BUILD -eq "Doc") {
mkdir build
cd build
cmake ../doc
}
build_script:
- ps: >-
$env:PreferredToolArchitecture = "x64"
$env:_IsNativeEnvironment = "true"
if ($env:BOND_BUILD -eq "Doc") {
cmake --build . --target documentation -- /verbosity:minimal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
if ($? -And $env:BOND_TOKEN -And $env:APPVEYOR_REPO_BRANCH -eq "master") {
git config --global user.email "bondlab@microsoft.com"
git config --global user.name "Appveyor"
git clone -b gh-pages "https://${env:BOND_TOKEN}@github.com/Microsoft/bond.git" gh-pages 2>&1 | out-null
cd gh-pages
if (-not $?) { throw "Cloning gh-pages failed" }
Remove-Item * -Recurse
Copy-Item ..\html\* . -Recurse
git add --all .
git commit -m "Update documentation"
git push origin gh-pages 2>&1 | out-null
cd ..
}
}
if ($env:BOND_BUILD -eq "Python") {
cmake --build . --target python_unit_test -- /verbosity:minimal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
}
if ($env:BOND_BUILD -eq "C++") {
cmake --build . --target check -- /verbosity:minimal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
}
if ($env:BOND_BUILD -eq "C#") {
msbuild cs\cs.sln /verbosity:minimal /p:Configuration=${env:BOND_CONFIG} /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
}
if ($env:BOND_BUILD -eq "C# .NET Core") {
& cs\dnc\build.ps1 -Configuration $env:BOND_CONFIG -Verbosity minimal -MSBuildLogger "C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
}
if (-not $?) { throw "build failed" }
test_script:
- ps: >-
if ($env:BOND_BUILD -eq "Python") {
ctest -C Debug --tests-regex python_unit_test --output-on-failure
if (-not $?) { throw "tests failed" }
}
if ($env:BOND_BUILD -eq "C#") {
nunit-console-x86 /framework:net-4.5 /labels "cs\test\core\bin\debug\net45\${env:BOND_OUTPUT}\Bond.UnitTest.dll" cs\test\internal\bin\debug\net45\Bond.InternalTest.dll
if (-not $?) { throw "tests failed" }
nunit-console-x86 /framework:net-4.5 /labels "cs\test\core\bin\debug\net45-nonportable\${env:BOND_OUTPUT}\Bond.UnitTest.dll"
if (-not $?) { throw "tests failed" }
& examples\cs\grpc\pingpong\bin\Debug\grpc-pingpong.exe
if (-not $?) { throw "tests failed" }
& examples\cs\grpc\scalar\bin\Debug\grpc-scalar.exe
if (-not $?) { throw "tests failed" }
# We need to investigate why these tests are failing in AppVeyor, but not locally.
# nunit-console-x86 /framework:net-4.5 /labels "cs\test\comm\bin\debug\net45\${env:BOND_OUTPUT}\Bond.Comm.UnitTest.dll"
# if (-not $?) { throw "tests failed" }
}
if ($env:BOND_BUILD -eq "C# .NET Core") {
& cs\dnc\build.ps1 -Test -Configuration $env:BOND_CONFIG -Verbosity minimal -MSBuildLogger "C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
if (-not $?) { throw "tests failed" }
}
if (-not $?) { throw "build failed" }