Skip to content

Delete RELEASE_NOTES_v1.3.md #58

Delete RELEASE_NOTES_v1.3.md

Delete RELEASE_NOTES_v1.3.md #58

Workflow file for this run

name: Build and Release KytyPS5
on:
workflow_dispatch:
push:
branches: [ main, master ]
tags: [ 'v*' ]
pull_request:
jobs:
windows:
name: Build KytyPS5 (Windows)
runs-on: windows-2022
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Visual Studio environment
uses: ilammy/msvc-dev-cmd@v1
- name: Setup Ninja
uses: seanmiddleditch/gha-setup-ninja@v5
# vcpkg glslang[tools,opt] compiles from source and routinely hangs/times out
# on windows-2022. Pull a prebuilt glslangValidator from the Vulkan SDK instead.
- name: Install glslangValidator (Vulkan SDK)
uses: jakoch/install-vulkan-sdk-action@v1.6.0
with:
vulkan_version: 1.4.350.0
cache: true
stripdown: true
install_runtime: false
- name: Install Qt 6.10.3
uses: jurplel/install-qt-action@v4
with:
version: "6.10.3"
host: windows
target: desktop
arch: win64_msvc2022_64
cache: true
- name: Verify toolchain
shell: cmd
run: |
git --version
cmake --version
ninja --version
clang-cl --version
glslangValidator --version
echo Qt6_DIR=%Qt6_DIR%
- name: Configure
shell: pwsh
run: |
cmake -S src -B _Build/windows `
-G Ninja `
-DCMAKE_BUILD_TYPE=Release `
-DCMAKE_C_COMPILER=clang-cl `
-DCMAKE_CXX_COMPILER=clang-cl `
"-DCMAKE_PREFIX_PATH=$env:Qt6_DIR" 2>&1 | Tee-Object configure.log
$code = $LASTEXITCODE
if ($code -ne 0) {
# Surface the failure in the run summary so it is visible without log access.
"### Configure failed (exit $code)" | Out-File $env:GITHUB_STEP_SUMMARY -Append
'```' | Out-File $env:GITHUB_STEP_SUMMARY -Append
Get-Content configure.log -Tail 150 | Out-File $env:GITHUB_STEP_SUMMARY -Append
'```' | Out-File $env:GITHUB_STEP_SUMMARY -Append
foreach ($f in @('CMakeError.log', 'CMakeConfigureLog.yaml')) {
$p = "_Build/windows/CMakeFiles/$f"
if (Test-Path $p) {
"### $f (tail)" | Out-File $env:GITHUB_STEP_SUMMARY -Append
'```' | Out-File $env:GITHUB_STEP_SUMMARY -Append
Get-Content $p -Tail 100 | Out-File $env:GITHUB_STEP_SUMMARY -Append
'```' | Out-File $env:GITHUB_STEP_SUMMARY -Append
}
}
}
exit $code
- name: Build
shell: cmd
run: |
cmake --build _Build/windows --target launcher --parallel
- name: Build focused test subsets
shell: cmd
run: |
cmake --build _Build/windows --parallel --target ^
pipeline_cache_data_tests ^
graphics_audio_semantics_tests ^
pm4_ngs2_fuzz_tests ^
soft_ignore_evidence_tests ^
shader_cfg_tests ^
shader_recompiler_compute_tests
- name: Run focused graphics/audio subsets
shell: pwsh
run: |
$failed = 0
function Run-Test([string]$Name, [string]$Exe, [string[]]$Args = @()) {
Write-Host "==> $Name"
& $Exe @Args
if ($LASTEXITCODE -ne 0) {
Write-Host "FAILED $Name exit=$LASTEXITCODE"
$script:failed++
}
}
$bin = "_Build/windows"
Run-Test "pipeline_cache_data" "$bin/pipeline_cache_data_tests.exe"
Run-Test "graphics_audio_semantics" "$bin/graphics_audio_semantics_tests.exe"
Run-Test "pm4_ngs2_fuzz" "$bin/pm4_ngs2_fuzz_tests.exe" @("--iterations=4096")
Run-Test "soft_ignore_evidence" "$bin/soft_ignore_evidence_tests.exe"
Run-Test "shader_cfg" "$bin/shader_cfg_tests.exe"
# The SDK supplies tools/headers but hosted runners may not expose a Vulkan ICD.
$vulkanInfo = Get-Command vulkaninfo -ErrorAction SilentlyContinue
if ($null -ne $vulkanInfo) {
& $vulkanInfo.Source --summary *> $null
}
if ($null -ne $vulkanInfo -and $LASTEXITCODE -eq 0) {
Run-Test "htile_clear" "$bin/shader_recompiler_compute_tests.exe" @("--htile-clear-only")
Run-Test "layered_image" "$bin/shader_recompiler_compute_tests.exe" @("--layered-image-only")
Run-Test "storage_sampled" "$bin/shader_recompiler_compute_tests.exe" @("--storage-sampled-only")
} else {
Write-Warning "Skipping GPU-backed subsets: no usable Vulkan ICD"
}
if ($failed -ne 0) { exit 1 }
- name: Install
shell: cmd
run: |
cmake --install _Build/windows --prefix _Build/windows/install
- name: Upload Windows artifacts
uses: actions/upload-artifact@v4
with:
name: KytyPS5-Windows-x64
path: _Build/windows/install/**
if-no-files-found: error
macos:
name: Build KytyPS5 (macOS)
runs-on: macos-15
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
- name: Select Xcode 26
shell: bash
run: |
xcode_path="$(ls -d /Applications/Xcode_26*.app | tail -n 1)"
test -n "$xcode_path"
sudo xcode-select --switch "$xcode_path/Contents/Developer"
xcodebuild -version
- name: Install build dependencies
shell: bash
run: brew install glslang ninja
- name: Install Qt 6.10.3
uses: jurplel/install-qt-action@v4
with:
version: "6.10.3"
host: mac
target: desktop
arch: clang_64
cache: true
- name: Verify toolchain
shell: bash
run: |
git --version
cmake --version
ninja --version
clang++ --version
glslangValidator --version
echo "Host architecture: $(uname -m)"
echo "QT_ROOT_DIR=$QT_ROOT_DIR"
- name: Configure
shell: bash
run: |
cmake -S src -B _Build/macos \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_PREFIX_PATH="$QT_ROOT_DIR"
- name: Build
shell: bash
run: |
cmake --build _Build/macos --target launcher --parallel
- name: Install
shell: bash
run: |
cmake --install _Build/macos --prefix _Build/macos/install
- name: Bundle MoltenVK
shell: bash
env:
MOLTENVK_VERSION: v1.4.2
MOLTENVK_SHA256: f95765a6229cb7b915990a2890ce12ebe36a730b021545d3d52ae69ce4c4024e
run: |
archive="$RUNNER_TEMP/MoltenVK-macos.tar"
package="$RUNNER_TEMP/MoltenVK"
curl --fail --location --retry 3 \
--output "$archive" \
"https://github.com/KhronosGroup/MoltenVK/releases/download/$MOLTENVK_VERSION/MoltenVK-macos.tar"
echo "$MOLTENVK_SHA256 $archive" | shasum -a 256 --check
tar -xf "$archive" -C "$RUNNER_TEMP"
install -m 755 \
"$package/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib" \
_Build/macos/install/libMoltenVK.dylib
install -m 644 "$package/LICENSE" _Build/macos/install/LICENSE.MoltenVK
codesign --force --sign - --timestamp=none _Build/macos/install/libMoltenVK.dylib
- name: Verify artifacts
shell: bash
run: |
file _Build/macos/install/launcher
file _Build/macos/install/kyty_emulator
file _Build/macos/install/libMoltenVK.dylib
lipo _Build/macos/install/launcher -verify_arch x86_64
lipo _Build/macos/install/kyty_emulator -verify_arch x86_64
lipo _Build/macos/install/libMoltenVK.dylib -verify_arch x86_64
codesign --verify --strict _Build/macos/install/kyty_emulator
codesign --verify --strict _Build/macos/install/libMoltenVK.dylib
- name: Upload macOS artifacts
uses: actions/upload-artifact@v4
with:
name: KytyPS5-macOS-x86_64
path: _Build/macos/install/**
if-no-files-found: error
linux:
name: Build KytyPS5 (Linux)
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install build dependencies
shell: bash
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends --yes \
clang \
glslang-tools \
libasound2-dev \
libdbus-1-dev \
libgl1-mesa-dev \
libpulse-dev \
libudev-dev \
libwayland-dev \
libx11-dev \
libxcursor-dev \
libxext-dev \
libxfixes-dev \
libxi-dev \
libxkbcommon-dev \
libxrandr-dev \
libxss-dev \
lld \
ninja-build \
wayland-protocols
- name: Install Qt 6.10.3
uses: jurplel/install-qt-action@v4
with:
version: "6.10.3"
host: linux
target: desktop
arch: linux_gcc_64
cache: true
- name: Verify toolchain
shell: bash
run: |
git --version
cmake --version
ninja --version
clang++ --version
ld.lld --version
glslangValidator --version
echo "Qt6_DIR=$Qt6_DIR"
- name: Configure
shell: bash
run: |
mkdir -p _Build
cmake -S src -B _Build/linux \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_PREFIX_PATH="$Qt6_DIR" 2>&1 | tee _Build/configure.log
exit "${PIPESTATUS[0]}"
- name: Verify SDL2 backends
shell: bash
run: |
status=0
for feature in SDL_ALSA SDL_PULSEAUDIO SDL_WAYLAND SDL_X11 SDL_LIBUDEV SDL_DBUS; do
if grep -qE "^-- ${feature} +\\(Wanted: ON\\): ON" _Build/configure.log; then
echo "ok ${feature}"
else
echo "FAIL ${feature} is not enabled"
status=1
fi
done
exit "$status"
- name: Build
shell: bash
run: |
cmake --build _Build/linux \
--target launcher page_manager_tests memory_tracker_tests \
--parallel
- name: Test
shell: bash
run: |
ctest --test-dir _Build/linux --output-on-failure \
-R '^(page_manager|memory_tracker)$'
- name: Install
shell: bash
run: |
cmake --install _Build/linux --prefix _Build/linux/install
- name: Verify artifacts
shell: bash
run: |
file _Build/linux/install/launcher
file _Build/linux/install/kyty_emulator
file _Build/linux/install/kyty_emulator | grep -q "ELF 64-bit LSB .*x86-64"
ldd _Build/linux/install/kyty_emulator > /dev/null
readelf -d _Build/linux/install/launcher | grep -q 'RPATH.*\$ORIGIN/lib'
while IFS= read -r -d '' binary; do
while read -r dependency; do
test -e "_Build/linux/install/lib/$dependency"
done < <(
readelf -d "$binary" |
sed -n 's/.*Shared library: \[\(libQt6[^]]*\|libicu[^]]*\)\].*/\1/p'
)
done < <(
find _Build/linux/install/launcher _Build/linux/install/plugins \
-type f \( -name launcher -o -name '*.so' \) -print0
)
_Build/linux/install/kyty_emulator --help > /dev/null
- name: Upload Linux artifacts
uses: actions/upload-artifact@v4
with:
name: KytyPS5-Linux-x86_64
path: _Build/linux/install/**
if-no-files-found: error
# KytyPlus: publish Windows-only release assets on v* tags.
release:
name: Release KytyPlus
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
needs: [windows]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Download builds
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Set release name
shell: bash
run: |
echo "RELEASE_NAME=${GITHUB_REF_NAME}" >> "$GITHUB_ENV"
echo "ASSET_NAME=KytyPlus-${GITHUB_REF_NAME}-windows-x64.zip" >> "$GITHUB_ENV"
- name: Package Windows build
shell: bash
run: |
windows_dir="artifacts/KytyPS5-Windows-x64"
test -d "$windows_dir"
(
cd "$windows_dir"
zip -r "$GITHUB_WORKSPACE/$ASSET_NAME" .
)
- name: Create release
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: |
if gh release view "$RELEASE_NAME" --repo "$GITHUB_REPOSITORY" > /dev/null 2>&1; then
gh release upload "$RELEASE_NAME" "$ASSET_NAME" --clobber --repo "$GITHUB_REPOSITORY"
else
gh release create "$RELEASE_NAME" "$ASSET_NAME" \
--generate-notes \
--repo "$GITHUB_REPOSITORY" \
--target "$GITHUB_SHA" \
--title "$RELEASE_NAME"
fi