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.
This commit is contained in:
2 files changed
+72
-3
No files matched your search
Executable
+71
@@ -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()
|
||||||
@@ -218,10 +218,8 @@ jobs:
|
|||||||
job-type: [standard, fuzz]
|
job-type: [standard, fuzz]
|
||||||
include:
|
include:
|
||||||
- job-type: standard
|
- 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-name: 'Windows native, VS 2022'
|
||||||
- job-type: fuzz
|
- 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'
|
job-name: 'Windows native, fuzz, VS 2022'
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -272,7 +270,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Generate build system
|
- name: Generate build system
|
||||||
run: |
|
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
|
- name: Save vcpkg binary cache
|
||||||
uses: actions/cache/save@v4
|
uses: actions/cache/save@v4
|
||||||
|
|||||||
Reference in new issue
Block a user