From d4331c7e16c25d2795a7f5ac32c47e2662df6876 Mon Sep 17 00:00:00 2001 From: Eugene Kharkunov Date: Mon, 25 May 2026 11:30:06 +0300 Subject: [PATCH 1/3] Add msvc 2026 docker image --- server/build-docker.sh | 8 +- server/configs/application-local-dev-app.yml | 3 + server/configs/application-test-app.yml | 3 + .../Dockerfile.winsdk.2026_145136231-env | 117 ++++++++++++++++++ server/docker/Dockerfile.xbox.251002-env | 2 +- server/docker/docker-compose.yml | 22 ++++ 6 files changed, 150 insertions(+), 5 deletions(-) create mode 100644 server/docker/Dockerfile.winsdk.2026_145136231-env diff --git a/server/build-docker.sh b/server/build-docker.sh index 9277372a..2e4085d6 100755 --- a/server/build-docker.sh +++ b/server/build-docker.sh @@ -49,10 +49,10 @@ for request in $REQUESTED; do ;; windows) # skip building winsdk-2022 because wine image contains newer Clang. - INSTALL="wine winsdk-2022_144435207" + INSTALL="wine winsdk-2022_144435207 winsdk-2026_145136231" ;; xbox) - INSTALL="wine winsdk-2022_144435207 xbox-251002" + INSTALL="wine winsdk-2026_145136231 xbox-251002" ;; linux) INSTALL="linux" @@ -82,8 +82,8 @@ for request in $REQUESTED; do android) DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --network host --load --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_REGISTRY/extender-android-env:1.7.0 -t $DOCKER_REGISTRY/extender-android-env:latest -f $SCRIPT_DIR/docker/Dockerfile.android-env $SCRIPT_DIR/docker ;; - winsdk-2022_144435207) - DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --network host --load --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_REGISTRY/extender-winsdk-2022_144435207-env:1.1.0 -t $DOCKER_REGISTRY/extender-winsdk-2022_144435207-env:latest -f $SCRIPT_DIR/docker/Dockerfile.winsdk.2022_144435207-env $SCRIPT_DIR/docker + winsdk-2026_145136231) + DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --network host --load --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_REGISTRY/extender-winsdk-2026_145136231-env:1.0.0 -t $DOCKER_REGISTRY/extender-winsdk-2026_145136231-env:latest -f $SCRIPT_DIR/docker/Dockerfile.winsdk.2026_145136231-env $SCRIPT_DIR/docker ;; android-ndk*|winsdk-*|emsdk-*) DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --network host --load --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_REGISTRY/extender-${install}-env:latest -f $SCRIPT_DIR/docker/Dockerfile.$(echo $install | sed 's,-,.,')-env $SCRIPT_DIR/docker diff --git a/server/configs/application-local-dev-app.yml b/server/configs/application-local-dev-app.yml index 06d8f508..a7ddf0d9 100644 --- a/server/configs/application-local-dev-app.yml +++ b/server/configs/application-local-dev-app.yml @@ -42,6 +42,9 @@ extender: winsdk-2022_144435207: url: http://winsdk-2022_144435207:9000 instanceId: winsdk-2022_144435207 + winsdk-2026_145136231: + url: http://winsdk-2026_145136231:9000 + instanceId: winsdk-2026_145136231 xbox-251002: url: http://xbox-251002:9000 instanceId: xbox-251002 diff --git a/server/configs/application-test-app.yml b/server/configs/application-test-app.yml index fb5c2e5e..1abcdba7 100644 --- a/server/configs/application-test-app.yml +++ b/server/configs/application-test-app.yml @@ -35,6 +35,9 @@ extender: winsdk-2022_144435207: url: http://winsdk-2022_144435207:9000 instanceId: winsdk-2022_144435207 + winsdk-2026_145136231: + url: http://winsdk-2026_145136231:9000 + instanceId: winsdk-2026_145136231 xbox-251002: url: http://xbox-251002:9000 instanceId: xbox-251002 diff --git a/server/docker/Dockerfile.winsdk.2026_145136231-env b/server/docker/Dockerfile.winsdk.2026_145136231-env new file mode 100644 index 00000000..0f3d8812 --- /dev/null +++ b/server/docker/Dockerfile.winsdk.2026_145136231-env @@ -0,0 +1,117 @@ +ARG PLATFORMSDK_DIR=/opt/platformsdk +ARG PLATFORMSDK_WIN32=${PLATFORMSDK_DIR}/Win32 +ARG WINDOWS_SDK_VERSION=10.0.28000.0 +ARG WINDOWS_MSVC_VERSION=14.51.36231 +ARG WINDOWS_SDK_DIR=${PLATFORMSDK_WIN32}/WindowsKits/10 +ARG WINDOWS_MSVC_DIR="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2026/VC/Tools/MSVC/${WINDOWS_MSVC_VERSION}" + +FROM europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-build-env:1.0.0 AS build + +ARG PLATFORMSDK_WIN32 +ARG WINDOWS_SDK_VERSION +ARG WINDOWS_MSVC_VERSION +ARG WINDOWS_SDK_DIR +ARG WINDOWS_MSVC_DIR + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +RUN \ + apt-get update && \ + apt-get install -y --no-install-recommends python3 python-is-python3 + +RUN --mount=type=secret,id=DM_PACKAGES_URL,required=true \ + mkdir -p "${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2026" && \ + wget -q -O - "$(cat /run/secrets/DM_PACKAGES_URL)/Microsoft-Visual-Studio-2026-${WINDOWS_MSVC_VERSION}.tar.gz" | tar xz -C "${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2026" && \ + mkdir -p "${PLATFORMSDK_WIN32}/WindowsKits" && \ + wget -q -O - "$(cat /run/secrets/DM_PACKAGES_URL)/WindowsKits-${WINDOWS_SDK_VERSION}.tar.gz" | tar xz -C "${PLATFORMSDK_WIN32}/WindowsKits" + +COPY winsdk_rename_files.py ${PLATFORMSDK_WIN32} + +# Due to Windows' case insensitive file system, the sources reference lib files with wrong cases +# so we solve the bulk by making the suffixes lowercase. (e.g. MyLib.Lib -> MyLib.lib) +RUN find $PLATFORMSDK_WIN32 -iname '*.Lib' -type f -exec sh -c 'a=$(echo "$0" | sed -r "s/([^.]*)\$/\L\1/"); [ "$a" != "$0" ] && [ ! -f "$a" ] && ln -s "$0" "$a" ' {} \; && \ + python ${PLATFORMSDK_WIN32}/winsdk_rename_files.py > ${PLATFORMSDK_WIN32}/rename.txt && \ +# Make a copy of all the headers too, in lower case (e.g. Windows.h -> windows.h etc) + find $PLATFORMSDK_WIN32 -iname '*.h' -type f -exec sh -c 'd=$(dirname "$0"); a=$(basename "$0" | tr [:upper:] [:lower:]); [ "$a" != $(basename "$0") ] && [ ! -f "$d/$a" ] && ln -s "$0" "$d/$a" ' {} \; && \ +# Make lower case links of libraries as well + find ${WINDOWS_SDK_DIR}/Lib -iname '*.lib' -type f -exec sh -c 'd=$(dirname "$0"); a=$(basename "$0" | tr [:upper:] [:lower:]); [ "$a" != $(basename "$0") ] && [ ! -f "$d/$a" ] && ln -s "$0" "$d/$a" ' {} \; + +# and the rest are manually copied (or made lower case) +WORKDIR "${WINDOWS_MSVC_DIR}/lib/x64" +RUN \ + cp oldnames.lib OLDNAMES.lib && \ + cp libcmt.lib LIBCMT.lib && \ + cp delayimp.lib Delayimp.lib + +WORKDIR "${WINDOWS_MSVC_DIR}/lib/x86" +RUN \ + cp oldnames.lib OLDNAMES.lib && \ + cp libcmt.lib LIBCMT.lib && \ + cp delayimp.lib Delayimp.lib + +# Some headers are named by the wrong name in the windows sdk's... +# We need to make certain names lowercase because some users +# have put "pragma lib" comments in some libraries :( +# and/or misspelled header files +WORKDIR "${WINDOWS_SDK_DIR}/Include/${WINDOWS_SDK_VERSION}/shared" +RUN \ + cp driverspecs.h DriverSpecs.h && \ + cp specstrings.h SpecStrings.h && \ + cp concurrencysal.h ConcurrencySal.h && \ + cp wlantypes.h WlanTypes.h + +WORKDIR "${WINDOWS_SDK_DIR}/Lib/${WINDOWS_SDK_VERSION}/um/x64" +RUN cp psapi.lib Psapi.lib + +WORKDIR "${WINDOWS_SDK_DIR}/Lib/${WINDOWS_SDK_VERSION}/um/x86" +RUN cp psapi.lib Psapi.lib + +# Also, the OpenGL headers in the windows SDK is in a folder with lower case letters, which doesn't match the includes +WORKDIR "${WINDOWS_SDK_DIR}/Include/${WINDOWS_SDK_VERSION}/um" +RUN \ + mkdir ./GL && \ + cp -v ./gl/*.* ./GL/ + +WORKDIR / + +FROM europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-wine-env:1.7.1 + +ARG PLATFORMSDK_WIN32 +ARG WINDOWS_SDK_VERSION +ARG WINDOWS_MSVC_VERSION +ARG WINDOWS_SDK_DIR +ARG WINDOWS_MSVC_DIR + + +ENV PLATFORMSDK_WIN32=${PLATFORMSDK_WIN32} +ENV \ + WINDOWS_SDK_DIR=${WINDOWS_SDK_DIR} \ + WINDOWS_SDK_VERSION=${WINDOWS_SDK_VERSION} \ + WINDOWS_MSVC_VERSION=$WINDOWS_MSVC_VERSION} \ + VCINSTALLDIR="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2026/VC" \ + VSINSTALLDIR="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2026" \ + WINDOWS_MSVC_DIR=${WINDOWS_MSVC_DIR} \ + WINDOWS_VCINSTALLDIR="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2026/VC/Tools/MSVC/${WINDOWS_MSVC_VERSION}" \ + WINDOWS_VSINSTALLDIR="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2026" + +COPY --from=build ${PLATFORMSDK_WIN32} ${PLATFORMSDK_WIN32} + +# windres: Allows for generating .res files that can be used during linking +# hadolint ignore=SC2016 +RUN \ + apt-get update && \ + apt-get install -y --no-install-recommends binutils-mingw-w64-x86-64 gcc && \ + ls -la /usr/bin/x86_64-w64-mingw32-windres && \ + ln -s /usr/bin/x86_64-w64-mingw32-windres /usr/local/bin/windres && \ + CLANG_EXEC="$(which clang)" && \ + LLVM_AR="$(which llvm-ar)" &&\ + ln -s "${CLANG_EXEC}" "$(dirname "${CLANG_EXEC}")/x86_64-pc-win32-clang" && \ + ln -s "${LLVM_AR}" "$(dirname "${LLVM_AR}")/x86_64-pc-win32-clang-ar" && \ +# Since dotnet cannot really cross compile, we need to create a "lib" shim for "wine lib.exe" +# As long as it's in the path, it will be picked up + echo '#!/usr/bin/env bash' > /usr/bin/lib && \ + echo 'wine ${WINDOWS_VCINSTALLDIR}/bin/Hostx64/x64/lib.exe $*' >> /usr/bin/lib && \ + chmod +x /usr/bin/lib && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* \ No newline at end of file diff --git a/server/docker/Dockerfile.xbox.251002-env b/server/docker/Dockerfile.xbox.251002-env index a2180688..709f7b71 100644 --- a/server/docker/Dockerfile.xbox.251002-env +++ b/server/docker/Dockerfile.xbox.251002-env @@ -13,7 +13,7 @@ RUN --mount=type=secret,id=DM_PACKAGES_URL,required=true \ mkdir -p "${XBOX_SDK}" && \ wget -q -O - "$(cat /run/secrets/DM_PACKAGES_URL)/${XBOX_SDK_FILENAME}" | tar xz -C "${XBOX_SDK}" --strip-components=1 -FROM europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-winsdk-2022_144435207-env:1.1.1 +FROM europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-winsdk-2026_145136231-env:1.0.0 ARG XBOX_SDK_VERSION ARG XBOX_SDK diff --git a/server/docker/docker-compose.yml b/server/docker/docker-compose.yml index 25061e6b..49dcd298 100644 --- a/server/docker/docker-compose.yml +++ b/server/docker/docker-compose.yml @@ -174,6 +174,17 @@ services: default: aliases: - winsdk-2022_144435207 + win_2026_145136231-integration-dev: + image: europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-winsdk-2026_145136231-env:latest + extends: + file: common-services.yml + service: test_remote_builder + profiles: + - test + networks: + default: + aliases: + - winsdk-2026_145136231 xbox_251002-dev: image: europe-west1-docker.pkg.dev/extender-426409/extender-xbox-private-registry/extender-xbox-251002-env:latest extends: @@ -279,6 +290,17 @@ services: default: aliases: - winsdk-2022_144435207 + win_2026_145136231-integration-test: + image: europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-winsdk-2026_145136231-env:latest + extends: + file: common-services.yml + service: test_remote_builder + profiles: + - test + networks: + default: + aliases: + - winsdk-2026_145136231 # linux service for auth testing frontend-auth-test: From c55c951bffead4553138961b928ed002dce2bc9b Mon Sep 17 00:00:00 2001 From: Eugene Kharkunov Date: Mon, 25 May 2026 11:52:26 +0300 Subject: [PATCH 2/3] Fix compose profiles --- server/docker/docker-compose.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/docker/docker-compose.yml b/server/docker/docker-compose.yml index 49dcd298..c6a1e742 100644 --- a/server/docker/docker-compose.yml +++ b/server/docker/docker-compose.yml @@ -180,7 +180,8 @@ services: file: common-services.yml service: test_remote_builder profiles: - - test + - all + - windows networks: default: aliases: From e9cac8ab156c7e5afdc6a0f2bb34c0cbb5a8cb63 Mon Sep 17 00:00:00 2001 From: Eugene Kharkunov Date: Mon, 25 May 2026 13:24:48 +0300 Subject: [PATCH 3/3] Fix service name --- server/docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/docker/docker-compose.yml b/server/docker/docker-compose.yml index c6a1e742..b54f9c6f 100644 --- a/server/docker/docker-compose.yml +++ b/server/docker/docker-compose.yml @@ -174,7 +174,7 @@ services: default: aliases: - winsdk-2022_144435207 - win_2026_145136231-integration-dev: + win_2026_145136231-dev: image: europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-winsdk-2026_145136231-env:latest extends: file: common-services.yml