Improve output determinism and add internal ktxdiff tool for comparing test outputs #186
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: | |
windows: | |
strategy: | |
matrix: | |
os: [ windows-latest ] | |
toolset: [v143, CLangCL] | |
arch: [ x64 ] | |
options: [ | |
{config: 'Debug,Release', | |
doc: ON, jni: ON, loadtests: OpenGL+Vulkan, tests: ON, tools: ON, tools_cts: ON, | |
package: YES, | |
sse: ON, opencl: OFF}, | |
{config: Release, | |
doc: OFF, loadtests: OFF, tests: OFF, tools: OFF, tools_cts: OFF, | |
package: NO, | |
sse: OFF, opencl: OFF}, | |
{config: Release, | |
doc: OFF, loadtests: OFF, tests: OFF, tools: OFF, tools_cts: OFF, | |
package: NO, | |
sse: OFF, opencl: ON}, | |
{config: Release, | |
doc: OFF, loadtests: 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, 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 | |
# No tests on arm64 since the host is x64 and can't run the | |
# built tests | |
options: { | |
config: 'Debug,Release', | |
doc: ON, jni: ON, loadtests: 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 }} | |
CONFIGURATION: ${{ matrix.options.config }} | |
FEATURE_DOC: ${{ matrix.options.doc }} | |
FEATURE_JNI: ${{ matrix.options.jni }} | |
FEATURE_LOADTESTS: ${{ matrix.options.loadtests }} | |
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 }} | |
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/ | |
VULKAN_SDK_VER: 1.3.243.0 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
# Fetch all history to make sure tags are | |
# included (used for version creation) | |
fetch-depth: 0 | |
- name: Force fetch provoking tag's annotation. | |
# Work around https://github.com/actions/checkout/issues/290. | |
if: github.ref_type == 'tag' | |
run: git fetch -f origin ${{ github.ref }}:${{ github.ref }} | |
# Need doxygen if docs are supposed to be built. | |
# Note this suffers 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 | |
if: matrix.options.doc == 'ON' | |
#run: choco install doxygen.install | |
run: | | |
$retryCount = 4 | |
$success = $false | |
for ($i = 1; $i -le $retryCount; $i++) { | |
Write-Host "Attempt no: $i" | |
choco install doxygen.install --no-progress | |
if ($LASTEXITCODE -eq 0) { | |
$success = $true | |
Write-Host "Installation successful." | |
break | |
} else { | |
Write-Host "Installation failed. Retrying..." | |
Start-Sleep -Seconds (2*$i) | |
} | |
} | |
if (-not $success) { | |
Write-Host "Installation failed after $retryCount attempts." | |
exit 1 | |
} | |
- name: Install AzureSignTool | |
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: Install Dependencies | |
# This script only installs what's needed by ON FEATUREs. | |
run: ci_scripts/install_win.ps1 | |
- name: Set up JDK 17. | |
if: matrix.options.jni == 'ON' | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'temurin' | |
java-version: '17' | |
- name: Smudge embedded dates | |
if: matrix.options.doc == 'ON' | |
run: | | |
./install-gitconfig.ps1 | |
ci_scripts/smudge_date.ps1 | |
- name: Build Windows | |
# 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 | |
ci_scripts/build_win.ps1 | |
- name: Test Windows build | |
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: ci_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@v3 | |
with: | |
name: KTX-Software-${{env.KTX_VERSION}}-Windows-${{matrix.arch}} | |
path: ${{env.BUILD_DIR}}/KTX-Software-*.exe* | |
- 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: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |