@@ -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,85 @@ 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+ "libxml2-devel"
895+ "mingw-w64-${TOOLCHAIN}-cmake"
896+ "mingw-w64-${TOOLCHAIN}-cppwinrt"
897+ "mingw-w64-${TOOLCHAIN}-curl-winssl"
898+ "mingw-w64-${TOOLCHAIN}-graphviz"
899+ "mingw-w64-${TOOLCHAIN}-miniupnpc"
900+ "mingw-w64-${TOOLCHAIN}-nlohmann-json"
901+ "mingw-w64-${TOOLCHAIN}-nodejs"
902+ "mingw-w64-${TOOLCHAIN}-onevpl"
903+ "mingw-w64-${TOOLCHAIN}-openssl"
904+ "mingw-w64-${TOOLCHAIN}-opus"
905+ "mingw-w64-${TOOLCHAIN}-toolchain"
873906 )
874907
908+ if [[ ${MSYSTEM} == "ucrt64" ]]; then
909+ dependencies+=(
910+ "mingw-w64-${TOOLCHAIN}-MinHook"
911+ "mingw-w64-${TOOLCHAIN}-nsis" # TODO: how to create an arm64 installer?
912+ )
913+ elif [[ ${MSYSTEM} == "clangarm64" ]]; then
914+ dependencies+=(
915+ "mingw-w64-${TOOLCHAIN}-gcc"
916+ )
917+ fi
918+
919+ # do not modify below this line
920+
921+ ignore_packages=()
875922 tarballs=""
876- for dep in "${broken_deps[@]}"; do
877- tarball="${dep}-${gcc_version}-any.pkg.tar.zst"
923+ for pkg in "${!pinned_deps[@]}"; do
924+ ignore_packages+=("${pkg}")
925+ version="${pinned_deps[$pkg]}"
926+ tarball="${pkg}-${version}-any.pkg.tar.zst"
878927
879928 # download and install working version
880- wget https://repo.msys2.org/mingw/ucrt64 /${tarball}
929+ wget " https://repo.msys2.org/mingw/${MSYSTEM} /${tarball}"
881930
882931 tarballs="${tarballs} ${tarball}"
883932 done
884933
885- # install broken dependencies
934+ # Create the ignore string for pacman
935+ ignore_list=$(IFS=,; echo "${ignore_packages[*]}")
936+
937+ # install pinned dependencies
886938 if [ -n "$tarballs" ]; then
887939 pacman -U --noconfirm ${tarballs}
888940 fi
889941
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[@]}"
942+ # Only add --ignore if we have packages to ignore
943+ if [ -n "$ignore_list" ]; then
944+ pacman -Syu --noconfirm --ignore="${ignore_list}" "${dependencies[@]}"
945+ else
946+ pacman -Syu --noconfirm "${dependencies[@]}"
947+ fi
909948
910949 - name : Install Doxygen
911950 # GCC compiled doxygen has issues when running graphviz
912951 env :
913952 DOXYGEN_VERSION : " 1.11.0"
953+ shell : pwsh
914954 run : |
915955 # Set version variables
916956 $doxy_ver = $env:DOXYGEN_VERSION
@@ -940,7 +980,6 @@ jobs:
940980
941981 - name : Python Path
942982 id : python-path
943- shell : msys2 {0}
944983 run : |
945984 # replace backslashes with double backslashes
946985 python_path=$(echo "${{ steps.setup-python.outputs.python-path }}" | sed 's/\\/\\\\/g')
@@ -950,7 +989,6 @@ jobs:
950989 echo "python-path=${python_path}" >> $GITHUB_OUTPUT
951990
952991 - name : Build Windows
953- shell : msys2 {0}
954992 env :
955993 BRANCH : ${{ github.head_ref || github.ref_name }}
956994 BUILD_VERSION : ${{ needs.setup_release.outputs.release_tag }}
@@ -962,31 +1000,40 @@ jobs:
9621000 -B build \
9631001 -G Ninja \
9641002 -S . \
965- -DBUILD_WERROR=ON \
9661003 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
9671004 -DSUNSHINE_ASSETS_DIR=assets \
9681005 -DSUNSHINE_PUBLISHER_NAME='${{ github.repository_owner }}' \
9691006 -DSUNSHINE_PUBLISHER_WEBSITE='https://app.lizardbyte.dev' \
9701007 -DSUNSHINE_PUBLISHER_ISSUE_URL='https://app.lizardbyte.dev/support'
9711008 ninja -C build
9721009
973- - name : Package Windows
974- shell : msys2 {0}
1010+ - name : Package Windows (Prepare)
9751011 run : |
9761012 mkdir -p artifacts
1013+
1014+ - name : Package Windows (Installer)
1015+ if : runner.arch == 'X86' || runner.arch == 'X64'
1016+ run : |
9771017 cd build
9781018
9791019 # package
9801020 cpack -G NSIS
1021+
1022+ # move
1023+ mv ./cpack_artifacts/Sunshine.exe ../artifacts/Sunshine-${{ matrix.os }}-installer.exe
1024+
1025+ - name : Package Windows (Portable)
1026+ run : |
1027+ cd build
1028+
1029+ # package
9811030 cpack -G ZIP
9821031
9831032 # move
984- mv ./cpack_artifacts/Sunshine.exe ../artifacts/sunshine-windows-installer.exe
985- mv ./cpack_artifacts/Sunshine.zip ../artifacts/sunshine-windows-portable.zip
1033+ mv ./cpack_artifacts/Sunshine.zip ../artifacts/Sunshine-${{ matrix.os }}-portable.zip
9861034
9871035 - name : Run tests
9881036 id : test
989- shell : msys2 {0}
9901037 working-directory : build/tests
9911038 run : |
9921039 ./test_sunshine.exe --gtest_color=yes --gtest_output=xml:test_results.xml
@@ -995,7 +1042,6 @@ jobs:
9951042 id : test_report
9961043 # any except canceled or skipped
9971044 if : always() && (steps.test.outcome == 'success' || steps.test.outcome == 'failure')
998- shell : msys2 {0}
9991045 working-directory : build
10001046 run : |
10011047 ${{ steps.python-path.outputs.python-path }} -m pip install gcovr
@@ -1018,7 +1064,7 @@ jobs:
10181064 disable_search : true
10191065 fail_ci_if_error : true
10201066 files : ./build/tests/test_results.xml
1021- flags : ${{ runner.os }}
1067+ flags : ${{ matrix.name }}
10221068 handle_no_reports_found : true
10231069 token : ${{ secrets.CODECOV_TOKEN }}
10241070 verbose : true
@@ -1034,11 +1080,12 @@ jobs:
10341080 disable_search : true
10351081 fail_ci_if_error : true
10361082 files : ./build/coverage.xml
1037- flags : ${{ runner.os }}
1083+ flags : ${{ matrix.name }}
10381084 token : ${{ secrets.CODECOV_TOKEN }}
10391085 verbose : true
10401086
10411087 - name : Package Windows Debug Info
1088+ shell : pwsh
10421089 working-directory : build
10431090 run : |
10441091 # use .dbg file extension for binaries to avoid confusion with real packages
@@ -1049,12 +1096,12 @@ jobs:
10491096 7z -r `
10501097 "-xr!CMakeFiles" `
10511098 "-xr!cpack_artifacts" `
1052- a "../artifacts/sunshine-win32 -debuginfo.7z" "*.dbg"
1099+ a "../artifacts/${{ matrix.name }} -debuginfo.7z" "*.dbg"
10531100
10541101 - name : Upload Artifacts
10551102 uses : actions/upload-artifact@v4
10561103 with :
1057- name : sunshine-windows
1104+ name : Sunshine-${{ matrix.name }}
10581105 path : artifacts/
10591106 if-no-files-found : error
10601107
@@ -1068,4 +1115,4 @@ jobs:
10681115 name : ${{ needs.setup_release.outputs.release_tag }}
10691116 prerelease : true
10701117 tag : ${{ needs.setup_release.outputs.release_tag }}
1071- token : ${{ secrets.GH_BOT_TOKEN }}
1118+ token : ${{ secrets.GH_BOT_TOKEN }}
0 commit comments