Signed-off-by: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Signed-off-by: Coia Prant <coiaprant@gmail.com> Co-authored-by: Ricky8955555 <rkmiao@duck.com> Co-authored-by: Mike Fara <mjfara@gmail.com> Co-authored-by: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com>
269 lines
8.5 KiB
YAML
269 lines
8.5 KiB
YAML
---
|
|
name: CI-Windows
|
|
permissions:
|
|
contents: read
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
release_commit:
|
|
required: true
|
|
type: string
|
|
release_version:
|
|
required: true
|
|
type: string
|
|
|
|
jobs:
|
|
build_windows:
|
|
name: ${{ matrix.name }}
|
|
runs-on: ${{ matrix.os }}
|
|
defaults:
|
|
run:
|
|
shell: msys2 {0}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- name: Windows-AMD64
|
|
os: windows-2022
|
|
arch: x86_64
|
|
msystem: ucrt64
|
|
toolchain: ucrt-x86_64
|
|
- name: Windows-ARM64
|
|
os: windows-11-arm
|
|
arch: aarch64
|
|
msystem: clangarm64
|
|
toolchain: clang-aarch64
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Setup Dependencies Windows
|
|
# if a dependency needs to be pinned, see https://github.com/LizardByte/build-deps/pull/186
|
|
uses: msys2/setup-msys2@4f806de0a5a7294ffabaff804b38a9b435a73bda # v2.30.0
|
|
with:
|
|
msystem: ${{ matrix.msystem }}
|
|
update: true
|
|
install: >-
|
|
wget
|
|
|
|
- name: Update Windows dependencies
|
|
env:
|
|
# MSYSTEM is a built-in environment variable of MSYS2.
|
|
# Do not use this environment variable name.
|
|
MATRIX_MSYSTEM: ${{ matrix.msystem }}
|
|
TOOLCHAIN: ${{ matrix.toolchain }}
|
|
shell: msys2 {0}
|
|
run: |
|
|
# variables
|
|
declare -A pinned_deps
|
|
|
|
# dependencies
|
|
dependencies=(
|
|
"git"
|
|
"mingw-w64-${TOOLCHAIN}-boost"
|
|
"mingw-w64-${TOOLCHAIN}-cmake"
|
|
"mingw-w64-${TOOLCHAIN}-cppwinrt"
|
|
"mingw-w64-${TOOLCHAIN}-curl-winssl"
|
|
"mingw-w64-${TOOLCHAIN}-gcc"
|
|
"mingw-w64-${TOOLCHAIN}-graphviz"
|
|
"mingw-w64-${TOOLCHAIN}-miniupnpc"
|
|
"mingw-w64-${TOOLCHAIN}-nlohmann-json"
|
|
"mingw-w64-${TOOLCHAIN}-nodejs"
|
|
"mingw-w64-${TOOLCHAIN}-onevpl"
|
|
"mingw-w64-${TOOLCHAIN}-openssl"
|
|
"mingw-w64-${TOOLCHAIN}-opus"
|
|
"mingw-w64-${TOOLCHAIN}-toolchain"
|
|
)
|
|
|
|
if [[ "${MATRIX_MSYSTEM}" == "ucrt64" ]]; then
|
|
dependencies+=(
|
|
"mingw-w64-${TOOLCHAIN}-MinHook"
|
|
"mingw-w64-${TOOLCHAIN}-nsis"
|
|
)
|
|
fi
|
|
|
|
# do not modify below this line
|
|
|
|
ignore_packages=()
|
|
tarballs=""
|
|
for pkg in "${!pinned_deps[@]}"; do
|
|
ignore_packages+=("${pkg}")
|
|
version="${pinned_deps[$pkg]}"
|
|
tarball="${pkg}-${version}-any.pkg.tar.zst"
|
|
|
|
# download working version
|
|
wget "https://repo.msys2.org/mingw/${MATRIX_MSYSTEM}/${tarball}"
|
|
|
|
tarballs="${tarballs} ${tarball}"
|
|
done
|
|
|
|
# Create the ignore string for pacman
|
|
ignore_list=$(IFS=,; echo "${ignore_packages[*]}")
|
|
|
|
# install pinned dependencies
|
|
if [ -n "${tarballs}" ]; then
|
|
pacman -U --noconfirm "${tarballs}"
|
|
fi
|
|
|
|
# Only add --ignore if we have packages to ignore
|
|
if [ -n "${ignore_list}" ]; then
|
|
pacman -Syu --noconfirm --ignore="${ignore_list}" "${dependencies[@]}"
|
|
else
|
|
pacman -Syu --noconfirm "${dependencies[@]}"
|
|
fi
|
|
|
|
- name: Install Doxygen
|
|
# GCC compiled doxygen has issues when running graphviz
|
|
env:
|
|
DOXYGEN_VERSION: "1.11.0"
|
|
shell: pwsh
|
|
run: |
|
|
# Set version variables
|
|
$doxy_ver = $env:DOXYGEN_VERSION
|
|
$_doxy_ver = $doxy_ver.Replace(".", "_")
|
|
|
|
# Download the Doxygen installer
|
|
Invoke-WebRequest -Uri `
|
|
"https://github.com/doxygen/doxygen/releases/download/Release_${_doxy_ver}/doxygen-${doxy_ver}-setup.exe" `
|
|
-OutFile "doxygen-setup.exe"
|
|
|
|
# Run the installer
|
|
Start-Process `
|
|
-FilePath .\doxygen-setup.exe `
|
|
-ArgumentList `
|
|
'/VERYSILENT' `
|
|
-Wait `
|
|
-NoNewWindow
|
|
|
|
# Clean up
|
|
Remove-Item -Path doxygen-setup.exe
|
|
|
|
- name: Setup dotnet # needed for wix
|
|
uses: actions/setup-dotnet@baa11fbfe1d6520db94683bd5c7a3818018e4309 # v5.1.0
|
|
with:
|
|
dotnet-version: '10.x'
|
|
|
|
- name: Setup python
|
|
id: setup-python
|
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
|
with:
|
|
python-version: '3.11'
|
|
|
|
- name: Python Path
|
|
id: python-path
|
|
shell: msys2 {0}
|
|
run: |
|
|
# replace backslashes with double backslashes
|
|
python_path=$(echo "${{ steps.setup-python.outputs.python-path }}" | sed 's/\\/\\\\/g')
|
|
|
|
# step output
|
|
echo "python-path=${python_path}"
|
|
echo "python-path=${python_path}" >> "${GITHUB_OUTPUT}"
|
|
|
|
- name: Build Windows
|
|
shell: msys2 {0}
|
|
env:
|
|
BRANCH: ${{ github.head_ref || github.ref_name }}
|
|
BUILD_VERSION: ${{ inputs.release_version }}
|
|
COMMIT: ${{ inputs.release_commit }}
|
|
run: |
|
|
mkdir -p build
|
|
cmake \
|
|
-B build \
|
|
-G Ninja \
|
|
-S . \
|
|
-DBUILD_WERROR=ON \
|
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
-DSUNSHINE_ASSETS_DIR=assets \
|
|
-DSUNSHINE_PUBLISHER_NAME="${GITHUB_REPOSITORY_OWNER}" \
|
|
-DSUNSHINE_PUBLISHER_WEBSITE="https://app.lizardbyte.dev" \
|
|
-DSUNSHINE_PUBLISHER_ISSUE_URL="https://app.lizardbyte.dev/support"
|
|
echo "::add-matcher::.github/matchers/gcc.json"
|
|
ninja -C build
|
|
echo "::remove-matcher owner=gcc::"
|
|
|
|
- name: Package Windows
|
|
shell: msys2 {0}
|
|
run: |
|
|
mkdir -p artifacts
|
|
cd build
|
|
|
|
# package
|
|
cpack -G NSIS
|
|
cpack -G WIX
|
|
cpack -G ZIP
|
|
|
|
# move
|
|
mv ./cpack_artifacts/Sunshine.exe ../artifacts/Sunshine-${{ matrix.name }}-installer.exe
|
|
mv ./cpack_artifacts/Sunshine.msi ../artifacts/Sunshine-${{ matrix.name }}-installer.msi
|
|
mv ./cpack_artifacts/Sunshine.zip ../artifacts/Sunshine-${{ matrix.name }}-portable.zip
|
|
|
|
- name: Debug nsis
|
|
if: always()
|
|
shell: msys2 {0}
|
|
run: cat ./build/cpack_artifacts/_CPack_Packages/win64/NSIS/NSISOutput.log || true
|
|
|
|
- name: Debug wix
|
|
if: always()
|
|
shell: msys2 {0}
|
|
run: cat ./build/cpack_artifacts/_CPack_Packages/win64/WIX/wix.log || true
|
|
|
|
- name: Run tests
|
|
id: test
|
|
shell: msys2 {0}
|
|
working-directory: build/tests
|
|
run: ./test_sunshine.exe --gtest_color=yes --gtest_output=xml:test_results.xml
|
|
|
|
- name: Generate gcov report
|
|
id: test_report
|
|
# any except canceled or skipped
|
|
if: >-
|
|
always() &&
|
|
(steps.test.outcome == 'success' || steps.test.outcome == 'failure')
|
|
shell: msys2 {0}
|
|
working-directory: build
|
|
run: |
|
|
${{ steps.python-path.outputs.python-path }} -m pip install gcovr
|
|
${{ steps.python-path.outputs.python-path }} -m gcovr . -r ../src \
|
|
--exclude-noncode-lines \
|
|
--exclude-throw-branches \
|
|
--exclude-unreachable-branches \
|
|
--verbose \
|
|
--xml-pretty \
|
|
-o coverage.xml
|
|
|
|
- name: Upload coverage artifact
|
|
if: >-
|
|
always() &&
|
|
(steps.test_report.outcome == 'success')
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
|
with:
|
|
name: coverage-${{ matrix.name }}
|
|
path: |
|
|
build/coverage.xml
|
|
build/tests/test_results.xml
|
|
if-no-files-found: error
|
|
|
|
- name: Package Windows Debug Info
|
|
shell: pwsh
|
|
working-directory: build
|
|
run: |
|
|
# use .dbg file extension for binaries to avoid confusion with real packages
|
|
Get-ChildItem -File -Recurse | `
|
|
% { Rename-Item -Path $_.PSPath -NewName $_.Name.Replace(".exe",".dbg") }
|
|
|
|
# save the binaries with debug info
|
|
7z -r `
|
|
"-xr!CMakeFiles" `
|
|
"-xr!cpack_artifacts" `
|
|
a "../artifacts/Sunshine-${{ matrix.name }}-debuginfo.7z" "*.dbg"
|
|
|
|
- name: Upload Artifacts
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
|
with:
|
|
name: build-${{ matrix.name }}
|
|
path: artifacts/
|
|
if-no-files-found: error
|