Handle problems caused by runner and Docker image updates #910
Workflow file for this run
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
# Copyright 2015-2020 The Khronos Group Inc. | |
# SPDX-License-Identifier: Apache-2.0 | |
name: KTX-Software Windows CI | |
# Seems no way to avoid duplicating this on logic in each .yml file. | |
# See https://github.com/actions/starter-workflows/issues/245. | |
on: | |
# Trigger the workflow on a pull request, | |
pull_request: | |
push: | |
# And on pushes to main, which will occur when a PR is merged. | |
branches: | |
- main | |
# Also trigger on push of release tags to any branch. Useful | |
# for testing release builds before merging to main. | |
tags: | |
- 'v[0-9]+.[0-9]+.[0-9]+' | |
- 'v[0-9]+.[0-9]+.[0-9]+-*' | |
paths-ignore: | |
- .appveyor.yml | |
- .travis.yml | |
# Allow manual trigger | |
workflow_dispatch: | |
jobs: | |
#formatting: | |
# uses: ./.github/workflows/formatting.yml | |
windows: | |
# Shortcircuit and don't burn CI time when formatting will reject | |
#needs: formatting | |
strategy: | |
matrix: | |
os: [ windows-latest ] | |
generator: [ 'Visual Studio 17 2022' ] | |
toolset: [v143, CLangCL] | |
arch: [ x64 ] | |
check_mkvk: [ NO ] | |
options: [ | |
{config: 'Debug,Release', | |
doc: ON, jni: ON, loadtests: OpenGL+Vulkan, py: ON, tests: ON, tools: ON, tools_cts: ON, | |
package: YES, | |
sse: ON, opencl: OFF}, | |
{config: Release, | |
doc: OFF, loadtests: OFF, py: OFF, tests: OFF, tools: OFF, tools_cts: OFF, | |
package: NO, | |
sse: OFF, opencl: OFF}, | |
{config: Release, | |
doc: OFF, loadtests: OFF, py: OFF, tests: OFF, tools: OFF, tools_cts: OFF, | |
package: NO, | |
sse: OFF, opencl: ON}, | |
{config: Release, | |
doc: OFF, loadtests: OFF, py: OFF, tests: OFF, tools: OFF, tools_cts: OFF, | |
package: NO, | |
sse: ON, opencl: ON} | |
] | |
include: | |
- os: windows-2019 | |
generator: 'Visual Studio 16 2019' | |
toolset: v142 | |
arch: x64 | |
options: { | |
config: 'Debug,Release', | |
doc: ON, jni: ON, loadtests: OpenGL+Vulkan, py: ON, tests: ON, tools: ON, tools_cts: ON, | |
package: NO, | |
sse: ON, opencl: OFF | |
} | |
- os: windows-latest | |
generator: 'Visual Studio 17 2022' | |
toolset: CLangCL | |
arch: arm64 | |
options: { | |
config: 'Debug,Release', | |
doc: ON, jni: ON, loadtests: OpenGL+Vulkan, py: OFF, tests: ON, tools: ON, tools_cts: ON, | |
package: YES | |
} | |
runs-on: ${{ matrix.os }} | |
env: | |
# Skip downloading necessities for the load tests and source and golden | |
# images for the other tests since we can't run arm64 tests on the x64 | |
# build host. | |
GIT_LFS_SKIP_SMUDGE: 1 | |
BUILD_DIR: "build" | |
CMAKE_GEN: ${{ matrix.generator }} | |
CMAKE_TOOLSET: ${{ matrix.toolset }} | |
ARCH: ${{ matrix.arch }} | |
CHECK_MKVK: ${{ matrix.check_mkvk }} | |
CONFIGURATION: ${{ matrix.options.config }} | |
FEATURE_DOC: ${{ matrix.options.doc }} | |
FEATURE_JNI: ${{ matrix.options.jni }} | |
FEATURE_LOADTESTS: ${{ matrix.options.loadtests }} | |
FEATURE_PY: ${{ matrix.options.py }} | |
FEATURE_TESTS: ${{ matrix.options.tests }} | |
FEATURE_TOOLS: ${{ matrix.options.tools }} | |
FEATURE_TOOLS_CTS: ${{ matrix.options.tools_cts }} | |
PACKAGE: ${{ matrix.options.package }} | |
SUPPORT_OPENCL: ${{ matrix.options.opencl }} | |
SUPPORT_SSE: ${{ matrix.options.sse }} | |
WERROR: ON | |
CODE_SIGN_TIMESTAMP_URL: "http://timestamp.digicert.com" | |
AZURE_KEY_VAULT_URL: ${{ secrets.AZURE_KEY_VAULT_URL }} | |
AZURE_KEY_VAULT_CERTIFICATE: ${{ secrets.AZURE_KEY_VAULT_CERTIFICATE }} | |
AZURE_KEY_VAULT_CLIENT_ID: ${{ secrets.AZURE_KEY_VAULT_CLIENT_ID }} | |
AZURE_KEY_VAULT_CLIENT_SECRET: ${{ secrets.AZURE_KEY_VAULT_CLIENT_SECRET }} | |
AZURE_KEY_VAULT_TENANT_ID: ${{ secrets.AZURE_KEY_VAULT_TENANT_ID }} | |
OPENCL_SDK_HOME: https://github.com/intel/llvm/releases/download/2021-09 | |
OPENCL_SDK_NAME: win-oclcpuexp-2021.12.9.0.24_rel | |
OPENGL_ES_EMULATOR: C:/Imagination/Windows_x86_64 | |
OPENGL_ES_EMULATOR_WIN: C:\Imagination\Windows_x86_64 | |
PVR_SDK_HOME: https://github.com/powervr-graphics/Native_SDK/raw/master/lib/Windows_x86_64/ | |
PYTHON: C:\hostedtoolcache\windows\Python\3.11.4\x64\python.exe | |
# This is set to avoid the compiler running out of heap space | |
# when vcpkg is compiling glew. Default is logical cores + 1. | |
# Runners have 1 thread per core and 2 cores. | |
VCPKG_MAX_CONCURRENCY: 2 | |
VULKAN_SDK_VER: 1.3.290.0 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
# Fetch all history to make sure tags are | |
# included (used for version creation) | |
fetch-depth: 0 | |
- name: Install NSIS with large string support | |
if: matrix.check_mkvk != 'ONLY' | |
shell: bash | |
run: | | |
retryCount=4 | |
success=0 | |
for i in $(seq $retryCount) ; do | |
echo "Attempt no: $i" | |
stack exec -- wget -O nsis-3.08-strlen_8192.zip https://downloads.sourceforge.net/nsis/NSIS%203/3.08/nsis-3.08-strlen_8192.zip | |
if [[ $? -eq 0 ]] ; then | |
success=1 | |
7z x -aoa -o"/c/Program Files (x86)/NSIS" nsis-3.08-strlen_8192.zip | |
rm nsis-3.08-strlen_8192.zip | |
echo "Installation successful." | |
break | |
else | |
echo "Installation failed. Retrying..." | |
sleep $(( 2*$i )) | |
fi | |
done | |
if (( ! $success )) ; then | |
echo "Installation failed after $retryCount attempts." | |
exit 1 | |
fi | |
- name: Force fetch provoking tag's annotation. | |
# Work around https://github.com/actions/checkout/issues/290. | |
if: github.ref_type == 'tag' && matrix.check_mkvk != 'ONLY' | |
run: git fetch -f origin ${{ github.ref }}:${{ github.ref }} | |
# Need doxygen and graphviz if docs are supposed to be built. | |
# Note these suffer frequent failures due to Chocolatey attempts | |
# to blackmail you into purchasing a license. Hence we retry a | |
# few times. If this still fails, re-run the build. | |
- name: Install Doxygen and Graphviz | |
if: matrix.options.doc == 'ON' | |
#run: choco install doxygen.install | |
#run: choco install graphviz | |
run: | | |
function Install-WithChoco { | |
param ( $Package ) | |
$retryCount = 4 | |
$success = $false | |
for ($i = 1; $i -le $retryCount; $i++) { | |
Write-Host "Attempt no $i for $Package" | |
# Without | Out-Host the choco output becomes output of this | |
# function because it is called from within `if`. | |
choco install $Package --no-progress --yes | Out-Host | |
if ($LASTEXITCODE -eq 0) { | |
$success = $true | |
Write-Host "$Package installation successful." | |
break | |
} else { | |
Write-Host "$Package installation failed. Retrying..." | |
Start-Sleep -Seconds (2*$i) | |
} | |
} | |
if (-not $success) { | |
Write-Host "$Package installation failed after $retryCount attempts." | |
} | |
return $success | |
} | |
if (-not ((Install-WithChoco doxygen.install) -and (Install-WithChoco graphviz))) { | |
exit 1 | |
} | |
- name: Install AzureSignTool | |
if: matrix.check_mkvk != 'ONLY' | |
id: install-ast | |
run: | | |
if ($env:PACKAGE -eq "YES" -and $env:AZURE_KEY_VAULT_URL) { | |
dotnet tool install --global AzureSignTool | |
echo "CODE_SIGN_KEY_VAULT=Azure" >> $env:GITHUB_ENV | |
} | |
- name: Export GitHub Actions cache and vcpkg environment variables | |
if: matrix.options.loadtests != 'OFF' | |
uses: actions/github-script@v7 | |
with: | |
# Caution. JSON in use. "#core" breaks the build. | |
script: | | |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); | |
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); | |
core.exportVariable('VCPKG_BINARY_SOURCES', "clear;x-gha,readwrite"); | |
core.exportVariable('VCPKG_ROOT', process.env.VCPKG_INSTALLATION_ROOT || ''); | |
- name: Setup PIP_CONSTRAINTS (workaround https://github.com/python-cffi/cffi/issues/117) | |
if: matrix.options.py == 'ON' && matrix.check_mkvk != 'ONLY' | |
run: | |
echo 'setuptools<74' > $env:BUILD_DIR/constraint.txt | |
echo "PIP_CONSTRAINT=$env:BUILD_DIR/constraint.txt" >> $env:GITHUB_ENV | |
- name: Install Dependencies | |
if: matrix.check_mkvk != 'ONLY' | |
# This script only installs what's needed by ON FEATUREs. | |
run: scripts/install_win.ps1 | |
- name: Set up JDK 17. | |
if: matrix.options.jni == 'ON' && matrix.check_mkvk != 'ONLY' | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: '17' | |
- name: Set up Python 3.11 | |
if: matrix.options.py == 'ON' && matrix.check_mkvk != 'ONLY' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11.4' | |
- name: Init CTS submodule | |
if: matrix.options.tools_cts =='ON' | |
run: | |
git submodule update --init --recursive tests/cts | |
- name: Smudge embedded dates | |
if: matrix.options.doc == 'ON' | |
run: | | |
./install-gitconfig.ps1 | |
scripts/smudge_date.ps1 | |
- name: Build Windows | |
if: matrix.check_mkvk != 'ONLY' | |
# The installers run as part of "Install Dependencies" add | |
# environment variables to the registry and augment $Path there. | |
# Although each step gets a new Powershell instance, that instance | |
# is spawned from some parent Powershell so it does not pick up | |
# the changes from the registry. Use Chocolatey's helper to | |
# pull in the changes. | |
# After import, `refreshenv` is an alias for | |
# Update-SessionEnvironment. Without the import refreshenv will end | |
# up calling the cmd.exe version, which won't help Powershell, and | |
# Update-SessionEnvironment will not exist. | |
# Unfortunately this resets JAVA_HOME to whatever is in the registry. | |
# The one from the Set Up JDK step was set in the environment before | |
# this step is called. | |
run: | | |
$step_java_home=$env:JAVA_HOME | |
Import-Module "$env:ChocolateyInstall/helpers/chocolateyInstaller.psm1" | |
refreshenv | |
$env:JAVA_HOME=$step_java_home | |
scripts/build_win.ps1 | |
- name: Test Generation of VkFormat-related files | |
if: matrix.check_mkvk == 'ONLY' | |
run: scripts/check_mkvk.ps1 | |
- name: Test Windows build | |
# Tests built for arm64 can't be run as the CI runners are all x64. | |
if: matrix.arch == 'x64' && matrix.options.tests == 'ON' | |
run: ctest --output-on-failure --test-dir $env:BUILD_DIR -C Release | |
- name: Upload test log | |
if: ${{ failure() }} | |
run: scripts/on_failure.ps1 | |
- name: Get KTX version | |
if: matrix.options.package == 'YES' | |
id: ktx-version | |
run: | | |
$KTX_VERSION = Get-Content $env:BUILD_DIR/ktx.version | |
echo "KTX_VERSION=$KTX_VERSION" >> $env:GITHUB_ENV | |
- name: Upload Artifact | |
if: matrix.options.package == 'YES' && matrix.toolset == 'CLangCL' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: KTX-Software-${{env.KTX_VERSION}}-Windows-${{matrix.arch}} | |
path: ${{env.BUILD_DIR}}/KTX-Software-*.exe* | |
- name: Upload pyktx artifacts | |
if: matrix.options.package == 'YES' && matrix.options.py == 'ON' | |
uses: kittaakos/upload-artifact-as-is@v0 | |
with: | |
path: ${{env.BUILD_DIR}}/interface/python_binding/dist/ | |
- name: Upload to Release | |
uses: softprops/action-gh-release@v1 | |
if: matrix.options.package == 'YES' && matrix.toolset == 'CLangCL' && github.event_name == 'push' && github.ref_type == 'tag' | |
with: | |
draft: true | |
prerelease: true | |
files: | | |
${{env.BUILD_DIR}}/KTX-Software-*.exe* | |
${{env.BUILD_DIR}}/interface/python_binding/dist/pyktx-* | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |