From fabdd4e82342b57e8e7750c5292e9fe0d598105b Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Wed, 4 Feb 2026 09:23:49 +0100 Subject: [PATCH] ci: Refactor Windows CI into script This makes it easier to: * Run the exact command of any CI type and step locally * Re-Run older CI tasks on GHA and using the latest merged config. (.github/ci-windows.py is merged with master on re-runs, but .github/workflows/ci.yml is NOT) Also, writing it in Python has benefits: * Any developer (even non-Windows ones) can read and modify the script. * Python is already required for tests, so no new dependency is needed. --- .github/ci-windows.py | 71 ++++++++++++++++++++++++++++++++++++++++ .github/workflows/ci.yml | 4 +-- 2 files changed, 72 insertions(+), 3 deletions(-) create mode 100755 .github/ci-windows.py diff --git a/.github/ci-windows.py b/.github/ci-windows.py new file mode 100755 index 00000000000..142fee7bac2 --- /dev/null +++ b/.github/ci-windows.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +# Copyright (c) The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit/. + +import argparse +import os +import shlex +import subprocess +import sys + + +def run(cmd, **kwargs): + print("+ " + shlex.join(cmd), flush=True) + kwargs.setdefault("check", True) + try: + return subprocess.run(cmd, **kwargs) + except Exception as e: + sys.exit(str(e)) + + +GENERATE_OPTIONS = { + "standard": [ + "-DBUILD_BENCH=ON", + "-DBUILD_KERNEL_LIB=ON", + "-DBUILD_UTIL_CHAINSTATE=ON", + "-DCMAKE_COMPILE_WARNING_AS_ERROR=ON", + ], + "fuzz": [ + "-DVCPKG_MANIFEST_NO_DEFAULT_FEATURES=ON", + "-DVCPKG_MANIFEST_FEATURES=wallet", + "-DBUILD_GUI=OFF", + "-DWITH_ZMQ=OFF", + "-DBUILD_FOR_FUZZING=ON", + "-DCMAKE_COMPILE_WARNING_AS_ERROR=ON", + ], +} + + +def generate(ci_type): + toolchain_file = os.path.join( + os.environ["VCPKG_INSTALLATION_ROOT"], + "scripts", + "buildsystems", + "vcpkg.cmake", + ) + command = [ + "cmake", + "-B", + "build", + "-Werror=dev", + "--preset", + "vs2022", + f"-DCMAKE_TOOLCHAIN_FILE={toolchain_file}", + ] + GENERATE_OPTIONS[ci_type] + run(command) + + +def main(): + parser = argparse.ArgumentParser(description="Utility to run Windows CI steps.") + parser.add_argument("ci_type", choices=GENERATE_OPTIONS, help="CI type to run.") + steps = ["generate"] + parser.add_argument("step", choices=steps, help="CI step to perform.") + args = parser.parse_args() + + if args.step == "generate": + generate(args.ci_type) + + +if __name__ == "__main__": + main() diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8257f565c01..f293b06e53e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -218,10 +218,8 @@ jobs: job-type: [standard, fuzz] include: - job-type: standard - generate-options: '-DBUILD_BENCH=ON -DBUILD_KERNEL_LIB=ON -DBUILD_UTIL_CHAINSTATE=ON -DCMAKE_COMPILE_WARNING_AS_ERROR=ON' job-name: 'Windows native, VS 2022' - job-type: fuzz - generate-options: '-DVCPKG_MANIFEST_NO_DEFAULT_FEATURES=ON -DVCPKG_MANIFEST_FEATURES="wallet" -DBUILD_GUI=OFF -DWITH_ZMQ=OFF -DBUILD_FOR_FUZZING=ON -DCMAKE_COMPILE_WARNING_AS_ERROR=ON' job-name: 'Windows native, fuzz, VS 2022' steps: @@ -272,7 +270,7 @@ jobs: - name: Generate build system run: | - cmake -B build -Werror=dev --preset vs2022 -DCMAKE_TOOLCHAIN_FILE="${VCPKG_INSTALLATION_ROOT}/scripts/buildsystems/vcpkg.cmake" ${{ matrix.generate-options }} + py -3 .github/ci-windows.py ${{ matrix.job-type }} generate - name: Save vcpkg binary cache uses: actions/cache/save@v4