@@ -30,26 +30,19 @@ jobs:
3030 strategy :
3131 fail-fast : false
3232 matrix :
33- # `base` controls which Dockerfile is built; `runner` picks the host
34- # GHA runner. `nanoserver` is the minimal ~120 MB lane; `servercore`
35- # is the heavier ~1.25 GB lane with a fuller Windows runtime (used
36- # by Dockerfile.windows). Both run on each Windows runner version
37- # so we exercise the ltsc2022/ltsc2025 base-image pair against the
38- # matching runner kernel. Workflow-level MISE_ENV is the standard
39- # set; Dockerfile.nanoserver pins its own narrower MISE_ENV via an
40- # ENV that overrides the inherited ARG (Nano can't install python
41- # or dotnet).
4233 include :
4334 - runner : windows-2022
4435 base : nanoserver
36+ windows_version : ltsc2022
4537 - runner : windows-2025
4638 base : nanoserver
47- build_arg : " --build-arg WINDOWS_VERSION= ltsc2025"
39+ windows_version : ltsc2025
4840 - runner : windows-2022
4941 base : servercore
42+ windows_version : ltsc2022
5043 - runner : windows-2025
5144 base : servercore
52- build_arg : " --build-arg WINDOWS_VERSION= ltsc2025"
45+ windows_version : ltsc2025
5346 name : build (${{ matrix.runner }}, ${{ matrix.base }})
5447 timeout-minutes : 120
5548 env :
6558 persist-credentials : false
6659
6760 - name : Show MISE_ENV
61+ if : matrix.base == 'servercore'
6862 run : echo "MISE_ENV=$MISE_ENV"
6963
7064 # Hosted Windows runners don't reliably leave the Docker daemon running, so
@@ -75,40 +69,10 @@ jobs:
7569 sc query docker | grep -q RUNNING || net start docker
7670 docker version
7771
78- # Reclaim runner C:\ before any docker work. Windows `docker build`
79- # stages HCS layer scratch under `C:\Windows\SystemTemp`, so every GB
80- # we free here is a GB that doesn't go to disk-pressure failures
81- # inside the build. Preinstalled trees we never touch (Android, old
82- # Python / JDK versions, old .NET SDKs, misc DB SDKs) come out first;
83- # the docker-prune step below clears any layer-cache leftovers.
8472 - name : Free disk space on Windows runner
8573 uses : ./.github/actions/free-disk-space-windows
86-
87- # Free runner disk before the build. The Server Core lane has been hitting
88- # "There is not enough space on the disk" during the conda-clang-tools
89- # install inside `mise install`. `docker system prune -af` clears any
90- # unused images/containers from earlier matrix entries on the same
91- # runner; `docker builder prune -af` clears BuildKit's layer cache.
92- # Disk-free is logged before + after so we can see how much each prune
93- # actually reclaims on this runner image -- adjust the cleanup set up or
94- # down based on the delta.
95- - name : Free disk space before docker build
96- env :
97- PS_DISKFREE : Get-PSDrive C | Select-Object -Property Used,Free | Format-List
98- run : |
99- freespace() { powershell.exe -NoProfile -Command "$PS_DISKFREE"; }
100- echo "::group::disk-free BEFORE prune"
101- freespace
102- echo "::endgroup::"
103- echo "::group::docker system prune -af"
104- docker system prune -af
105- echo "::endgroup::"
106- echo "::group::docker builder prune -af"
107- docker builder prune -af
108- echo "::endgroup::"
109- echo "::group::disk-free AFTER prune"
110- freespace
111- echo "::endgroup::"
74+ with :
75+ keep-image : mcr.microsoft.com/windows/${{ matrix.base }}:${{ matrix.windows_version }}
11276
11377 - name : Prepare mise and Github token for the build context
11478 run : |
@@ -139,7 +103,10 @@ jobs:
139103 DOCKERFILE : ${{ steps.dockerfile.outputs.dockerfile }}
140104 IMAGE_TAG : ${{ steps.dockerfile.outputs.tag }}
141105 run : |
142- args="-f $DOCKERFILE ${{ matrix.build_arg }} --build-arg MISE_ENV"
106+ args="-f $DOCKERFILE --build-arg MISE_ENV"
107+ if [ "${{ matrix.runner }}" != "windows-2022" ]; then
108+ args="$args --build-arg WINDOWS_VERSION=${{ matrix.windows_version }}"
109+ fi
143110 args="$args --target build-minimal -t $IMAGE_TAG"
144111 docker build $args .
145112
@@ -181,7 +148,10 @@ jobs:
181148 target=precompile
182149 tag=""
183150 fi
184- args="-f $DOCKERFILE ${{ matrix.build_arg }} --build-arg MISE_ENV"
151+ args="-f $DOCKERFILE --build-arg MISE_ENV"
152+ if [ "${{ matrix.runner }}" != "windows-2022" ]; then
153+ args="$args --build-arg WINDOWS_VERSION=${{ matrix.windows_version }}"
154+ fi
185155 args="$args --target $target $tag"
186156 docker build $args .
187157
0 commit comments