@@ -7,21 +7,28 @@ ARG PYTHON_VERSION=3.13.2
7
7
ARG NINJA_VERSION=1.12.1
8
8
ARG NASM_VERSION=2.16.03
9
9
ARG GIT_VERSION=2.48.1
10
+ ARG ZSTD_VERSION=1.5.7
10
11
ARG WINDOWS_11_SDK_VERSION=22621
11
12
ARG WINDOWS_SDK_VERSION=10.0.${WINDOWS_11_SDK_VERSION}.0
12
13
ARG VC_VERSION=14.43.17.13
14
+ ARG VS_BOOTSTRAP_VERSION=17.13.6
13
15
14
16
# 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!
15
17
# henceforth we enforce fixed versions with nasty bootstrap URL, more details:
16
18
# 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
18
23
ARG BUILD_TOOLS_URL=https://download.visualstudio.microsoft.com/download/pr/8fada5c7-8417-4239-acc3-bd499af09222/353141457abcc59eb9c38b2f30084e7271c6bcfb4e185466d98161bada905759/vs_BuildTools.exe
19
24
20
25
# used for validation & matches internal package payloads, note: requires adjusting BUILD_TOOLS_URL
21
26
ARG MSVC_VERSION=14.43.34808
22
27
ARG CLANGCL_VERSION=19.1.1
23
28
24
29
ARG IMPL_ARTIFACTS_DIR="C:\a rtifacts"
30
+ ARG IMPL_COMPRESSION_ARGS=-T0
31
+
25
32
ARG IMPL_NANO_BASE=mcr.microsoft.com/powershell
26
33
ARG IMPL_NANO_TAG=lts-nanoserver-ltsc2022
27
34
@@ -56,8 +63,9 @@ SHELL ["powershell", "-NoLogo", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Co
56
63
# eg. dir name: 14.43.34808 (MSVC_VERSION) but version reported by cl.exe: 19.43.34810
57
64
# more over, all package cache payloads (by default at C:\ProgramData\Microsoft\VisualStudio)
58
65
# 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
60
66
67
+ # UPDATE ME: once I know more about CL versioning
68
+ #
61
69
# RUN $version = "$env:MSVC_VERSION" ; `
62
70
# $cl = Join-Path $env:IMPL_ARTIFACTS_DIR "VC\Tools\MSVC\$version\bin\Hostx64\x64\cl.exe" ; `
63
71
# $pipe = & "$cl" 2>&1 ; `
@@ -151,19 +159,55 @@ Invoke-WebRequest -Uri "https://github.com/git-for-windows/git/releases/download
151
159
tar -xf C:\T emp\g it.zip -C $env:IMPL_ARTIFACTS_DIR ; `
152
160
Remove-Item C:\T emp\g it.zip
153
161
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
+
154
198
# ---------------- FINAL IMAGE ----------------
155
199
FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG}
156
200
SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
157
201
USER ContainerAdministrator
158
202
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
+
159
208
ARG 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" ]
167
211
168
212
ARG CMAKE_VERSION
169
213
ARG PYTHON_VERSION
@@ -176,6 +220,8 @@ ARG VC_VERSION
176
220
ARG MSVC_VERSION
177
221
ARG CLANGCL_VERSION
178
222
ARG BUILD_TOOLS_URL
223
+ ARG VS_BOOTSTRAP_VERSION
224
+ ARG ZSTD_VERSION
179
225
180
226
ENV CMAKE_WINDOWS_KITS_10_DIR="C:\W indowsKits10SDK" `
181
227
CMAKE_VERSION=${CMAKE_VERSION} `
@@ -190,11 +236,12 @@ VS_INSTANCE_LOCATION=C:\BuildTools `
190
236
MSVC_VERSION=${MSVC_VERSION} `
191
237
CLANGCL_VERSION=${CLANGCL_VERSION} `
192
238
BUILD_TOOLS_URL=${BUILD_TOOLS_URL} `
239
+ VS_BOOTSTRAP_VERSION=${VS_BOOTSTRAP_VERSION} `
193
240
MSVC_TOOLSET_DIR=C:\B uildTools\V C\T ools\M SVC\$ {MSVC_VERSION} `
194
241
LLVM_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; "
196
243
197
- RUN git config --system --add safe.directory '*'
198
244
COPY . sample/
245
+ COPY unpack.ps1 .
199
246
WORKDIR C:\s ample\t ests
200
247
CMD ["pwsh.exe" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" ]
0 commit comments