@@ -7,21 +7,28 @@ ARG PYTHON_VERSION=3.13.2
77ARG NINJA_VERSION=1.12.1
88ARG NASM_VERSION=2.16.03
99ARG GIT_VERSION=2.48.1
10+ ARG ZSTD_VERSION=1.5.7
1011ARG WINDOWS_11_SDK_VERSION=22621
1112ARG WINDOWS_SDK_VERSION=10.0.${WINDOWS_11_SDK_VERSION}.0
1213ARG VC_VERSION=14.43.17.13
14+ ARG VS_BOOTSTRAP_VERSION=17.13.6
1315
1416# note: it seems we cannot pass version within any workflow ID to installer, though as I look at VS package cache I see it being done in json payloads!
1517# henceforth we enforce fixed versions with nasty bootstrap URL, more details:
1618# https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-history#fixed-version-bootstrappers
17- # Default Version: 17.13.6, Channel: Current
19+
20+ # note: if you update BUILD_TOOLS_URL then update also VS_BOOTSTRAP_VERSION
21+ # default version: ${VS_BOOTSTRAP_VERSION}, channel: Current
22+ # UPDAT ME: need to find out if there is a way to use VS_BOOTSTRAP_VERSION instead of this nasty URL which matches the bootstrap version
1823ARG BUILD_TOOLS_URL=https://download.visualstudio.microsoft.com/download/pr/8fada5c7-8417-4239-acc3-bd499af09222/353141457abcc59eb9c38b2f30084e7271c6bcfb4e185466d98161bada905759/vs_BuildTools.exe
1924
2025# used for validation & matches internal package payloads, note: requires adjusting BUILD_TOOLS_URL
2126ARG MSVC_VERSION=14.43.34808
2227ARG CLANGCL_VERSION=19.1.1
2328
2429ARG IMPL_ARTIFACTS_DIR="C:\a rtifacts"
30+ ARG IMPL_COMPRESSION_ARGS=-T0
31+
2532ARG IMPL_NANO_BASE=mcr.microsoft.com/powershell
2633ARG IMPL_NANO_TAG=lts-nanoserver-ltsc2022
2734
@@ -56,8 +63,9 @@ SHELL ["powershell", "-NoLogo", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Co
5663# eg. dir name: 14.43.34808 (MSVC_VERSION) but version reported by cl.exe: 19.43.34810
5764# more over, all package cache payloads (by default at C:\ProgramData\Microsoft\VisualStudio)
5865# use MSVC_VERSION within workflow components ID - none of them contains 19.43.34810
59- # which means that most likely there is a bug with versioning cl binaries
6066
67+ # UPDATE ME: once I know more about CL versioning
68+ #
6169# RUN $version = "$env:MSVC_VERSION" ; `
6270# $cl = Join-Path $env:IMPL_ARTIFACTS_DIR "VC\Tools\MSVC\$version\bin\Hostx64\x64\cl.exe" ; `
6371# $pipe = & "$cl" 2>&1 ; `
@@ -151,19 +159,55 @@ Invoke-WebRequest -Uri "https://github.com/git-for-windows/git/releases/download
151159tar -xf C:\T emp\g it.zip -C $env:IMPL_ARTIFACTS_DIR ; `
152160Remove-Item C:\T emp\g it.zip
153161
162+ # ---------------- ZSTD ----------------
163+ FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as zstd
164+ SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
165+
166+ ARG ZSTD_VERSION
167+ ARG IMPL_ARTIFACTS_DIR
168+
169+ RUN Write-Host "Installing Git $env:ZSTD_VERSION" ; `
170+ New-Item -ItemType Directory -Force -Path C:\T emp, $env:IMPL_ARTIFACTS_DIR ; `
171+ Invoke-WebRequest -Uri "https://github.com/facebook/zstd/releases/download/v$env:ZSTD_VERSION/zstd-v$env:ZSTD_VERSION-win64.zip" -OutFile C:\T emp\z std.zip ; `
172+ tar -xf C:\T emp\z std.zip -C $env:IMPL_ARTIFACTS_DIR ; `
173+ Remove-Item C:\T emp\z std.zip
174+
175+ # ---------------- COMPRESS STEP ----------------
176+ FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as compress
177+ SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
178+
179+ ARG IMPL_ARTIFACTS_DIR
180+ COPY --link --from=buildtools ["C:/Program Files (x86)/Windows Kits/10" , "C:/pack/WindowsKits10SDK" ]
181+ COPY --link --from=buildtools ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/BuildTools" ]
182+ COPY --link --from=cmake ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/CMake" ]
183+ COPY --link --from=python ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/Python" ]
184+ COPY --link --from=ninja ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/Ninja" ]
185+ COPY --link --from=nasm ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/Nasm" ]
186+ COPY --link --from=git ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/Git" ]
187+ COPY --link --from=zstd ["${IMPL_ARTIFACTS_DIR}" , "C:/compress" ]
188+
189+ ARG ZSTD_VERSION
190+ ARG IMPL_COMPRESSION_ARGS
191+
192+ WORKDIR C:\p ack
193+ RUN $dirs = Get-ChildItem -Directory | ForEach-Object { $_.Name }; $dirs; `
194+ tar -cf artifacts.tar @dirs; dir artifacts.tar; `
195+ & "C:\c ompress\z std-v$env:ZSTD_VERSION-win64\z std.exe" $env:IMPL_COMPRESSION_ARGS artifacts.tar; dir artifacts.tar.zst; `
196+ rm artifacts.tar
197+
154198# ---------------- FINAL IMAGE ----------------
155199FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG}
156200SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
157201USER ContainerAdministrator
158202
203+ LABEL org.opencontainers.image.title="MSVC & ClangCL Build Tools with CMake toolchains"
204+ LABEL org.opencontainers.image.source=https://github.com/Devsh-Graphics-Programming/docker-nanoserver-msvc-winsdk
205+ LABEL org.opencontainers.image.description="Build MSVC/ClangCL + WinSDK projects with CMake toolchains in Windows Nano Server!"
206+ LABEL org.opencontainers.image.licenses=Apache-2.0
207+
159208ARG IMPL_ARTIFACTS_DIR
160- COPY --link --from=buildtools ["C:/Program Files (x86)/Windows Kits/10" , "C:/WindowsKits10SDK" ]
161- COPY --link --from=buildtools ["${IMPL_ARTIFACTS_DIR}" , "C:/BuildTools" ]
162- COPY --link --from=cmake ["${IMPL_ARTIFACTS_DIR}" , "C:/CMake" ]
163- COPY --link --from=python ["${IMPL_ARTIFACTS_DIR}" , "C:/Python" ]
164- COPY --link --from=ninja ["${IMPL_ARTIFACTS_DIR}" , "C:/Ninja" ]
165- COPY --link --from=nasm ["${IMPL_ARTIFACTS_DIR}" , "C:/Nasm" ]
166- COPY --link --from=git ["${IMPL_ARTIFACTS_DIR}" , "C:/Git" ]
209+ COPY --link --from=compress ["C:/pack/artifacts.tar.zst" , "C:/artifacts.tar.zst" ]
210+ COPY --link --from=zstd ["${IMPL_ARTIFACTS_DIR}" , "C:/compress" ]
167211
168212ARG CMAKE_VERSION
169213ARG PYTHON_VERSION
@@ -176,6 +220,8 @@ ARG VC_VERSION
176220ARG MSVC_VERSION
177221ARG CLANGCL_VERSION
178222ARG BUILD_TOOLS_URL
223+ ARG VS_BOOTSTRAP_VERSION
224+ ARG ZSTD_VERSION
179225
180226ENV CMAKE_WINDOWS_KITS_10_DIR="C:\W indowsKits10SDK" `
181227CMAKE_VERSION=${CMAKE_VERSION} `
@@ -190,11 +236,12 @@ VS_INSTANCE_LOCATION=C:\BuildTools `
190236MSVC_VERSION=${MSVC_VERSION} `
191237CLANGCL_VERSION=${CLANGCL_VERSION} `
192238BUILD_TOOLS_URL=${BUILD_TOOLS_URL} `
239+ VS_BOOTSTRAP_VERSION=${VS_BOOTSTRAP_VERSION} `
193240MSVC_TOOLSET_DIR=C:\B uildTools\V C\T ools\M SVC\$ {MSVC_VERSION} `
194241LLVM_TOOLSET_DIR=C:\B uildTools\V C\T ools\L lvm `
195- PATH="C:\W indows\s ystem32;C:\W indows;C:\P rogram Files\P owerShell;C:\G it\c md;C:\G it\b in;C:\G it\u sr\b in;C:\G it\m ingw64\b in;C:\C Make\c make-${CMAKE_VERSION}-windows-x86_64\b in;C:\P ython;C:\N asm;C:\N asm\n asm-${NASM_VERSION};C:\N inja;"
242+ PATH="C:\W indows\s ystem32;C:\W indows;C:\P rogram Files\P owerShell;C:\G it\c md;C:\G it\b in;C:\G it\u sr\b in;C:\G it\m ingw64\b in;C:\C Make\c make-${CMAKE_VERSION}-windows-x86_64\b in;C:\P ython;C:\N asm;C:\N asm\n asm-${NASM_VERSION};C:\N inja;C: \c ompress \z std-v${ZSTD_VERSION}-win64; "
196243
197- RUN git config --system --add safe.directory '*'
198244COPY . sample/
245+ COPY unpack.ps1 .
199246WORKDIR C:\s ample\t ests
200247CMD ["pwsh.exe" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" ]
0 commit comments