初始化内容
This commit is contained in:
+340
@@ -0,0 +1,340 @@
|
||||
# Copyright 2025 The Khronos Group Inc.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
name: KTX-Software Linux 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
|
||||
linux:
|
||||
permissions:
|
||||
packages: write
|
||||
contents: write
|
||||
# Shortcircuit and don't burn CI time when formatting will reject
|
||||
#needs: formatting
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- name: Default
|
||||
os: ubuntu-latest
|
||||
generator: Ninja
|
||||
arch: x86_64
|
||||
compiler: gcc
|
||||
vk_sdk_ver: '1.4.313'
|
||||
options: {
|
||||
config: Debug,
|
||||
doc: OFF, jni: ON, loadtests: OpenGL+Vulkan, py: ON, tools: ON, tools_cts: ON,
|
||||
sse: ON, opencl: OFF
|
||||
}
|
||||
- name: Clang
|
||||
os: ubuntu-latest
|
||||
generator: Ninja Multi-Config
|
||||
arch: x86_64
|
||||
compiler: clang
|
||||
vk_sdk_ver: '1.4.313'
|
||||
options: {
|
||||
config: 'Debug,Release',
|
||||
doc: OFF, jni: ON, loadtests: OpenGL+Vulkan, py: ON, tools: ON, tools_cts: OFF,
|
||||
sse: ON, opencl: OFF
|
||||
}
|
||||
- name: Package (x86_64)
|
||||
os: ubuntu-22.04
|
||||
generator: Ninja
|
||||
arch: x86_64
|
||||
compiler: gcc
|
||||
vk_sdk_ver: '1.4.313'
|
||||
#vcpkg_install_options: --debug
|
||||
options: {
|
||||
config: Release,
|
||||
doc: ON, jni: ON, loadtests: OpenGL+Vulkan, py: ON, tools: ON, tools_cts: ON,
|
||||
package: YES, sse: ON, opencl: OFF
|
||||
}
|
||||
- name: Package (aarch64)
|
||||
os: ubuntu-22.04-arm
|
||||
generator: Ninja
|
||||
arch: aarch64
|
||||
compiler: gcc
|
||||
vk_sdk_ver: '1.4.313'
|
||||
#vcpkg_install_options: --debug
|
||||
options: {
|
||||
config: Release,
|
||||
doc: ON, jni: ON, loadtests: OpenGL, py: ON, tools: ON, tools_cts: ON,
|
||||
package: YES, sse: OFF, opencl: OFF
|
||||
}
|
||||
- name: OpenCL,SSE
|
||||
os: ubuntu-22.04
|
||||
generator: Ninja
|
||||
arch: x86_64
|
||||
compiler: gcc
|
||||
vk_sdk_ver: '1.4.313'
|
||||
options: {
|
||||
config: Release,
|
||||
doc: OFF, jni: OFF, loadtests: OFF, py: OFF, tools: OFF, tools_cts: OFF,
|
||||
sse: ON, opencl: ON
|
||||
}
|
||||
- name: OpenCL
|
||||
os: ubuntu-22.04
|
||||
generator: Ninja
|
||||
arch: x86_64
|
||||
compiler: gcc
|
||||
vk_sdk_ver: '1.4.313'
|
||||
options: {
|
||||
config: Release,
|
||||
doc: OFF, jni: OFF, loadtests: OFF, py: OFF, tools: OFF, tools_cts: OFF,
|
||||
sse: OFF, opencl: ON
|
||||
}
|
||||
- name: All OFF
|
||||
os: ubuntu-22.04
|
||||
generator: Ninja
|
||||
arch: x86_64
|
||||
compiler: gcc
|
||||
vk_sdk_ver: '1.4.313'
|
||||
options: {
|
||||
config: Release,
|
||||
doc: OFF, jni: OFF, loadtests: OFF, py: OFF, tools: OFF, tools_cts: OFF,
|
||||
sse: OFF, opencl: OFF
|
||||
}
|
||||
|
||||
name: ${{ matrix.name && matrix.name || format('{0} SSE,OpenCL:{1},{2}', matrix.os, matrix.options.sse, matrix.options.opencl) }}
|
||||
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 || 'ON' }}
|
||||
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 }}
|
||||
PY_USE_VENV: ${{ matrix.options.py.use_venv && matrix.options.py_use_venv || '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
|
||||
|
||||
VCPKG_INSTALL_OPTIONS: ${{ matrix.vcpkg_install_options && matrix.vcpkg_install_options || '' }}
|
||||
|
||||
VULKAN_SDK_VER: ${{ matrix.vk_sdk_ver }}
|
||||
|
||||
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
|
||||
sudo apt-get update
|
||||
|
||||
- name: install
|
||||
run: |
|
||||
echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
|
||||
./scripts/install_linux.sh
|
||||
|
||||
- name: Install libldtl and mono
|
||||
if: matrix.options.loadtests != 'OFF' && (matrix.os == 'ubuntu-24.04' || matrix.os == 'ubuntu-latest')
|
||||
# These packages were omitted from ubuntu-24.04 for some reason.
|
||||
# libldtl is needed by libxcrypt which is needed by vcpkg.
|
||||
# mono is needed for adding NuGet sources for caching.
|
||||
run: sudo apt-get install mono-complete libltdl-dev
|
||||
|
||||
# Should a specific version of Python ever be wanted, use this.
|
||||
# - name: Set up Python
|
||||
# if: matrix.options.py == 'ON' && matrix.check_mkvk != 'ONLY'
|
||||
# uses: actions/setup-python@v5
|
||||
# with:
|
||||
# python-version: '3.13'
|
||||
|
||||
# If the selected Python does not have virtualenv installed, use this.
|
||||
#
|
||||
# Note that the builds, via sdist and wheel, require a virtual env.
|
||||
# regardless of whether the in-use Python is externally managed.
|
||||
# Installing the explicit dependencies of pyktx only needs virtualenv
|
||||
# and PY_USE_VENV: ON when Python is externally managed.
|
||||
# - name: Install Python virtualenv
|
||||
# if: matrix.options.py == 'ON' && matrix.check_mkvk != 'ONLY'
|
||||
# run: pip install virtualenv
|
||||
|
||||
- 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: Export environment variables for vcpkg binary caching
|
||||
if: matrix.options.loadtests != 'OFF'
|
||||
# actions/github-script is used primarily because it is the only
|
||||
# way to access VCPKG_INSTALLATION_ROOT outside of the runner's shell.
|
||||
# Maintaining cross-platform access is desirable so the code can be
|
||||
# easily copied to a multi-platform workflow. NUGET_FEED_URL is set
|
||||
# here to keep the vcpkg cache environment variables together.
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
# JSON in use here. #<comments> in the script will break it.
|
||||
# Pre-installed vcpkg location is indicated by a non-standard env.
|
||||
# var.
|
||||
script: |
|
||||
core.exportVariable('VCPKG_ROOT', process.env.VCPKG_INSTALLATION_ROOT || '');
|
||||
core.exportVariable('VCPKG_EXE', process.env.VCPKG_INSTALLATION_ROOT + '/vcpkg' || '');
|
||||
core.exportVariable('NUGET_FEED_URL', 'https://nuget.pkg.github.com/KhronosGroup/index.json' || '');
|
||||
|
||||
- name: Overwrite /usr/bin/mono
|
||||
# nuget downloaded by vcpkg fetch on aarch64 is a shell script. This
|
||||
# prevents vcpkg from trying and failing, to run it in mono. This is
|
||||
# my ugliest hack in 45 years of software development.
|
||||
if: matrix.options.loadtests != 'OFF' && matrix.arch == 'aarch64'
|
||||
run: sudo sh -c "mv /usr/bin/mono /usr/bin/mono-real && echo '#! /usr/bin/env bash\nif [ \"\$1\" = \"/usr/bin/nuget\" ]; then \$*; else /usr/bin/mono-real \$*; fi' > /usr/bin/mono && chmod 755 /usr/bin/mono"
|
||||
|
||||
- name: Add NuGet sources for vcpkg binary caching
|
||||
if: matrix.options.loadtests != 'OFF'
|
||||
env:
|
||||
USERNAME: KhronosGroup
|
||||
shell: bash
|
||||
# `vcpkg fetch nuget` fetches nuget and outputs the location of
|
||||
# the fetched command. It is a .exe that runs in the mono VM.
|
||||
run: |
|
||||
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
|
||||
sources add \
|
||||
-Source "${{ env.NUGET_FEED_URL }}" \
|
||||
-StorePasswordInClearText \
|
||||
-Name GitHubPackages \
|
||||
-UserName "${{ env.USERNAME }}" \
|
||||
-Password "${{ secrets.GITHUB_TOKEN }}"
|
||||
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
|
||||
setapikey "${{ secrets.GITHUB_TOKEN }}" \
|
||||
-Source "${{ env.NUGET_FEED_URL }}"
|
||||
|
||||
- name: script
|
||||
env:
|
||||
VCPKG_BINARY_SOURCES: clear;nuget,${{ env.NUGET_FEED_URL }},readwrite
|
||||
run: |
|
||||
./scripts/build_linux.sh
|
||||
|
||||
- name: Sanitize release notes
|
||||
if: matrix.options.package == 'YES' && github.event_name == 'push' && github.ref_type == 'tag'
|
||||
run: |
|
||||
if [ ! -f $REL_DESC_FILE -a -f RELEASE_NOTES.md ]; then
|
||||
# Remove lines that are unnecessary in the context of a GitHub
|
||||
# release description.
|
||||
awk '/^Release Notes/,/^## Version/ { next }
|
||||
! /<!-- Copyright/ && ! /<!-- SPDX/ { print }' RELEASE_NOTES.md \
|
||||
> $REL_DESC_FILE
|
||||
fi
|
||||
|
||||
- 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}-${{runner.os}}-${{matrix.arch}}" >> $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-*-*
|
||||
compression-level: 0 # Installer already compressed.
|
||||
|
||||
- name: Upload artifact pyktx
|
||||
if: matrix.options.package == 'YES' && matrix.options.py == 'ON'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: pyktx-${{env.PACKAGE_NAME_SUFFIX}}
|
||||
path: ${{env.BUILD_DIR}}/${{env.PYTHON_DIST_DIR}}
|
||||
|
||||
- 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.BUILD_DIR}}/${{env.PYTHON_DIST_DIR}}/pyktx-*
|
||||
body_path: ${{env.REL_DESC_FILE}}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
Reference in New Issue
Block a user