@@ -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,58 +872,69 @@ 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}-MinHook"
899+ "mingw-w64-${TOOLCHAIN}-miniupnpc"
900+ "mingw-w64-${TOOLCHAIN}-nlohmann-json"
901+ "mingw-w64-${TOOLCHAIN}-nodejs"
902+ "mingw-w64-${TOOLCHAIN}-nsis"
903+ "mingw-w64-${TOOLCHAIN}-onevpl"
904+ "mingw-w64-${TOOLCHAIN}-openssl"
905+ "mingw-w64-${TOOLCHAIN}-opus"
906+ "mingw-w64-${TOOLCHAIN}-toolchain"
873907 )
874908
909+ # do not modify below this line
910+
911+ ignore_packages=()
875912 tarballs=""
876- for dep in "${broken_deps[@]}"; do
877- tarball="${dep}-${gcc_version}-any.pkg.tar.zst"
913+ for pkg in "${!pinned_deps[@]}"; do
914+ ignore_packages+=("${pkg}")
915+ version="${pinned_deps[$pkg]}"
916+ tarball="${pkg}-${version}-any.pkg.tar.zst"
878917
879918 # download and install working version
880- wget https://repo.msys2.org/mingw/ucrt64 /${tarball}
919+ wget " https://repo.msys2.org/mingw/${MSYSTEM} /${tarball}"
881920
882921 tarballs="${tarballs} ${tarball}"
883922 done
884923
885- # install broken dependencies
924+ # Create the ignore string for pacman
925+ ignore_list=$(IFS=,; echo "${ignore_packages[*]}")
926+
927+ # install pinned dependencies
886928 if [ -n "$tarballs" ]; then
887929 pacman -U --noconfirm ${tarballs}
888930 fi
889931
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[@]}"
932+ # Only add --ignore if we have packages to ignore
933+ if [ -n "$ignore_list" ]; then
934+ pacman -Syu --noconfirm --ignore="${ignore_list}" "${dependencies[@]}"
935+ else
936+ pacman -Syu --noconfirm "${dependencies[@]}"
937+ fi
909938
910939 - name : Install Doxygen
911940 # GCC compiled doxygen has issues when running graphviz
@@ -940,7 +969,6 @@ jobs:
940969
941970 - name : Python Path
942971 id : python-path
943- shell : msys2 {0}
944972 run : |
945973 # replace backslashes with double backslashes
946974 python_path=$(echo "${{ steps.setup-python.outputs.python-path }}" | sed 's/\\/\\\\/g')
@@ -950,7 +978,6 @@ jobs:
950978 echo "python-path=${python_path}" >> $GITHUB_OUTPUT
951979
952980 - name : Build Windows
953- shell : msys2 {0}
954981 env :
955982 BRANCH : ${{ github.head_ref || github.ref_name }}
956983 BUILD_VERSION : ${{ needs.setup_release.outputs.release_tag }}
@@ -971,7 +998,6 @@ jobs:
971998 ninja -C build
972999
9731000 - name : Package Windows
974- shell : msys2 {0}
9751001 run : |
9761002 mkdir -p artifacts
9771003 cd build
@@ -981,12 +1007,11 @@ jobs:
9811007 cpack -G ZIP
9821008
9831009 # move
984- mv ./cpack_artifacts/Sunshine.exe ../artifacts/sunshine-windows -installer.exe
985- mv ./cpack_artifacts/Sunshine.zip ../artifacts/sunshine-windows -portable.zip
1010+ mv ./cpack_artifacts/Sunshine.exe ../artifacts/Sunshine-${{ matrix.os }} -installer.exe
1011+ mv ./cpack_artifacts/Sunshine.zip ../artifacts/Sunshine-${{ matrix.os }} -portable.zip
9861012
9871013 - name : Run tests
9881014 id : test
989- shell : msys2 {0}
9901015 working-directory : build/tests
9911016 run : |
9921017 ./test_sunshine.exe --gtest_color=yes --gtest_output=xml:test_results.xml
@@ -995,7 +1020,6 @@ jobs:
9951020 id : test_report
9961021 # any except canceled or skipped
9971022 if : always() && (steps.test.outcome == 'success' || steps.test.outcome == 'failure')
998- shell : msys2 {0}
9991023 working-directory : build
10001024 run : |
10011025 ${{ steps.python-path.outputs.python-path }} -m pip install gcovr
@@ -1039,6 +1063,7 @@ jobs:
10391063 verbose : true
10401064
10411065 - name : Package Windows Debug Info
1066+ shell : pwsh
10421067 working-directory : build
10431068 run : |
10441069 # use .dbg file extension for binaries to avoid confusion with real packages
0 commit comments