Measure the Windows distributive, not the internal build-output archive - #6733
Merged
Conversation
The Windows artifact-size stats were collected on MREDist_<VS_TAG>_<config>.zip, a CI-internal hand-off (retention 1 day, consumed by update-win-version, then deleted) rather than on the archive users download. Collect them in update-win-version on the main MeshLibDist*.zip instead, matching every other platform, which already measures its shipped package. collect_ci_stats.py attaches artifact_size to a job that also uploaded runner stats, so the packaging job now collects those too; the matrix names the build behind each distributive so the row keeps its os/config/build-system dimensions. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
oitel
approved these changes
Aug 31, 2026
| # One developer distributive per Visual Studio toolchain. The MREDist_* | ||
| # inputs are produced by the matching VS CMake build in | ||
| # build-test-windows.yml (named via its VS_TAG). | ||
| # inputs are produced by the matching VS build in build-test-windows.yml |
Contributor
There was a problem hiding this comment.
Revert the overly detailed change.
| - name: Archive Distribution | ||
| run: py -3.10 scripts\zip_distribution.py install example_plugin ${{ matrix.output_zip }} | ||
|
|
||
| # Measure the archive users actually download: the main distributive, whose |
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The Windows leg of the artifact-size stats measured
MREDist_<VS_TAG>_<config>.zip, which istar --format zipofsource/x64/<config>— a CI-internal hand-off:retention-days: 1,consumed only by
update-win-version, then deleted by itscleanup-win-archivesjob. Nothingoutside CI ever downloads it, and no doc references the name.
Every other platform already measures the shipped package (
meshlib_*.deb,*.pkg,linux-vcpkg-*.tar.xz, the emscripten zip). Windows was the only outlier.That made the
MeshLib Windows Artifact Sizechart report a 118.6 -> 306.3 MB jump on #6657,read as a 2.6x regression in what users download. It was neither:
MREDist_VS19_Release.zip(internal)MeshLibDistVS19.zip(what users download)MeshLibDistVS19-PDB.zip(companion)The internal archive grew because the 23 new Release linker
.pdbfiles (190.6 MB of today's320.1 MB) have to ride to the packaging job —
make_install_folder.pycopiessource/x64intoinstall/lib, and only then doessplit_install_pdb.pymove them into the companion. So theold measurement tracked symbol traffic, and moved in the opposite direction from the archive
it was supposed to describe.
Change
Collect the artifact stats in
update-win-version, on${{ matrix.output_zip }}— the maindistributive, after
Archive Symbolshas already moved the.pdbfiles out. The exact globexcludes the
-PDB.zipcompanion (collect_ci_stats.pysums every entry of the stats file).collect_ci_stats.pyonly emits a job row whenRunnerSysStats-<job_id>.jsonexists, so thepackaging job now collects runner stats too, and the matrix says which build each distributive
came from:
MeshLibDistVS19.zipMeshLibDistVS22.zipMeshLibDistVS26.zipMeshLibDist-IteratorDebug.zipThose are the toolchains that produce the
MREDist_*inputs(
.github/workflows/matrix/windows-*-config.json). The collector lowercases both values, so theexisting dashboard filter (
os='windows' and build_config='release' and build_system='cmake')keeps matching the VS19 and VS22 rows with no dashboard change — it just describes the
distributive now instead of the build directory. VS26 stays on
msbuild, as its row did before.A distributive spans both configurations; each row is tagged with the Release build behind it
(Debug for the Debug-only IteratorDebug package), which is also what the row carried before.
Trade-off
update-win-versionruns only whenbuild-release-winis set — schedule,full-ci, or thebuild-release-windowslabel — not on every push tomaster. The Windows series thereforedrops from ~1 point per master push to ~1 per nightly. That is the real cadence at which a
Windows distributive is produced; the denser series was measuring something else.
Also gains a side effect worth having:
update-win-versionnow appears in the CI-stats jobtable, so its duration and step timings become visible like every other build job.
Testing
Labelled
build-release-windows+upload-binariessoupdate-win-versionactually runs, withthe other platforms disabled. Verify in the run: each of the four packaging jobs uploads
ArtifactStats-<job_id>.jsonandRunnerSysStats-<job_id>.json, and thecollect-statsjobprints an
artifact_sizefor them matching theMeshLibDist*.zipsizes.