diff --git a/.github/ci-windows-cross.py b/.github/ci-windows-cross.py index 13ca3b49456..90cd59c7fe7 100755 --- a/.github/ci-windows-cross.py +++ b/.github/ci-windows-cross.py @@ -134,13 +134,13 @@ def run_unit_tests(): def main(): parser = argparse.ArgumentParser(description="Utility to run Windows CI steps.") - steps = [ - "print_version", - "check_manifests", - "prepare_tests", - "run_unit_tests", - "run_functional_tests", - ] + steps = list(map(lambda f: f.__name__, [ + print_version, + check_manifests, + prepare_tests, + run_unit_tests, + run_functional_tests, + ])) parser.add_argument("step", choices=steps, help="CI step to perform.") args = parser.parse_args() @@ -149,16 +149,7 @@ def main(): str(Path.cwd() / "previous_releases"), ) - if args.step == "print_version": - print_version() - elif args.step == "check_manifests": - check_manifests() - elif args.step == "prepare_tests": - prepare_tests() - elif args.step == "run_unit_tests": - run_unit_tests() - elif args.step == "run_functional_tests": - run_functional_tests() + exec(f'{args.step}()') if __name__ == "__main__": diff --git a/.github/ci-windows.py b/.github/ci-windows.py index caa2d52c775..16d7db7a2ed 100755 --- a/.github/ci-windows.py +++ b/.github/ci-windows.py @@ -38,6 +38,29 @@ GENERATE_OPTIONS = { } +def github_import_vs_env(_ci_type): + vswhere_path = Path(os.environ["ProgramFiles(x86)"]) / "Microsoft Visual Studio" / "Installer" / "vswhere.exe" + installation_path = run( + [str(vswhere_path), "-latest", "-property", "installationPath"], + capture_output=True, + text=True, + ).stdout.strip() + vsdevcmd = Path(installation_path) / "Common7" / "Tools" / "vsdevcmd.bat" + comspec = os.environ["COMSPEC"] + output = run( + f'"{comspec}" /s /c ""{vsdevcmd}" -arch=x64 -no_logo && set"', + capture_output=True, + text=True, + ).stdout + github_env = os.environ["GITHUB_ENV"] + with open(github_env, "a") as env_file: + for line in output.splitlines(): + if "=" not in line: + continue + name, value = line.split("=", 1) + env_file.write(f"{name}={value}\n") + + def generate(ci_type): command = [ "cmake", @@ -50,7 +73,7 @@ def generate(ci_type): run(command) -def build(): +def build(_ci_type): command = [ "cmake", "--build", @@ -180,26 +203,18 @@ def run_tests(ci_type): 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", - "build", - "check_manifests", - "prepare_tests", - "run_tests", - ] + steps = list(map(lambda f: f.__name__, [ + github_import_vs_env, + generate, + build, + check_manifests, + prepare_tests, + run_tests, + ])) parser.add_argument("step", choices=steps, help="CI step to perform.") args = parser.parse_args() - if args.step == "generate": - generate(args.ci_type) - elif args.step == "build": - build() - elif args.step == "check_manifests": - check_manifests(args.ci_type) - elif args.step == "prepare_tests": - prepare_tests(args.ci_type) - elif args.step == "run_tests": - run_tests(args.ci_type) + exec(f'{args.step}("{args.ci_type}")') if __name__ == "__main__": diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9cae0987fec..1fedde674e2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -238,26 +238,19 @@ jobs: - *CHECKOUT - - &SET_UP_VS - name: Set up VS Developer Prompt - shell: pwsh -Command "$PSVersionTable; $PSNativeCommandUseErrorActionPreference = $true; $ErrorActionPreference = 'Stop'; & '{0}'" - run: | - $vswherePath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" - $installationPath = & $vswherePath -latest -property installationPath - & "${env:COMSPEC}" /s /c "`"$installationPath\Common7\Tools\vsdevcmd.bat`" -arch=x64 -no_logo && set" | foreach-object { - $name, $value = $_ -split '=', 2 - echo "$name=$value" >> $env:GITHUB_ENV - } + - &IMPORT_VS_ENV + name: Import Visual Studio env vars + run: py -3 .github/ci-windows.py "standard" github_import_vs_env - name: Get tool information - shell: pwsh run: | - cmake -version | Tee-Object -FilePath "cmake_version" - Write-Output "---" - msbuild -version | Tee-Object -FilePath "msbuild_version" - $env:VCToolsVersion | Tee-Object -FilePath "toolset_version" + set -o errexit -o pipefail -o xtrace -o nounset + + cmake -version | tee cmake_version + echo '---' + msbuild.exe -version | tee msbuild_version + echo "${VCToolsVersion-}" | tee toolset_version py -3 --version - Write-Host "PowerShell version $($PSVersionTable.PSVersion.ToString())" bash --version - name: Using vcpkg with MSBuild @@ -430,7 +423,7 @@ jobs: - name: Run bitcoind.exe run: py -3 .github/ci-windows-cross.py print_version - - *SET_UP_VS + - *IMPORT_VS_ENV - name: Check executable manifests run: py -3 .github/ci-windows-cross.py check_manifests