201 lines
7.2 KiB
YAML
Vendored
201 lines
7.2 KiB
YAML
Vendored
# Copyright 2025 The Khronos Group Inc.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
name: KTX-Software Web 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
|
|
- .github/workflows/android.yml
|
|
- .github/workflows/check-mkvk.yml
|
|
- .github/workflows/docs.yml
|
|
- .github/workflows/formatting.yml
|
|
- .github/workflows/publish-pyktx.yml
|
|
- .github/workflows/windows.yml
|
|
- .travis.yml
|
|
- README.md
|
|
- CODE_OF_CONDUCT.md
|
|
- CONTRIBUTING.md
|
|
- LICENSE.md
|
|
- LICENSES
|
|
- RELEASE_NOTES.md
|
|
- REUSE.toml
|
|
- install-gitconfig*
|
|
# Allow manual trigger
|
|
workflow_dispatch:
|
|
workflow_call:
|
|
|
|
jobs:
|
|
#formatting:
|
|
# uses: ./.github/workflows/formatting.yml
|
|
web:
|
|
permissions:
|
|
contents: write
|
|
# Shortcircuit and don't burn CI time when formatting will reject
|
|
#needs: formatting
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- name: Debug
|
|
os: ubuntu-22.04
|
|
generator: Ninja
|
|
arch: x86_64
|
|
compiler: clang
|
|
vulkan_sdk_version: '1.3.290'
|
|
options: {
|
|
config: Debug,
|
|
doc: OFF, jni: OFF, loadtests: OpenGL, py: OFF, tools: OFF, tools_cts: OFF,
|
|
sse: OFF, opencl: OFF, wasm: ON
|
|
}
|
|
- name: Package
|
|
os: ubuntu-22.04
|
|
generator: Ninja
|
|
arch: x86_64
|
|
compiler: clang
|
|
vulkan_sdk_version: '1.3.290'
|
|
options: {
|
|
config: Release,
|
|
doc: OFF, jni: OFF, loadtests: OpenGL, py: OFF, tools: OFF, tools_cts: OFF,
|
|
package: YES, sse: OFF, opencl: OFF, wasm: ON
|
|
}
|
|
|
|
name: ${{ matrix.name }}
|
|
runs-on: ${{ matrix.os }}
|
|
env:
|
|
# To avoid bandwidth charges skip downloading source and golden images
|
|
# for texturetests etc., loadtests and legacy tool tests. They will be
|
|
# pulled later as necessary
|
|
GIT_LFS_SKIP_SMUDGE: 1
|
|
|
|
BUILD_DIR: build
|
|
REL_DESC_FILE: "build/rel_desc.md"
|
|
|
|
# Map test matrix elements to environmental variables, so that scripts launched from CI scripts may react to them.
|
|
# Some matrix variables have defaults if unspecified by the matrix
|
|
CMAKE_GEN: ${{ matrix.generator }}
|
|
ARCH: ${{ matrix.arch }}
|
|
CONFIGURATION: ${{ matrix.options.config }}
|
|
PLATFORM: ${{ matrix.options.platform }}
|
|
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 && matrix.options.tests || 'OFF' }}
|
|
FEATURE_TOOLS: ${{ matrix.options.tools }}
|
|
FEATURE_TOOLS_CTS: ${{ matrix.options.tools_cts }}
|
|
PACKAGE: ${{ matrix.options.package && matrix.options.package || 'NO' }}
|
|
SUPPORT_OPENCL: ${{ matrix.options.opencl }}
|
|
SUPPORT_SSE: ${{ matrix.options.sse }}
|
|
WASM_BUILD: ${{ matrix.options.wasm && matrix.options.wasm || 'OFF' }}
|
|
WERROR: ${{ matrix.options.werror && matrix.options.werror || 'ON' }}
|
|
# CC Handled by job step
|
|
# CXX Handled by job step
|
|
|
|
PYTHON_DIST_DIR: interface/python_binding/dist
|
|
|
|
VULKAN_SDK_VERSION: ${{ matrix.vulkan_sdk_version }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
# Fetch all history to make sure tags are
|
|
# included (used for version creation)
|
|
fetch-depth: 0
|
|
|
|
- name: Set compiler
|
|
if: matrix.compiler
|
|
run: |
|
|
if [ "${{ matrix.compiler }}" = "gcc" ]; then
|
|
echo "CC=gcc" >> $GITHUB_ENV
|
|
echo "CXX=g++" >> $GITHUB_ENV
|
|
elif [ "${{ matrix.compiler }}" = "clang" ]; then
|
|
echo "CC=clang" >> $GITHUB_ENV
|
|
echo "CXX=clang++" >> $GITHUB_ENV
|
|
else
|
|
echo "Unknown compiler toolchain set"
|
|
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 }}
|
|
|
|
- name: before_install
|
|
run: |
|
|
echo -n "Running on the following GitHub Actions CI runner: " && uname -a
|
|
echo -n "CMake version on the runner is " && cmake --version
|
|
# Set uid/gid. Without it all commands are run by the default
|
|
# docker user root (0), and, in the Linux version of the Docker
|
|
# engine /src will be owned by the user running this workflow
|
|
# (usually 1001). This results in `git` commands within the build
|
|
# script failing with
|
|
#
|
|
# "fatal: detected dubious ownership in repository at '/src'."
|
|
#
|
|
# This is due to the fix for CVE-2022-24765. See
|
|
# https://github.blog/2022-04-12-git-security-vulnerability-announced/
|
|
# The build script uses `git describe` to create version numbers.
|
|
#
|
|
# Also with the Linux version of the Docker engine, all products of
|
|
# the build in $BUILD_DIR are owned by root unless uid/gid is set.
|
|
#
|
|
docker run -dit --name emscripten --user "$(id -u):$(id -g)" -v $(pwd):/src emscripten/emsdk bash
|
|
|
|
- name: before_script
|
|
run: |
|
|
if [ "$FEATURE_TOOLS_CTS" = "ON" ]; then
|
|
git submodule update --init --recursive tests/cts
|
|
fi
|
|
if [ "$FEATURE_TESTS" = "ON" ]; then
|
|
git lfs pull --include=tests/srcimages,tests/testimage
|
|
fi
|
|
# Make sure embedded dates are correct.
|
|
./install-gitconfig.sh
|
|
scripts/smudge_date.sh
|
|
|
|
- name: script
|
|
run: |
|
|
./scripts/build_wasm_docker.sh
|
|
|
|
- name: Prepare KTX artifacts
|
|
if: matrix.options.package == 'YES'
|
|
id: ktx-version
|
|
run: |
|
|
KTX_VERSION=`cat $BUILD_DIR/ktx.version`
|
|
echo "PACKAGE_NAME_SUFFIX=${KTX_VERSION}-Web" >> $GITHUB_ENV
|
|
|
|
# For these artifact uploads, need to take care that only one CLangCL
|
|
# "package" job for each architecture produces artifacts. A second
|
|
# job would attempt to upload a same-named artifact.
|
|
- name: Upload artifact Install Package
|
|
if: matrix.options.package == 'YES'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: KTX-Software-${{env.PACKAGE_NAME_SUFFIX}}
|
|
path: ${{env.BUILD_DIR}}/KTX-Software-*-*
|
|
|
|
- name: Upload to Release
|
|
uses: softprops/action-gh-release@v2
|
|
if: matrix.options.package == 'YES' && github.event_name == 'push' && github.ref_type == 'tag'
|
|
with:
|
|
draft: true
|
|
prerelease: true
|
|
files: |
|
|
${{env.BUILD_DIR}}/KTX-Software-*-*
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|