Jens Geyer created THRIFT-6324:
----------------------------------
Summary: Cut the AppVeyor build matrix and build in parallel
Key: THRIFT-6324
URL: https://issues.apache.org/jira/browse/THRIFT-6324
Project: Thrift
Issue Type: Improvement
Components: Build Process
Reporter: Jens Geyer
h3. Problem
Six jobs, roughly 3 h 07 min of job time squeezed into 1 h 45 min of wall
clock. Measured on build 0.26.0.10733 and cross-checked against 0.26.0.10724, a
different pull request with near-identical timings.
*The Python matrix is five nearly identical builds.* Five of the six jobs are
MSVC2022 builds that differ only in {{PYTHON_VERSION}} (3.10 through 3.14).
Each one builds the whole C++ library, the compiler and every test executable
-- 21 min 27 s -- in order to run 12 Python tests that account for 112 s of the
248 s {{ctest}} run. The other 54 tests are C++ and identical across all five
jobs.
GitHub Actions already runs the full 3.10 to 3.14 matrix twice, in
{{lib-python}} on ubuntu-24.04 and in {{lib-python-macos}}, both off the same
YAML anchor in {{.github/workflows/build.yml}}. What AppVeyor adds on top is
the MSVC build of the {{fastbinary}} C extension ({{lib/py/setup.py}}) and the
Windows behaviour of the pure-Python tests. Neither of those changes between
3.11, 3.12 and 3.13 -- breakage shows up at the edges of the range, not in the
middle.
*Nothing is built in parallel.* {{cmake --build}} is invoked without
{{--parallel}} in both scripts:
* MSVC: MSBuild builds one project at a time. The log shows some 40 test
executables completing strictly in sequence, 3 to 15 s apart.
* MinGW: {{mingw32-make}} runs single-threaded for 34 min 13 s of that job's 46
min.
h3. Change
* {{appveyor.yml}}: keep Python 3.11 and 3.14, drop 3.10, 3.12 and 3.13. 3.11
rather than 3.10 as the lower edge because 3.10 reaches end of life on
2026-10-31, so the matrix holds for a year; 3.14 becomes 3.15 once the AppVeyor
image carries it.
* {{build/appveyor/MSVC-appveyor-full.bat}} and
{{build/appveyor/MINGW-appveyor-full.bat}}: pass {{--parallel
%NUMBER_OF_PROCESSORS%}} to {{cmake --build}}. An explicit number rather than a
bare {{--parallel}}, which for the Makefile generator means an unbounded {{make
-j}}.
* {{build/appveyor/win_showenv.bat}}: report {{NUMBER_OF_PROCESSORS}}, so the
logs say how much parallelism a worker actually offers.
Expected effect: job time down from about 3 h 07 min to about 1 h 42 min from
the matrix change alone, plus whatever the parallel build adds on top of that.
h3. Not in scope
Running time is the smaller half of the problem. Over the last 23 finished
builds the median time spent waiting in the queue was 6 h 26 min, against 1 h
43 min of actual building. That is a project setting on the AppVeyor side and
is being raised separately with ASF Infra.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)