Created
July 10, 2021 17:29
-
-
Save jakoch/4545d0c4ebb9240d5391cb0f2a2bb5f2 to your computer and use it in GitHub Desktop.
appveyor build script for an ttauri based application
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#------------------------------------------------------------------- | |
# AppVeyor build configuration | |
# https://www.appveyor.com/docs/ | |
# https://www.appveyor.com/docs/appveyor-yml/ | |
#------------------------------------------------------------------- | |
clone_depth: 5 | |
version: '{build}' | |
#------------------------------------------------------------------- | |
# Build configuration | |
#------------------------------------------------------------------- | |
# defaults | |
platform: x64 | |
configuration: Release | |
environment: | |
# appveyor | |
APPVEYOR_SAVE_CACHE_ON_ERROR: true | |
APPVEYOR_CACHE_ENTRY_ZIP_ARGS: -t7z -m0=lzma -mx=5 | |
APPVEYOR_RDP_PASSWORD: somePassword#123 | |
# vcpkg | |
VCPKG_ROOT: "C:\\Tools\\vcpkg" | |
# vulkan | |
VULKAN_VERSION: "1.2.170.0" | |
VULKAN_SDK: "C:\\VulkanSDK\\%VULKAN_VERSION%" | |
VULKAN_SDK_URL: "https://sdk.lunarg.com/sdk/download/%VULKAN_VERSION%/windows/VulkanSDK-%VULKAN_VERSION%-Installer.exe?Human=true" | |
VULKAN_RUNTIME_URL: "https://sdk.lunarg.com/sdk/download/%VULKAN_VERSION%/windows/vulkan-runtime-components.zip?Human=true" | |
# the build matrix | |
# Platform | Compiler | Target Triplet | Build Type | |
matrix: | |
# Windows | MSVC 2019 | x64-windows-static | ReleaseWithDebugInfo | |
# | |
- APPVEYOR_JOB_NAME: Win-MSVC19-x64-Static-RelWithDebInfo | |
VCPKG_TARGET_TRIPLET: "x64-windows-static" | |
COMPILER: MSVC19 | |
BUILD_TYPE: RelWithDebInfo | |
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 | |
# Windows | MSVC 2019 Preview | x64-windows-static | ReleaseWithDebugInfo | |
# | |
- APPVEYOR_JOB_NAME: Win-MSVC19-x64-Static-RelWithDebInfo | |
VCPKG_TARGET_TRIPLET: "x64-windows-static" | |
COMPILER: MSVC19 | |
BUILD_TYPE: RelWithDebInfo | |
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 Preview | |
build: | |
# MSBuild verbosity level | |
verbosity: minimal | |
# scripts that are called at very beginning, before repo cloning | |
init: | |
- ps: | | |
function Invoke-IgnoreStderr { | |
param($command) | |
& $command @args | |
if ($LASTEXITCODE -eq 0) { | |
$host.SetShouldExit(0) | |
} else { | |
throw | |
} | |
} | |
- ps: Get-Date | |
- ps: cmake --version | |
- ps: msbuild /version | |
- ps: vcpkg version | |
- ps: | | |
if ($env:COMPILER -eq "CLANG") { | |
clang++ -v | |
} | |
- ps: Write-Host "Number of processors; $env:NUMBER_OF_PROCESSORS" | |
install: | |
- ps: | | |
$vcpkg_json = Get-Content "vcpkg.json" -Raw | ConvertFrom-Json | |
$env:PROJECT_VERSION = $vcpkg_json."version" | |
# If appveyor was launched due to a tag push: | |
# The BUILD_VERSION_NUMBER is the name of the tag, example: "v1.2.3" | |
# If appveyor was launched due to an commit or pull request: | |
# The BUILD_VERSION_NUMBER is extracted from `cvpkg.txt`, | |
# together with the first 7 sha-digits, example: "v1.2.3-89abcde" | |
# | |
# The BUILD_VERSION_NUMBER is later also used for naming the release folder, e.g. | |
# "[APPVEYOR_PROJECT_SLUG]-[BUILD_VERSION_NUMBER]" -> "ttauri-hello-world-v1.2.3-89abcde". | |
if ($env:APPVEYOR_REPO_TAG -eq "true") { | |
$env:BUILD_VERSION_NUMBER = "$env:APPVEYOR_REPO_TAG_NAME" | |
} else { | |
$env:BUILD_VERSION_NUMBER = "v$env:PROJECT_VERSION-$($env:APPVEYOR_REPO_COMMIT.substring(0,7))" | |
} | |
$env:BUILD_VERSION_NUMBER_US = $env:BUILD_VERSION_NUMBER -replace "\.","-" | |
# CPack will use the name as follows to create a .json file and -file directory | |
$env:CPACK_NAME = "$env:APPVEYOR_PROJECT_SLUG-$env:PROJECT_VERSION-$env:VCPKG_TARGET_TRIPLET" | |
# The .zip file we will create that contains the CPack files will use the BUILD_VERSION_NUMBER | |
$env:PACKAGE_NAME = "$env:APPVEYOR_PROJECT_SLUG-$env:BUILD_VERSION_NUMBER_US-$env:VCPKG_TARGET_TRIPLET" | |
- ps: Write-Host "build_version_number; $env:BUILD_VERSION_NUMBER" | |
- ps: Update-AppveyorBuild -Version "$env:BUILD_VERSION_NUMBER" | |
# Update VCPKG use our custom version to be able to use ttauri | |
- ps: Push-Location "C:\Tools\vcpkg" | |
#- ps: Invoke-IgnoreStderr git remote set-url origin https://github.com/ttauri-project/vcpkg.git | |
#- ps: Invoke-IgnoreStderr git fetch origin | |
#- ps: Invoke-IgnoreStderr git checkout ttauri-port | |
- ps: Invoke-IgnoreStderr git pull --quiet | |
- ps: .\bootstrap-vcpkg.bat -disableMetrics | |
- ps: vcpkg version | |
- ps: Pop-Location | |
- ps: vcpkg integrate install --triplet=$env:VCPKG_TARGET_TRIPLET --feature-flags=manifests | |
# Download and install the VULKAN_SDK | |
# You can not install the VulkanSDK using power-shell, due to the install script requiring | |
# UAC which requires full administration privileges which power-shell does not allow unless | |
# the script is code-signed. | |
- ps: | | |
if (-not (Test-Path -LiteralPath $env:VULKAN_SDK\Bin)) { | |
Start-FileDownload "$env:VULKAN_SDK_URL" -FileName "Vulkan_SDK_Installer.exe" | |
} | |
- cmd: IF EXIST "Vulkan_SDK_Installer.exe" ( .\Vulkan_SDK_Installer.exe /S ) | |
- ps: Get-ChildItem "$env:VULKAN_SDK" | |
- ps: | | |
# Install Vulkan Runtime (for vulkan-1.dll) | |
if (-not (Test-Path -LiteralPath $env:VULKAN_SDK\runtime)) { | |
Start-FileDownload "$env:VULKAN_RUNTIME_URL" -FileName "vulkan-runtime.zip" | |
7z e "vulkan-runtime.zip" -o"$env:VULKAN_SDK\runtime\$env:PLATFORM" "*/$env:PLATFORM" | |
} | |
- ps: Get-ChildItem "$env:VULKAN_SDK\runtime\$env:PLATFORM" | |
# Init MSVC environment, see https://www.appveyor.com/docs/lang/cpp/ | |
- cmd: if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019 Preview" | |
(call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Auxiliary\Build\vcvarsall.bat" %PLATFORM% ) | |
- cmd: if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" | |
(call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" %PLATFORM% ) | |
before_build: | |
# CHECK important folders to see if everything is present | |
- ps: Write-Host "Current Directory; $(Get-Location)" | |
- ps: Get-ChildItem | |
- ps: Get-ChildItem $env:VULKAN_SDK\Bin | |
build_script: | |
- ps: New-Item -Path "." -Name "build" -ItemType "Directory" -Force | |
- ps: Push-Location "build" | |
- ps: | | |
# | |
# generate build files | |
# | |
if ("$env:COMPILER" -eq "MSVC19") { | |
Invoke-IgnoreStderr cmake -G "Visual Studio 16 2019" -A $env:PLATFORM .. ` | |
-DVCPKG_TARGET_TRIPLET="$env:VCPKG_TARGET_TRIPLET" ` | |
-DCMAKE_VERBOSE_MAKEFILE=ON | |
if ($LASTEXITCODE -eq 0) { $host.SetShouldExit(0) } | |
} elseif ("$env:COMPILER" -eq "CLANG") { | |
Invoke-IgnoreStderr cmake -G "Visual Studio 16 2019" -A $env:PLATFORM -T ClangCL .. ` | |
-DVCPKG_TARGET_TRIPLET="$env:VCPKG_TARGET_TRIPLET" ` | |
-DCMAKE_VERBOSE_MAKEFILE=ON ` | |
-DCMAKE_C_COMPILER=C:/PROGRA~1/LLVM/bin/clang.exe ` | |
-DCMAKE_CXX_COMPILER=C:/PROGRA~1/LLVM/bin/clang-cl.exe | |
if ($LASTEXITCODE -eq 0) { $host.SetShouldExit(0) } | |
} else { | |
Write-Host "Unknown compiler requested". | |
throw | |
} | |
- ps: Invoke-IgnoreStderr cmake --build . --config $env:BUILD_TYPE -j $($env:NUMBER_OF_PROCESSORS + 1) "--" ` | |
/logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" | |
- ps: Invoke-IgnoreStderr cmake --install . --config $env:BUILD_TYPE --prefix ..\install --strip --verbose | |
# Generate a CPack-external package. Then make a .zip file from the install-components | |
# and the cpack.json file which where generated by CPack-external. | |
- ps: Invoke-IgnoreStderr cmake --build . --config $env:BUILD_TYPE --target package | |
- ps: Push-Location "$env:CPACK_NAME-files" | |
- ps: Copy-Item "..\$env:CPACK_NAME.json" -Destination "ecpack.json" | |
- ps: 7z a -r -- "..\$env:PACKAGE_NAME-ecpack.zip" "*" | |
- ps: Pop-Location | |
# Go back cloned project directory | |
- ps: Pop-Location | |
after_build: | |
# Check if all build artifacts are present, before packaging. | |
- ps: Get-ChildItem "build" | |
- ps: Get-ChildItem "install" | |
on_failure: | |
- ps: Push-AppveyorArtifact "$env:APPVEYOR_BUILD_FOLDER\build\CMakeFiles\CMakeOutput.log" | |
- ps: Push-AppveyorArtifact "$env:APPVEYOR_BUILD_FOLDER\build\CMakeFiles\CMakeError.log" | |
#------------------------------------------------------------------- | |
# Build Artifacts | |
#------------------------------------------------------------------- | |
artifacts: | |
- path: build\%PACKAGE_NAME%-ecpack.zip | |
name: "ECPack file" | |
#------------------------------------------------------------------- | |
# Deployment configuration | |
#------------------------------------------------------------------- | |
# deploy to Github Releases on tag push (conditional deploy) | |
#deploy: | |
# provider: GitHub | |
# release: 'hello-world $(APPVEYOR_REPO_TAG_NAME)' | |
# tag: $(APPVEYOR_REPO_TAG_NAME) | |
# #description: '[**Changelog**](https://github.com/ttauri-project/ttauri_hello_world/blob/main/CHANGELOG.md)' | |
# artifact: ttauri_hello_world_zip | |
# draft: false | |
# prerelease: false | |
# force_update: true # overwrite files of existing release on GitHub (for re-releasing) | |
# on: | |
# branch: main # release from main branch only | |
# appveyor_repo_tag: true # deploy on tag push only | |
# auth_token: # encrypted token from GitHub | |
# secure: *hash* | |
#------------------------------------------------------------------- | |
# Cache things until an appveyor.yml file change | |
#------------------------------------------------------------------- | |
cache: | |
- '%APPVEYOR_BUILD_FOLDER%\build\vcpkg_installed -> %APPVEYOR_BUILD_FOLDER%\build\vcpkg_installed\vcpkg\status' | |
- '%VULKAN_SDK%\Bin -> appveyor.yml' | |
- '%VULKAN_SDK%\Bin32 -> appveyor.yml' | |
- '%VULKAN_SDK%\Include -> appveyor.yml' | |
- '%VULKAN_SDK%\Lib -> appveyor.yml' | |
- '%VULKAN_SDK%\Lib32 -> appveyor.yml' | |
- '%VULKAN_SDK%\runtime -> appveyor.yml' | |
#------------------------------------------------------------------- | |
# Accessing Windows build worker via Remote Desktop (RDP) | |
#------------------------------------------------------------------- | |
# Enable RDP session to Appveyor server by enabling the two on_finish lines. | |
# You connect using a remote desktop connection (e.g. using mstsc.exe). | |
# Use PW from APPVEYOR_RDP_PASSWORD above. A session lasts 60min max. | |
# Do not forget to disable the following lines, when you solved the problem. | |
#on_finish: | |
# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment