# escape=` # Use a Windows Server Core 2025 image that matches our build host. # If the version doesn't match the build host we cannot run # this container. I'm not sure with what specificity it has to # match, so let's pin this and then upgrade it as we upgrade # the host. FROM mcr.microsoft.com/windows/servercore:10.0.26100.7171 ENV CMAKE_VERSION=3.31.10 ENV CMAKE_ARCH=windows-x86_64 # Restore the default Windows shell for correct batch processing. SHELL ["cmd", "/S", "/C"] RUN curl -SL --output vs_buildtools.exe https://aka.ms/vs/17/release/vs_buildtools.exe ` && ( start /w vs_buildtools.exe --quiet --wait --norestart --nocache ` --installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools" ` --add Microsoft.VisualStudio.Workload.NativeDesktop ` || IF "%ERRORLEVEL%"=="3010" EXIT 0 ) ` && for %F in ("%TEMP%\dd_*.log") do @echo ===== %F ===== & type "%F" ` && del /Q "%TEMP%\dd_*.log" ` && del /Q vs_buildtools.exe RUN powershell -NoProfile -Command ` $ErrorActionPreference = 'Stop'; ` $url = \"https://github.com/Kitware/CMake/releases/download/v$env:CMAKE_VERSION/cmake-$env:CMAKE_VERSION-$env:CMAKE_ARCH.zip\"; ` $out = 'C:\\cmake.zip'; ` (New-Object System.Net.WebClient).DownloadFile($url, $out); ` Expand-Archive -Path $out -DestinationPath 'C:\\'; ` Remove-Item $out; ` $cmakeDir = \"C:\\cmake-$env:CMAKE_VERSION-$env:CMAKE_ARCH\\bin\"; ` [Environment]::SetEnvironmentVariable('PATH', $cmakeDir + ';' + $env:PATH, 'Machine') RUN powershell -Command ` $ErrorActionPreference = 'Stop'; ` Invoke-WebRequest -Uri https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe -OutFile rustup-init.exe; ` .\rustup-init.exe -y --default-toolchain stable; ` Remove-Item .\rustup-init.exe # Install Chocolatey RUN ["powershell.exe", "-NoLogo", "-NoProfile", "-Command", ` "Set-ExecutionPolicy Bypass -Scope Process; ` [System.Net.ServicePointManager]::SecurityProtocol = ` [System.Net.SecurityProtocolType]::Tls12; ` iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))" ` ] # Install Git and Rustup via Chocolatey RUN ["powershell.exe", "-NoLogo", "-NoProfile", "-Command", ` "choco install git -y --no-progress; ` choco install rustup.install -y --no-progress" ` ] # Install stable Rust toolchain RUN ["powershell.exe", "-NoLogo", "-NoProfile", "-Command", ` "$env:Path += ';C:\\Users\\ContainerAdministrator\\.cargo\\bin'; ` rustup toolchain install stable-x86_64-pc-windows-msvc; ` rustup default stable-x86_64-pc-windows-msvc" ` ] # Install dioxus-cli from git HEAD with cargo RUN ["powershell.exe", "-NoLogo", "-NoProfile", "-Command", ` "$env:Path += ';C:\\Users\\ContainerAdministrator\\.cargo\\bin'; ` cargo install --git https://github.com/DioxusLabs/dioxus dioxus-cli" ` ] # Define the entry point for the docker container. # This entry point starts the developer command prompt and launches the PowerShell shell. ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]