@@ -740,9 +740,26 @@ jobs:
740740 validate : false
741741
742742 build_win :
743- name : Windows
743+ name : ${{ matrix.name }}
744744 needs : setup_release
745- runs-on : windows-2019
745+ runs-on : ${{ matrix.os }}
746+ defaults :
747+ run :
748+ shell : msys2 {0}
749+ strategy :
750+ fail-fast : false
751+ matrix :
752+ include :
753+ - name : Windows-AMD64
754+ os : windows-2019
755+ arch : x86_64
756+ msystem : ucrt64
757+ toolchain : ucrt-x86_64
758+ - name : Windows-ARM64
759+ os : windows-11-arm
760+ arch : aarch64
761+ msystem : clangarm64
762+ toolchain : clang-aarch64
746763 steps :
747764 - name : Checkout
748765 uses : actions/checkout@v4
@@ -752,6 +769,7 @@ jobs:
752769 - name : Prepare tests
753770 id : prepare-tests
754771 if : false # todo: DirectX11 is not available, so even software encoder fails
772+ shell : pwsh
755773 run : |
756774 # function to download and extract a zip file
757775 function DownloadAndExtract {
@@ -854,63 +872,80 @@ jobs:
854872 Get-Content -Path monitor_list.txt
855873
856874 - name : Setup Dependencies Windows
857- # if a dependency needs to be pinned, see https://github.com/LizardByte/build-deps/pull/186
858875 uses : msys2/setup-msys2@v2
859876 with :
860- msystem : ucrt64
877+ msystem : ${{ matrix.msystem }}
861878 update : true
862- install : >-
863- wget
864879
865880 - name : Update Windows dependencies
866881 env :
867- gcc_version : " 14.2.0-3 "
868- shell : msys2 {0 }
882+ MSYSTEM : ${{ matrix.msystem }}
883+ TOOLCHAIN : ${{ matrix.toolchain } }
869884 run : |
870- broken_deps=(
871- "mingw-w64-ucrt-x86_64-gcc"
872- "mingw-w64-ucrt-x86_64-gcc-libs"
885+ # variables
886+ declare -A pinned_deps
887+ if [[ ${MSYSTEM} == "ucrt64" ]]; then
888+ pinned_deps["mingw-w64-${TOOLCHAIN}-gcc"]="14.2.0-3"
889+ pinned_deps["mingw-w64-${TOOLCHAIN}-gcc-libs"]="14.2.0-3"
890+ fi
891+
892+ dependencies=(
893+ "git"
894+ "mingw-w64-${TOOLCHAIN}-cmake"
895+ "mingw-w64-${TOOLCHAIN}-cppwinrt"
896+ "mingw-w64-${TOOLCHAIN}-curl-winssl"
897+ "mingw-w64-${TOOLCHAIN}-graphviz"
898+ "mingw-w64-${TOOLCHAIN}-miniupnpc"
899+ "mingw-w64-${TOOLCHAIN}-nlohmann-json"
900+ "mingw-w64-${TOOLCHAIN}-nodejs"
901+ "mingw-w64-${TOOLCHAIN}-onevpl"
902+ "mingw-w64-${TOOLCHAIN}-openssl"
903+ "mingw-w64-${TOOLCHAIN}-opus"
904+ "mingw-w64-${TOOLCHAIN}-toolchain"
873905 )
874906
907+ if [[ ${MSYSTEM} == "ucrt64" ]]; then
908+ dependencies+=(
909+ "mingw-w64-${TOOLCHAIN}-MinHook"
910+ "mingw-w64-${TOOLCHAIN}-nsis" # TODO: how to create an arm64 installer?
911+ )
912+ fi
913+
914+ # do not modify below this line
915+
916+ ignore_packages=()
875917 tarballs=""
876- for dep in "${broken_deps[@]}"; do
877- tarball="${dep}-${gcc_version}-any.pkg.tar.zst"
918+ for pkg in "${!pinned_deps[@]}"; do
919+ ignore_packages+=("${pkg}")
920+ version="${pinned_deps[$pkg]}"
921+ tarball="${pkg}-${version}-any.pkg.tar.zst"
878922
879923 # download and install working version
880- wget https://repo.msys2.org/mingw/ucrt64 /${tarball}
924+ wget " https://repo.msys2.org/mingw/${MSYSTEM} /${tarball}"
881925
882926 tarballs="${tarballs} ${tarball}"
883927 done
884928
885- # install broken dependencies
929+ # Create the ignore string for pacman
930+ ignore_list=$(IFS=,; echo "${ignore_packages[*]}")
931+
932+ # install pinned dependencies
886933 if [ -n "$tarballs" ]; then
887934 pacman -U --noconfirm ${tarballs}
888935 fi
889936
890- # install dependencies
891- dependencies=(
892- "git"
893- "mingw-w64-ucrt-x86_64-cmake"
894- "mingw-w64-ucrt-x86_64-cppwinrt"
895- "mingw-w64-ucrt-x86_64-curl-winssl"
896- "mingw-w64-ucrt-x86_64-graphviz"
897- "mingw-w64-ucrt-x86_64-MinHook"
898- "mingw-w64-ucrt-x86_64-miniupnpc"
899- "mingw-w64-ucrt-x86_64-nlohmann-json"
900- "mingw-w64-ucrt-x86_64-nodejs"
901- "mingw-w64-ucrt-x86_64-nsis"
902- "mingw-w64-ucrt-x86_64-onevpl"
903- "mingw-w64-ucrt-x86_64-openssl"
904- "mingw-w64-ucrt-x86_64-opus"
905- "mingw-w64-ucrt-x86_64-toolchain"
906- )
907-
908- pacman -Syu --noconfirm --ignore="$(IFS=,; echo "${broken_deps[*]}")" "${dependencies[@]}"
937+ # Only add --ignore if we have packages to ignore
938+ if [ -n "$ignore_list" ]; then
939+ pacman -Syu --noconfirm --ignore="${ignore_list}" "${dependencies[@]}"
940+ else
941+ pacman -Syu --noconfirm "${dependencies[@]}"
942+ fi
909943
910944 - name : Install Doxygen
911945 # GCC compiled doxygen has issues when running graphviz
912946 env :
913947 DOXYGEN_VERSION : " 1.11.0"
948+ shell : pwsh
914949 run : |
915950 # Set version variables
916951 $doxy_ver = $env:DOXYGEN_VERSION
@@ -940,7 +975,6 @@ jobs:
940975
941976 - name : Python Path
942977 id : python-path
943- shell : msys2 {0}
944978 run : |
945979 # replace backslashes with double backslashes
946980 python_path=$(echo "${{ steps.setup-python.outputs.python-path }}" | sed 's/\\/\\\\/g')
@@ -950,7 +984,6 @@ jobs:
950984 echo "python-path=${python_path}" >> $GITHUB_OUTPUT
951985
952986 - name : Build Windows
953- shell : msys2 {0}
954987 env :
955988 BRANCH : ${{ github.head_ref || github.ref_name }}
956989 BUILD_VERSION : ${{ needs.setup_release.outputs.release_tag }}
@@ -962,40 +995,48 @@ jobs:
962995 -B build \
963996 -G Ninja \
964997 -S . \
965- -DBUILD_WERROR=ON \
966998 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
967999 -DSUNSHINE_ASSETS_DIR=assets \
9681000 -DSUNSHINE_PUBLISHER_NAME='${{ github.repository_owner }}' \
9691001 -DSUNSHINE_PUBLISHER_WEBSITE='https://app.lizardbyte.dev' \
9701002 -DSUNSHINE_PUBLISHER_ISSUE_URL='https://app.lizardbyte.dev/support'
9711003 ninja -C build
9721004
973- - name : Package Windows
974- shell : msys2 {0}
1005+ - name : Package Windows (Prepare)
9751006 run : |
9761007 mkdir -p artifacts
1008+
1009+ - name : Package Windows (Installer)
1010+ if : runner.arch == 'X86' || runner.arch == 'X64'
1011+ run : |
9771012 cd build
9781013
9791014 # package
9801015 cpack -G NSIS
1016+
1017+ # move
1018+ mv ./cpack_artifacts/Sunshine.exe ../artifacts/Sunshine-${{ matrix.os }}-installer.exe
1019+
1020+ - name : Package Windows (Portable)
1021+ run : |
1022+ cd build
1023+
1024+ # package
9811025 cpack -G ZIP
9821026
9831027 # move
984- mv ./cpack_artifacts/Sunshine.exe ../artifacts/sunshine-windows-installer.exe
985- mv ./cpack_artifacts/Sunshine.zip ../artifacts/sunshine-windows-portable.zip
1028+ mv ./cpack_artifacts/Sunshine.zip ../artifacts/Sunshine-${{ matrix.os }}-portable.zip
9861029
9871030 - name : Run tests
9881031 id : test
989- shell : msys2 {0}
9901032 working-directory : build/tests
9911033 run : |
9921034 ./test_sunshine.exe --gtest_color=yes --gtest_output=xml:test_results.xml
9931035
9941036 - name : Generate gcov report
9951037 id : test_report
9961038 # any except canceled or skipped
997- if : always() && (steps.test.outcome == 'success' || steps.test.outcome == 'failure')
998- shell : msys2 {0}
1039+ if : always() && (steps.test.outcome == 'success' || steps.test.outcome == 'failure') && runner.arch == 'X86' || runner.arch == 'X64'
9991040 working-directory : build
10001041 run : |
10011042 ${{ steps.python-path.outputs.python-path }} -m pip install gcovr
@@ -1018,7 +1059,7 @@ jobs:
10181059 disable_search : true
10191060 fail_ci_if_error : true
10201061 files : ./build/tests/test_results.xml
1021- flags : ${{ runner.os }}
1062+ flags : ${{ matrix.name }}
10221063 handle_no_reports_found : true
10231064 token : ${{ secrets.CODECOV_TOKEN }}
10241065 verbose : true
@@ -1034,11 +1075,12 @@ jobs:
10341075 disable_search : true
10351076 fail_ci_if_error : true
10361077 files : ./build/coverage.xml
1037- flags : ${{ runner.os }}
1078+ flags : ${{ matrix.name }}
10381079 token : ${{ secrets.CODECOV_TOKEN }}
10391080 verbose : true
10401081
10411082 - name : Package Windows Debug Info
1083+ shell : pwsh
10421084 working-directory : build
10431085 run : |
10441086 # use .dbg file extension for binaries to avoid confusion with real packages
@@ -1049,12 +1091,12 @@ jobs:
10491091 7z -r `
10501092 "-xr!CMakeFiles" `
10511093 "-xr!cpack_artifacts" `
1052- a "../artifacts/sunshine-win32 -debuginfo.7z" "*.dbg"
1094+ a "../artifacts/${{ matrix.name }} -debuginfo.7z" "*.dbg"
10531095
10541096 - name : Upload Artifacts
10551097 uses : actions/upload-artifact@v4
10561098 with :
1057- name : sunshine-windows
1099+ name : Sunshine-${{ matrix.name }}
10581100 path : artifacts/
10591101 if-no-files-found : error
10601102
0 commit comments