From 3cbcb39da58d58d9a47ef152c791e166cc9084e3 Mon Sep 17 00:00:00 2001 From: Ethan Smith Date: Sun, 24 Apr 2022 04:21:46 -0700 Subject: [PATCH 01/15] Initial WASM/Cross build code --- master/custom/factories.py | 203 ++++++++++++++++++++++++++++++++++++- requirements.txt | 4 +- 2 files changed, 204 insertions(+), 3 deletions(-) diff --git a/master/custom/factories.py b/master/custom/factories.py index 82961471e..6a5905a4e 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -1,6 +1,15 @@ import os.path from buildbot.process import factory -from buildbot.steps.shell import Configure, Compile, ShellCommand +from buildbot.steps.shell import ( + Configure, + Compile, + ShellCommand, + SetPropertyFromCommand, +) + +from buildbot.plugins import util + +import re from .steps import ( Test, @@ -577,3 +586,195 @@ class WindowsARM64ReleaseBuild(WindowsARM64Build): testFlags = WindowsARM64Build.testFlags + ["+d"] # keep default cleanFlags, both configurations get cleaned factory_tags = ["win-arm64", "nondebug"] + +############################################################################## +############################## WASM BUILDS ################################# +############################################################################## + +def extract_build_triple(_rc, stdout, _stderr): + lines = stdout.splitlines() + if re.match(r'GNU Make \d+\.\d+\.\d+', lines[0]) is None: + return {} + triple_line = re.match(r'Built for (.*)', lines[1]) + if len(triple_line.groups()) != 1: + return {} + else: + return {'build_triple': triple_line.group(1)} + + +class UnixCrossBuild(UnixBuild): + configureFlags = [ + "--with-pydebug", + "--with-build-python=../build/python" + ] + extra_configure_flags = [] + host_configure_cmd = ["../../configure"] + host = None + host_make_cmd = "make" + + def setup(self, parallel, branch, test_with_PTY=False, **kwargs): + assert self.host is not None, "Must set self.host on cross builds" + + out_of_tree_dir = "build_oot" + oot_dir_path = os.path.join("build", out_of_tree_dir) + oot_build_path = os.path.join(oot_dir_path, "build") + oot_host_path = os.path.join(oot_dir_path, "host") + + self.addStep( + SetPropertyFromCommand( + name="Gather build triple from worker", + description="Get the build triple from make", + command=["make", "-v"], + extract_fn=extract_build_triple, + warnOnFailure=True, + ) + ) + + # Create out of tree directory for "build", the platform we are + # currently running on + self.addStep( + ShellCommand( + name="mkdir build out-of-tree directory", + description="Create build out-of-tree directory", + command=["mkdir", "-p", oot_build_path], + warnOnFailure=True, + ) + ) + # Create directory for "host", the platform we want to compile *for* + self.addStep( + ShellCommand( + name="mkdir host out-of-tree directory", + description="Create host out-of-tree directory", + command=["mkdir", "-p", oot_host_path], + warnOnFailure=True, + ) + ) + + # First, we build the "build" Python, which we need to cross compile + # the "host" Python + self.addStep( + Configure( + name="Configure build Python", + command=["../../configure"], + workdir=oot_build_path + ) + ) + if parallel: + compile = ["make", parallel] + else: + compile = ["make"] + + self.addStep( + Compile( + name="Compile build Python", + command=compile, + workdir=oot_build_path + ) + ) + + # Now that we have a "build" architecture Python, we can use that + # to build a "host" (also known as the target we are cross compiling) + # to + configure_cmd = [self.host_configure_cmd, "--prefix", "$(PWD)/target/host"] + configure_cmd += self.configureFlags + self.extra_configure_flags + configure_cmd += [util.Interpolate("--build=%(prop:build_triple)s")] + configure_cmd += [f"--host={self.host}"] + self.addStep( + Configure( + name="Configure host Python", + command=configure_cmd, + env=self.compile_environ, + workdir=oot_host_path + ) + ) + + testopts = self.testFlags + if "-R" not in self.testFlags: + testopts += " --junit-xml test-results.xml" + if parallel: + testopts = testopts + " " + parallel + if "-j" not in testopts: + testopts = "-j2 " + testopts + + # Timeout for the buildworker process + self.test_timeout = self.test_timeout or TEST_TIMEOUT + # Timeout for faulthandler + faulthandler_timeout = self.test_timeout - 5 * 60 + + # we need to insert node before calls to python.js + runshared = "RUNSHARED=node" + + test = [ + "make", + "buildbottest", + "TESTOPTS=" + testopts + " ${BUILDBOT_TESTOPTS}", + "TESTPYTHONOPTS=" + self.interpreterFlags, + "TESTTIMEOUT=" + str(faulthandler_timeout), + runshared, + ] + + if parallel: + compile = [self.host_make_cmd, parallel, self.makeTarget] + else: + compile = [self.host_make_cmd, self.makeTarget] + self.addStep( + Compile( + name="Compile host Python", + command=compile, + env=self.compile_environ, + workdir=oot_host_path, + ) + ) + pyinfo_command = [ + "make", + "pythoninfo", + runshared, + ] + self.addStep( + ShellCommand( + name="pythoninfo", + description="pythoninfo", + command=pyinfo_command, + warnOnFailure=True, + env=self.test_environ, + workdir=oot_host_path, + ) + ) + self.addStep( + Test( + command=test, + timeout=self.test_timeout, + usePTY=test_with_PTY, + env=self.test_environ, + workdir=oot_host_path, + ) + ) + if branch not in ("3",) and "-R" not in self.testFlags: + filename = os.path.join(oot_host_path, "test-results.xml") + self.addStep(UploadTestResults(branch, filename=filename)) + self.addStep(Clean(workdir=oot_build_path)) + self.addStep(Clean(workdir=oot_host_path)) + + +class WASMNodeBuild(UnixCrossBuild): + extra_configure_flags = [ + "--with-emscripten-target=node", + "--enable-wasm-dynamic-linking=no" + ] + compile_environ = { + "CONFIG_SITE": "../../Tools/wasm/config.site-wasm32-emscripten", + "EM_COMPILER_WRAPPER": "ccache", + } + host = "wasm32-unknown-emscripten" + host_configure_cmd = ["emconfigure", "../../configure"] + + def setup(self, parallel, branch, test_with_PTY=False, **kwargs): + self.addStep( + ShellCommand( + name="Install Emscripten ports of dependencies", + description="Install wasm dependencies", + command=["embuilder", "build", "zlib", "bzip2"], + warnOnFailure=True, + ) + ) + super().setup(parallel, branch, test_with_PTY, **kwargs) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index c55855a35..c6c73c09f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -36,14 +36,14 @@ pyOpenSSL==22.0.0 python-dateutil==2.8.2 PyYAML==6.0 requests==2.27.1 -sentry-sdk==1.5.9 +sentry-sdk==1.5.10 service-identity==21.1.0 six==1.16.0 SQLAlchemy==1.4.35 treq==22.2.0 Twisted==22.4.0 txaio==22.2.1 -typing_extensions==4.1.1 +typing_extensions==4.2.0 urllib3==1.26.9 Werkzeug==2.1.1 zipp==3.8.0 From 35ab4efa803eb7ba3e1c9d9ea628a6db31c81f1c Mon Sep 17 00:00:00 2001 From: Ethan Smith Date: Sun, 24 Apr 2022 04:23:35 -0700 Subject: [PATCH 02/15] Add newline to factories.py --- master/custom/factories.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/master/custom/factories.py b/master/custom/factories.py index 6a5905a4e..d8e5dd904 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -777,4 +777,4 @@ def setup(self, parallel, branch, test_with_PTY=False, **kwargs): warnOnFailure=True, ) ) - super().setup(parallel, branch, test_with_PTY, **kwargs) \ No newline at end of file + super().setup(parallel, branch, test_with_PTY, **kwargs) From 980dfe3329fc31cf1672628a64f6efd6d8a4b8a6 Mon Sep 17 00:00:00 2001 From: Ethan Smith Date: Sat, 11 Jun 2022 10:59:44 +0000 Subject: [PATCH 03/15] Changes to use HOSTRUNNER instead of RUNSHARED --- master/custom/factories.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/master/custom/factories.py b/master/custom/factories.py index d8e5dd904..2243cce9a 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -593,7 +593,7 @@ class WindowsARM64ReleaseBuild(WindowsARM64Build): def extract_build_triple(_rc, stdout, _stderr): lines = stdout.splitlines() - if re.match(r'GNU Make \d+\.\d+\.\d+', lines[0]) is None: + if re.match(r'GNU Make \d+\.\d+(\.\d+)?', lines[0]) is None: return {} triple_line = re.match(r'Built for (.*)', lines[1]) if len(triple_line.groups()) != 1: @@ -675,7 +675,7 @@ def setup(self, parallel, branch, test_with_PTY=False, **kwargs): # Now that we have a "build" architecture Python, we can use that # to build a "host" (also known as the target we are cross compiling) # to - configure_cmd = [self.host_configure_cmd, "--prefix", "$(PWD)/target/host"] + configure_cmd = self.host_configure_cmd + ["--prefix", "$(PWD)/target/host"] configure_cmd += self.configureFlags + self.extra_configure_flags configure_cmd += [util.Interpolate("--build=%(prop:build_triple)s")] configure_cmd += [f"--host={self.host}"] @@ -701,16 +701,12 @@ def setup(self, parallel, branch, test_with_PTY=False, **kwargs): # Timeout for faulthandler faulthandler_timeout = self.test_timeout - 5 * 60 - # we need to insert node before calls to python.js - runshared = "RUNSHARED=node" - test = [ "make", "buildbottest", "TESTOPTS=" + testopts + " ${BUILDBOT_TESTOPTS}", "TESTPYTHONOPTS=" + self.interpreterFlags, "TESTTIMEOUT=" + str(faulthandler_timeout), - runshared, ] if parallel: @@ -728,7 +724,6 @@ def setup(self, parallel, branch, test_with_PTY=False, **kwargs): pyinfo_command = [ "make", "pythoninfo", - runshared, ] self.addStep( ShellCommand( @@ -759,11 +754,11 @@ def setup(self, parallel, branch, test_with_PTY=False, **kwargs): class WASMNodeBuild(UnixCrossBuild): extra_configure_flags = [ "--with-emscripten-target=node", - "--enable-wasm-dynamic-linking=no" + "--enable-wasm-dynamic-linking=no", + "--enable-wasm-pthreads", ] compile_environ = { "CONFIG_SITE": "../../Tools/wasm/config.site-wasm32-emscripten", - "EM_COMPILER_WRAPPER": "ccache", } host = "wasm32-unknown-emscripten" host_configure_cmd = ["emconfigure", "../../configure"] From 1f59c582b70afce92f7722117ef8f8260a44c29b Mon Sep 17 00:00:00 2001 From: Pablo Galindo Salgado Date: Sun, 8 May 2022 04:50:18 +0100 Subject: [PATCH 04/15] Add 3.11 branches (#323) --- master/custom/factories.py | 8 ++++---- master/custom/workers.py | 8 ++++---- master/master.cfg | 1 + 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/master/custom/factories.py b/master/custom/factories.py index 2243cce9a..676f4ff68 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -20,7 +20,7 @@ UploadTestResults, ) -main_branch_version = "3.11" +main_branch_version = "3.12" CUSTOM_BRANCH_NAME = "custom" # This (default) timeout is for each individual test file. @@ -396,8 +396,8 @@ class RHEL7Build(UnixBuild): # sub-directories. # # On Fedora/RHEL specfile, the following directories are used: - # /builddir/build/BUILD/Python-3.10: source code - # /builddir/build/BUILD/Python-3.10/build/optimized: configure, make, tests + # /builddir/build/BUILD/Python-3.11: source code + # /builddir/build/BUILD/Python-3.11/build/optimized: configure, make, tests build_out_of_tree = True @@ -420,7 +420,7 @@ class FedoraStableBuild(RHEL8Build): # # Try to be as close as possible to the Fedora specfile used to build # the RPM package: - # https://src.fedoraproject.org/rpms/python3.10/blob/rawhide/f/python3.10.spec + # https://src.fedoraproject.org/rpms/python3.11/blob/rawhide/f/python3.11.spec configureFlags = RHEL8Build.configureFlags + [ # Options specific to Fedora # FIXME: enable this flag diff --git a/master/custom/workers.py b/master/custom/workers.py index 58758d451..aa3ff411f 100644 --- a/master/custom/workers.py +++ b/master/custom/workers.py @@ -162,7 +162,7 @@ def get_workers(settings): cpw( name="edelsohn-aix-ppc64", tags=['aix', 'unix', 'ppc64'], - branches=['3.8', '3.9', '3.10', '3.x'], + branches=['3.8', '3.9', '3.10', '3.11', '3.x'], parallel_tests=10, ), cpw( @@ -241,18 +241,18 @@ def get_workers(settings): cpw( name="kulikjak-solaris-sparcv9", tags=['solaris', 'unix', 'sparc', 'sparcv9'], - branches=['3.9', '3.10', '3.x'], + branches=['3.9', '3.10', '3.11', '3.x'], parallel_tests=16, ), cpw( name="pablogsal-arch-x86_64", tags=['linux', 'unix', 'arch', 'amd64', 'x86-64'], - branches=['3.9', '3.10', '3.x'], + branches=['3.9', '3.10', '3.11', '3.x'], ), cpw( name="pablogsal-macos-m1", tags=['macOS', 'unix', 'arm', 'arm64'], - branches=['3.9', '3.10', '3.x'], + branches=['3.9', '3.10', '3.11', '3.x'], parallel_tests=4, ), cpw( diff --git a/master/master.cfg b/master/master.cfg index 14dc0b23f..ec784edb2 100644 --- a/master/master.cfg +++ b/master/master.cfg @@ -117,6 +117,7 @@ c["workers"] = [w.bb_worker for w in WORKERS] git_url = str(settings.git_url) git_branches = [ (git_url, "3.x", "main"), + (git_url, "3.11", "3.11"), (git_url, "3.10", "3.10"), (git_url, "3.9", "3.9"), (git_url, "3.8", "3.8"), From 40594a3c5fb51bbb6053b29820f42e8bb58d4beb Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 3 Jun 2022 17:40:39 -0700 Subject: [PATCH 05/15] Add tier labels corresponding to PEP 11 (#326) --- master/custom/builders.py | 266 +++++++++++++++++++------------------- master/master.cfg | 14 +- 2 files changed, 145 insertions(+), 135 deletions(-) diff --git a/master/custom/builders.py b/master/custom/builders.py index c8def42fd..2855bb748 100644 --- a/master/custom/builders.py +++ b/master/custom/builders.py @@ -40,6 +40,10 @@ STABLE = "stable" UNSTABLE = "unstable" +TIER_1 = "tier-1" +TIER_2 = "tier-2" +TIER_3 = "tier-3" +NO_TIER = None def get_builders(settings): @@ -50,159 +54,159 @@ def get_builders(settings): return [ # -- Stable builders -- # Linux - ("AMD64 Debian root", "angelico-debian-amd64", UnixBuild, STABLE), - ("AMD64 Debian PGO", "gps-debian-profile-opt", PGOUnixBuild, STABLE), - ("AMD64 Ubuntu Shared", "bolen-ubuntu", SharedUnixBuild, STABLE), - ("PPC64 Fedora", "edelsohn-fedora-ppc64", FedoraStableBuild, STABLE), - ("s390x SLES", "edelsohn-sles-z", UnixBuild, STABLE), - ("s390x Debian", "edelsohn-debian-z", UnixBuild, STABLE), - ("s390x Fedora", "edelsohn-fedora-z", UnixBuild, STABLE), - ("s390x Fedora Refleaks", "edelsohn-fedora-z", UnixRefleakBuild, STABLE), - ("s390x Fedora Clang", "edelsohn-fedora-z", ClangUnixBuild, STABLE), - ("s390x Fedora Clang Installed", "edelsohn-fedora-z", ClangUnixInstalledBuild, STABLE), - ("s390x Fedora LTO", "edelsohn-fedora-z", LTONonDebugUnixBuild, STABLE), - ("s390x Fedora LTO + PGO", "edelsohn-fedora-z", LTOPGONonDebugBuild, STABLE), - ("s390x RHEL7", "edelsohn-rhel-z", UnixBuild, STABLE), - ("s390x RHEL7 Refleaks", "edelsohn-rhel-z", UnixRefleakBuild, STABLE), - ("s390x RHEL7 LTO", "edelsohn-rhel-z", LTONonDebugUnixBuild, STABLE), - ("s390x RHEL7 LTO + PGO", "edelsohn-rhel-z", LTOPGONonDebugBuild, STABLE), - ("s390x RHEL8", "edelsohn-rhel8-z", UnixBuild, STABLE), - ("s390x RHEL8 Refleaks", "edelsohn-rhel8-z", UnixRefleakBuild, STABLE), - ("s390x RHEL8 LTO", "edelsohn-rhel8-z", LTONonDebugUnixBuild, STABLE), - ("s390x RHEL8 LTO + PGO", "edelsohn-rhel8-z", LTOPGONonDebugBuild, STABLE), - ("x86 Gentoo Non-Debug with X", "ware-gentoo-x86", SlowNonDebugUnixBuild, STABLE), - ("x86 Gentoo Installed with X", "ware-gentoo-x86", SlowUnixInstalledBuild, STABLE), - ("AMD64 Fedora Stable", "cstratak-fedora-stable-x86_64", FedoraStableBuild, STABLE), - ("AMD64 Fedora Stable Refleaks", "cstratak-fedora-stable-x86_64", UnixRefleakBuild, STABLE), - ("AMD64 Fedora Stable Clang", "cstratak-fedora-stable-x86_64", ClangUnixBuild, STABLE), - ("AMD64 Fedora Stable Clang Installed", "cstratak-fedora-stable-x86_64", ClangUnixInstalledBuild, STABLE), - ("AMD64 Fedora Stable LTO", "cstratak-fedora-stable-x86_64", LTONonDebugUnixBuild, STABLE), - ("AMD64 Fedora Stable LTO + PGO", "cstratak-fedora-stable-x86_64", LTOPGONonDebugBuild, STABLE), - ("AMD64 RHEL7", "cstratak-RHEL7-x86_64", RHEL7Build, STABLE), - ("AMD64 RHEL7 Refleaks", "cstratak-RHEL7-x86_64", UnixRefleakBuild, STABLE), - ("AMD64 RHEL7 LTO", "cstratak-RHEL7-x86_64", LTONonDebugUnixBuild, STABLE), - ("AMD64 RHEL7 LTO + PGO", "cstratak-RHEL7-x86_64", LTOPGONonDebugBuild, STABLE), - ("AMD64 RHEL8", "cstratak-RHEL8-x86_64", RHEL8Build, STABLE), - ("AMD64 RHEL8 Refleaks", "cstratak-RHEL8-x86_64", UnixRefleakBuild, STABLE), - ("AMD64 RHEL8 LTO", "cstratak-RHEL8-x86_64", LTONonDebugUnixBuild, STABLE), - ("AMD64 RHEL8 LTO + PGO", "cstratak-RHEL8-x86_64", LTOPGONonDebugBuild, STABLE), - ("AMD64 RHEL8 FIPS Only Blake2 Builtin Hash", "cstratak-RHEL8-fips-x86_64", RHEL8NoBuiltinHashesUnixBuildExceptBlake2, STABLE), - ("AMD64 Arch Linux Asan", "pablogsal-arch-x86_64", UnixAsanBuild, STABLE), - ("AMD64 Arch Linux Usan", "pablogsal-arch-x86_64", ClangUbsanLinuxBuild, STABLE), - ("AMD64 Arch Linux Asan Debug", "pablogsal-arch-x86_64", UnixAsanDebugBuild, STABLE), - ("AMD64 Arch Linux TraceRefs", "pablogsal-arch-x86_64", UnixTraceRefsBuild, STABLE), + ("AMD64 Debian root", "angelico-debian-amd64", UnixBuild, STABLE, NO_TIER), + ("AMD64 Debian PGO", "gps-debian-profile-opt", PGOUnixBuild, STABLE, NO_TIER), + ("AMD64 Ubuntu Shared", "bolen-ubuntu", SharedUnixBuild, STABLE, NO_TIER), + ("PPC64 Fedora", "edelsohn-fedora-ppc64", FedoraStableBuild, STABLE, NO_TIER), + ("s390x SLES", "edelsohn-sles-z", UnixBuild, STABLE, NO_TIER), + ("s390x Debian", "edelsohn-debian-z", UnixBuild, STABLE, NO_TIER), + ("s390x Fedora", "edelsohn-fedora-z", UnixBuild, STABLE, TIER_3), + ("s390x Fedora Refleaks", "edelsohn-fedora-z", UnixRefleakBuild, STABLE, NO_TIER), + ("s390x Fedora Clang", "edelsohn-fedora-z", ClangUnixBuild, STABLE, NO_TIER), + ("s390x Fedora Clang Installed", "edelsohn-fedora-z", ClangUnixInstalledBuild, STABLE, NO_TIER), + ("s390x Fedora LTO", "edelsohn-fedora-z", LTONonDebugUnixBuild, STABLE, NO_TIER), + ("s390x Fedora LTO + PGO", "edelsohn-fedora-z", LTOPGONonDebugBuild, STABLE, NO_TIER), + ("s390x RHEL7", "edelsohn-rhel-z", UnixBuild, STABLE, NO_TIER), + ("s390x RHEL7 Refleaks", "edelsohn-rhel-z", UnixRefleakBuild, STABLE, NO_TIER), + ("s390x RHEL7 LTO", "edelsohn-rhel-z", LTONonDebugUnixBuild, STABLE, NO_TIER), + ("s390x RHEL7 LTO + PGO", "edelsohn-rhel-z", LTOPGONonDebugBuild, STABLE, NO_TIER), + ("s390x RHEL8", "edelsohn-rhel8-z", UnixBuild, STABLE, NO_TIER), + ("s390x RHEL8 Refleaks", "edelsohn-rhel8-z", UnixRefleakBuild, STABLE, NO_TIER), + ("s390x RHEL8 LTO", "edelsohn-rhel8-z", LTONonDebugUnixBuild, STABLE, NO_TIER), + ("s390x RHEL8 LTO + PGO", "edelsohn-rhel8-z", LTOPGONonDebugBuild, STABLE, NO_TIER), + ("x86 Gentoo Non-Debug with X", "ware-gentoo-x86", SlowNonDebugUnixBuild, STABLE, NO_TIER), + ("x86 Gentoo Installed with X", "ware-gentoo-x86", SlowUnixInstalledBuild, STABLE, NO_TIER), + ("AMD64 Fedora Stable", "cstratak-fedora-stable-x86_64", FedoraStableBuild, STABLE, NO_TIER), + ("AMD64 Fedora Stable Refleaks", "cstratak-fedora-stable-x86_64", UnixRefleakBuild, STABLE, NO_TIER), + ("AMD64 Fedora Stable Clang", "cstratak-fedora-stable-x86_64", ClangUnixBuild, STABLE, TIER_2), + ("AMD64 Fedora Stable Clang Installed", "cstratak-fedora-stable-x86_64", ClangUnixInstalledBuild, STABLE, NO_TIER), + ("AMD64 Fedora Stable LTO", "cstratak-fedora-stable-x86_64", LTONonDebugUnixBuild, STABLE, NO_TIER), + ("AMD64 Fedora Stable LTO + PGO", "cstratak-fedora-stable-x86_64", LTOPGONonDebugBuild, STABLE, NO_TIER), + ("AMD64 RHEL7", "cstratak-RHEL7-x86_64", RHEL7Build, STABLE, NO_TIER), + ("AMD64 RHEL7 Refleaks", "cstratak-RHEL7-x86_64", UnixRefleakBuild, STABLE, NO_TIER), + ("AMD64 RHEL7 LTO", "cstratak-RHEL7-x86_64", LTONonDebugUnixBuild, STABLE, NO_TIER), + ("AMD64 RHEL7 LTO + PGO", "cstratak-RHEL7-x86_64", LTOPGONonDebugBuild, STABLE, NO_TIER), + ("AMD64 RHEL8", "cstratak-RHEL8-x86_64", RHEL8Build, STABLE, NO_TIER), + ("AMD64 RHEL8 Refleaks", "cstratak-RHEL8-x86_64", UnixRefleakBuild, STABLE, NO_TIER), + ("AMD64 RHEL8 LTO", "cstratak-RHEL8-x86_64", LTONonDebugUnixBuild, STABLE, NO_TIER), + ("AMD64 RHEL8 LTO + PGO", "cstratak-RHEL8-x86_64", LTOPGONonDebugBuild, STABLE, NO_TIER), + ("AMD64 RHEL8 FIPS Only Blake2 Builtin Hash", "cstratak-RHEL8-fips-x86_64", RHEL8NoBuiltinHashesUnixBuildExceptBlake2, STABLE, NO_TIER), + ("AMD64 Arch Linux Asan", "pablogsal-arch-x86_64", UnixAsanBuild, STABLE, NO_TIER), + ("AMD64 Arch Linux Usan", "pablogsal-arch-x86_64", ClangUbsanLinuxBuild, STABLE, NO_TIER), + ("AMD64 Arch Linux Asan Debug", "pablogsal-arch-x86_64", UnixAsanDebugBuild, STABLE, NO_TIER), + ("AMD64 Arch Linux TraceRefs", "pablogsal-arch-x86_64", UnixTraceRefsBuild, STABLE, NO_TIER), # Linux PPC64le - ("PPC64LE Fedora Stable", "cstratak-fedora-stable-ppc64le", FedoraStableBuild, STABLE), - ("PPC64LE Fedora Stable Refleaks", "cstratak-fedora-stable-ppc64le", UnixRefleakBuild, STABLE), - ("PPC64LE Fedora Stable Clang", "cstratak-fedora-stable-ppc64le", ClangUnixBuild, STABLE), - ("PPC64LE Fedora Stable Clang Installed", "cstratak-fedora-stable-ppc64le", ClangUnixInstalledBuild, STABLE), - ("PPC64LE Fedora Stable LTO", "cstratak-fedora-stable-ppc64le", LTONonDebugUnixBuild, STABLE), - ("PPC64LE Fedora Stable LTO + PGO", "cstratak-fedora-stable-ppc64le", LTOPGONonDebugBuild, STABLE), - - ("PPC64LE RHEL7", "cstratak-RHEL7-ppc64le", RHEL7Build, STABLE), - ("PPC64LE RHEL7 Refleaks", "cstratak-RHEL7-ppc64le", UnixRefleakBuild, STABLE), - ("PPC64LE RHEL7 LTO", "cstratak-RHEL7-ppc64le", LTONonDebugUnixBuild, STABLE), - ("PPC64LE RHEL7 LTO + PGO", "cstratak-RHEL7-ppc64le", LTOPGONonDebugBuild, STABLE), - - ("PPC64LE RHEL8", "cstratak-RHEL8-ppc64le", RHEL8Build, STABLE), - ("PPC64LE RHEL8 Refleaks", "cstratak-RHEL8-ppc64le", UnixRefleakBuild, STABLE), - ("PPC64LE RHEL8 LTO", "cstratak-RHEL8-ppc64le", LTONonDebugUnixBuild, STABLE), - ("PPC64LE RHEL8 LTO + PGO", "cstratak-RHEL8-ppc64le", LTOPGONonDebugBuild, STABLE), + ("PPC64LE Fedora Stable", "cstratak-fedora-stable-ppc64le", FedoraStableBuild, STABLE, TIER_2), + ("PPC64LE Fedora Stable Refleaks", "cstratak-fedora-stable-ppc64le", UnixRefleakBuild, STABLE, NO_TIER), + ("PPC64LE Fedora Stable Clang", "cstratak-fedora-stable-ppc64le", ClangUnixBuild, STABLE, TIER_3), + ("PPC64LE Fedora Stable Clang Installed", "cstratak-fedora-stable-ppc64le", ClangUnixInstalledBuild, STABLE, NO_TIER), + ("PPC64LE Fedora Stable LTO", "cstratak-fedora-stable-ppc64le", LTONonDebugUnixBuild, STABLE, NO_TIER), + ("PPC64LE Fedora Stable LTO + PGO", "cstratak-fedora-stable-ppc64le", LTOPGONonDebugBuild, STABLE, NO_TIER), + + ("PPC64LE RHEL7", "cstratak-RHEL7-ppc64le", RHEL7Build, STABLE, NO_TIER), + ("PPC64LE RHEL7 Refleaks", "cstratak-RHEL7-ppc64le", UnixRefleakBuild, STABLE, NO_TIER), + ("PPC64LE RHEL7 LTO", "cstratak-RHEL7-ppc64le", LTONonDebugUnixBuild, STABLE, NO_TIER), + ("PPC64LE RHEL7 LTO + PGO", "cstratak-RHEL7-ppc64le", LTOPGONonDebugBuild, STABLE, NO_TIER), + + ("PPC64LE RHEL8", "cstratak-RHEL8-ppc64le", RHEL8Build, STABLE, NO_TIER), + ("PPC64LE RHEL8 Refleaks", "cstratak-RHEL8-ppc64le", UnixRefleakBuild, STABLE, NO_TIER), + ("PPC64LE RHEL8 LTO", "cstratak-RHEL8-ppc64le", LTONonDebugUnixBuild, STABLE, NO_TIER), + ("PPC64LE RHEL8 LTO + PGO", "cstratak-RHEL8-ppc64le", LTOPGONonDebugBuild, STABLE, NO_TIER), # Linux aarch64 - ("aarch64 Fedora Stable", "cstratak-fedora-stable-aarch64", FedoraStableBuild, STABLE), - ("aarch64 Fedora Stable Refleaks", "cstratak-fedora-stable-aarch64", UnixRefleakBuild, STABLE), - ("aarch64 Fedora Stable Clang", "cstratak-fedora-stable-aarch64", ClangUnixBuild, STABLE), - ("aarch64 Fedora Stable Clang Installed", "cstratak-fedora-stable-aarch64", ClangUnixInstalledBuild, STABLE), - ("aarch64 Fedora Stable LTO", "cstratak-fedora-stable-aarch64", LTONonDebugUnixBuild, STABLE), - ("aarch64 Fedora Stable LTO + PGO", "cstratak-fedora-stable-aarch64", LTOPGONonDebugBuild, STABLE), + ("aarch64 Fedora Stable", "cstratak-fedora-stable-aarch64", FedoraStableBuild, STABLE, TIER_2), + ("aarch64 Fedora Stable Refleaks", "cstratak-fedora-stable-aarch64", UnixRefleakBuild, STABLE, NO_TIER), + ("aarch64 Fedora Stable Clang", "cstratak-fedora-stable-aarch64", ClangUnixBuild, STABLE, TIER_2), + ("aarch64 Fedora Stable Clang Installed", "cstratak-fedora-stable-aarch64", ClangUnixInstalledBuild, STABLE, NO_TIER), + ("aarch64 Fedora Stable LTO", "cstratak-fedora-stable-aarch64", LTONonDebugUnixBuild, STABLE, NO_TIER), + ("aarch64 Fedora Stable LTO + PGO", "cstratak-fedora-stable-aarch64", LTOPGONonDebugBuild, STABLE, NO_TIER), - ("aarch64 RHEL8", "cstratak-RHEL8-aarch64", RHEL8Build, STABLE), - ("aarch64 RHEL8 Refleaks", "cstratak-RHEL8-aarch64", UnixRefleakBuild, STABLE), - ("aarch64 RHEL8 LTO", "cstratak-RHEL8-aarch64", LTONonDebugUnixBuild, STABLE), - ("aarch64 RHEL8 LTO + PGO", "cstratak-RHEL8-aarch64", LTOPGONonDebugBuild, STABLE), + ("aarch64 RHEL8", "cstratak-RHEL8-aarch64", RHEL8Build, STABLE, NO_TIER), + ("aarch64 RHEL8 Refleaks", "cstratak-RHEL8-aarch64", UnixRefleakBuild, STABLE, NO_TIER), + ("aarch64 RHEL8 LTO", "cstratak-RHEL8-aarch64", LTONonDebugUnixBuild, STABLE, NO_TIER), + ("aarch64 RHEL8 LTO + PGO", "cstratak-RHEL8-aarch64", LTOPGONonDebugBuild, STABLE, NO_TIER), # macOS - ("x86-64 macOS", "billenstein-macos", UnixBuild, STABLE), - ("ARM64 macOS", "pablogsal-macos-m1", MacOSArmWithBrewBuild, STABLE), + ("x86-64 macOS", "billenstein-macos", UnixBuild, STABLE, NO_TIER), + ("ARM64 macOS", "pablogsal-macos-m1", MacOSArmWithBrewBuild, STABLE, TIER_2), # Other Unix - ("AMD64 FreeBSD Non-Debug", "koobs-freebsd-9e36", SlowNonDebugUnixBuild, STABLE), - ("AMD64 FreeBSD Shared", "koobs-freebsd-564d", SlowSharedUnixBuild, STABLE), + ("AMD64 FreeBSD Non-Debug", "koobs-freebsd-9e36", SlowNonDebugUnixBuild, STABLE, TIER_3), + ("AMD64 FreeBSD Shared", "koobs-freebsd-564d", SlowSharedUnixBuild, STABLE, NO_TIER), # Windows - ("AMD64 Windows11", "kloth-win11", Windows64Build, UNSTABLE), - ("AMD64 Windows11 Non-Debug", "ware-win11", Windows64ReleaseBuild, UNSTABLE), - ("AMD64 Windows11 Refleaks", "ware-win11", Windows64RefleakBuild, UNSTABLE), - ("AMD64 Windows10 Pro", "kloth-win64", Windows64Build, STABLE), - ("AMD64 Windows7 SP1", "kloth-win7", Windows64Build, STABLE), - ("AMD64 Windows10", "bolen-windows10", Windows64Build, STABLE), - ("AMD64 Windows8.1 Non-Debug", "ware-win81-release", Windows64ReleaseBuild, STABLE), - #("AMD64 Windows8.1 Refleaks", "ware-win81-release", Windows64RefleakBuild, STABLE), - ("x86 Windows7", "bolen-windows7", SlowWindowsBuild, STABLE), + ("AMD64 Windows11", "kloth-win11", Windows64Build, UNSTABLE, NO_TIER), + ("AMD64 Windows11 Non-Debug", "ware-win11", Windows64ReleaseBuild, UNSTABLE, NO_TIER), + ("AMD64 Windows11 Refleaks", "ware-win11", Windows64RefleakBuild, UNSTABLE, NO_TIER), + ("AMD64 Windows10 Pro", "kloth-win64", Windows64Build, STABLE, NO_TIER), + ("AMD64 Windows7 SP1", "kloth-win7", Windows64Build, STABLE, NO_TIER), + ("AMD64 Windows10", "bolen-windows10", Windows64Build, STABLE, NO_TIER), + ("AMD64 Windows8.1 Non-Debug", "ware-win81-release", Windows64ReleaseBuild, STABLE, NO_TIER), + #("AMD64 Windows8.1 Refleaks", "ware-win81-release", Windows64RefleakBuild, STABLE, NO_TIER), + ("x86 Windows7", "bolen-windows7", SlowWindowsBuild, STABLE, NO_TIER), # -- Unstable builders -- # Linux x86 / AMD64 - ("AMD64 Clang UBSan", "gps-clang-ubsan", ClangUbsanLinuxBuild, UNSTABLE), - ("AMD64 Alpine Linux", "ware-alpine", UnixBuild, UNSTABLE), - ("AMD64 Fedora Rawhide", "cstratak-fedora-rawhide-x86_64", FedoraRawhideBuild, UNSTABLE), - ("AMD64 Fedora Rawhide Refleaks", "cstratak-fedora-rawhide-x86_64", UnixRefleakBuild, UNSTABLE), - ("AMD64 Fedora Rawhide Clang", "cstratak-fedora-rawhide-x86_64", ClangUnixBuild, UNSTABLE), - ("AMD64 Fedora Rawhide Clang Installed", "cstratak-fedora-rawhide-x86_64", ClangUnixInstalledBuild, UNSTABLE), - ("AMD64 Fedora Rawhide LTO", "cstratak-fedora-rawhide-x86_64", LTONonDebugUnixBuild, UNSTABLE), - ("AMD64 Fedora Rawhide LTO + PGO", "cstratak-fedora-rawhide-x86_64", LTOPGONonDebugBuild, UNSTABLE), - ("AMD64 Ubuntu", "skumaran-ubuntu-x86_64", UnixBuild, UNSTABLE), - ("AMD64 Arch Linux VintageParser", "pablogsal-arch-x86_64", UnixVintageParserBuild, UNSTABLE), - ("AMD64 RHEL8 FIPS No Builtin Hashes", "cstratak-RHEL8-fips-x86_64", RHEL8NoBuiltinHashesUnixBuild, UNSTABLE), - ("AMD64 CentOS9", "cstratak-CentOS9-x86_64", CentOS9Build, UNSTABLE), - ("AMD64 CentOS9 Refleaks", "cstratak-CentOS9-x86_64", UnixRefleakBuild, UNSTABLE), - ("AMD64 CentOS9 LTO", "cstratak-CentOS9-x86_64", LTONonDebugUnixBuild, UNSTABLE), - ("AMD64 CentOS9 LTO + PGO", "cstratak-CentOS9-x86_64", LTOPGONonDebugBuild, UNSTABLE), - ("AMD64 CentOS9 FIPS Only Blake2 Builtin Hash", "cstratak-CentOS9-fips-x86_64", CentOS9NoBuiltinHashesUnixBuildExceptBlake2, UNSTABLE), - ("AMD64 CentOS9 FIPS No Builtin Hashes", "cstratak-CentOS9-fips-x86_64", CentOS9NoBuiltinHashesUnixBuild, UNSTABLE), + ("AMD64 Clang UBSan", "gps-clang-ubsan", ClangUbsanLinuxBuild, UNSTABLE, NO_TIER), + ("AMD64 Alpine Linux", "ware-alpine", UnixBuild, UNSTABLE, NO_TIER), + ("AMD64 Fedora Rawhide", "cstratak-fedora-rawhide-x86_64", FedoraRawhideBuild, UNSTABLE, NO_TIER), + ("AMD64 Fedora Rawhide Refleaks", "cstratak-fedora-rawhide-x86_64", UnixRefleakBuild, UNSTABLE, NO_TIER), + ("AMD64 Fedora Rawhide Clang", "cstratak-fedora-rawhide-x86_64", ClangUnixBuild, UNSTABLE, NO_TIER), + ("AMD64 Fedora Rawhide Clang Installed", "cstratak-fedora-rawhide-x86_64", ClangUnixInstalledBuild, UNSTABLE, NO_TIER), + ("AMD64 Fedora Rawhide LTO", "cstratak-fedora-rawhide-x86_64", LTONonDebugUnixBuild, UNSTABLE, NO_TIER), + ("AMD64 Fedora Rawhide LTO + PGO", "cstratak-fedora-rawhide-x86_64", LTOPGONonDebugBuild, UNSTABLE, NO_TIER), + ("AMD64 Ubuntu", "skumaran-ubuntu-x86_64", UnixBuild, UNSTABLE, NO_TIER), + ("AMD64 Arch Linux VintageParser", "pablogsal-arch-x86_64", UnixVintageParserBuild, UNSTABLE, NO_TIER), + ("AMD64 RHEL8 FIPS No Builtin Hashes", "cstratak-RHEL8-fips-x86_64", RHEL8NoBuiltinHashesUnixBuild, UNSTABLE, NO_TIER), + ("AMD64 CentOS9", "cstratak-CentOS9-x86_64", CentOS9Build, UNSTABLE, NO_TIER), + ("AMD64 CentOS9 Refleaks", "cstratak-CentOS9-x86_64", UnixRefleakBuild, UNSTABLE, NO_TIER), + ("AMD64 CentOS9 LTO", "cstratak-CentOS9-x86_64", LTONonDebugUnixBuild, UNSTABLE, NO_TIER), + ("AMD64 CentOS9 LTO + PGO", "cstratak-CentOS9-x86_64", LTOPGONonDebugBuild, UNSTABLE, NO_TIER), + ("AMD64 CentOS9 FIPS Only Blake2 Builtin Hash", "cstratak-CentOS9-fips-x86_64", CentOS9NoBuiltinHashesUnixBuildExceptBlake2, UNSTABLE, NO_TIER), + ("AMD64 CentOS9 FIPS No Builtin Hashes", "cstratak-CentOS9-fips-x86_64", CentOS9NoBuiltinHashesUnixBuild, UNSTABLE, NO_TIER), # Linux PPC64le - ("PPC64LE Fedora Rawhide", "cstratak-fedora-rawhide-ppc64le", FedoraRawhideBuild, UNSTABLE), - ("PPC64LE Fedora Rawhide Refleaks", "cstratak-fedora-rawhide-ppc64le", UnixRefleakBuild, UNSTABLE), - ("PPC64LE Fedora Rawhide Clang", "cstratak-fedora-rawhide-ppc64le", ClangUnixBuild, UNSTABLE), - ("PPC64LE Fedora Rawhide Clang Installed", "cstratak-fedora-rawhide-ppc64le", ClangUnixInstalledBuild, UNSTABLE), - ("PPC64LE Fedora Rawhide LTO", "cstratak-fedora-rawhide-ppc64le", LTONonDebugUnixBuild, UNSTABLE), - ("PPC64LE Fedora Rawhide LTO + PGO", "cstratak-fedora-rawhide-ppc64le", LTOPGONonDebugBuild, UNSTABLE), - ("PPC64LE CentOS9", "cstratak-CentOS9-ppc64le", CentOS9Build, UNSTABLE), - ("PPC64LE CentOS9 Refleaks", "cstratak-CentOS9-ppc64le", UnixRefleakBuild, UNSTABLE), - ("PPC64LE CentOS9 LTO", "cstratak-CentOS9-ppc64le", LTONonDebugUnixBuild, UNSTABLE), - ("PPC64LE CentOS9 LTO + PGO", "cstratak-CentOS9-ppc64le", LTOPGONonDebugBuild, UNSTABLE), + ("PPC64LE Fedora Rawhide", "cstratak-fedora-rawhide-ppc64le", FedoraRawhideBuild, UNSTABLE, NO_TIER), + ("PPC64LE Fedora Rawhide Refleaks", "cstratak-fedora-rawhide-ppc64le", UnixRefleakBuild, UNSTABLE, NO_TIER), + ("PPC64LE Fedora Rawhide Clang", "cstratak-fedora-rawhide-ppc64le", ClangUnixBuild, UNSTABLE, NO_TIER), + ("PPC64LE Fedora Rawhide Clang Installed", "cstratak-fedora-rawhide-ppc64le", ClangUnixInstalledBuild, UNSTABLE, NO_TIER), + ("PPC64LE Fedora Rawhide LTO", "cstratak-fedora-rawhide-ppc64le", LTONonDebugUnixBuild, UNSTABLE, NO_TIER), + ("PPC64LE Fedora Rawhide LTO + PGO", "cstratak-fedora-rawhide-ppc64le", LTOPGONonDebugBuild, UNSTABLE, NO_TIER), + ("PPC64LE CentOS9", "cstratak-CentOS9-ppc64le", CentOS9Build, UNSTABLE, NO_TIER), + ("PPC64LE CentOS9 Refleaks", "cstratak-CentOS9-ppc64le", UnixRefleakBuild, UNSTABLE, NO_TIER), + ("PPC64LE CentOS9 LTO", "cstratak-CentOS9-ppc64le", LTONonDebugUnixBuild, UNSTABLE, NO_TIER), + ("PPC64LE CentOS9 LTO + PGO", "cstratak-CentOS9-ppc64le", LTOPGONonDebugBuild, UNSTABLE, NO_TIER), # Linux aarch32 - ("ARM Raspbian", "gps-raspbian", SlowNonDebugUnixBuild, UNSTABLE), + ("ARM Raspbian", "gps-raspbian", SlowNonDebugUnixBuild, UNSTABLE, TIER_3), # Linux aarch64 - ("aarch64 Fedora Rawhide", "cstratak-fedora-rawhide-aarch64", FedoraRawhideBuild, UNSTABLE), - ("aarch64 Fedora Rawhide Refleaks", "cstratak-fedora-rawhide-aarch64", UnixRefleakBuild, UNSTABLE), - ("aarch64 Fedora Rawhide Clang", "cstratak-fedora-rawhide-aarch64", ClangUnixBuild, UNSTABLE), - ("aarch64 Fedora Rawhide Clang Installed", "cstratak-fedora-rawhide-aarch64", ClangUnixInstalledBuild, UNSTABLE), - ("aarch64 Fedora Rawhide LTO", "cstratak-fedora-rawhide-aarch64", LTONonDebugUnixBuild, UNSTABLE), - ("aarch64 Fedora Rawhide LTO + PGO", "cstratak-fedora-rawhide-aarch64", LTOPGONonDebugBuild, UNSTABLE), + ("aarch64 Fedora Rawhide", "cstratak-fedora-rawhide-aarch64", FedoraRawhideBuild, UNSTABLE, NO_TIER), + ("aarch64 Fedora Rawhide Refleaks", "cstratak-fedora-rawhide-aarch64", UnixRefleakBuild, UNSTABLE, NO_TIER), + ("aarch64 Fedora Rawhide Clang", "cstratak-fedora-rawhide-aarch64", ClangUnixBuild, UNSTABLE, NO_TIER), + ("aarch64 Fedora Rawhide Clang Installed", "cstratak-fedora-rawhide-aarch64", ClangUnixInstalledBuild, UNSTABLE, NO_TIER), + ("aarch64 Fedora Rawhide LTO", "cstratak-fedora-rawhide-aarch64", LTONonDebugUnixBuild, UNSTABLE, NO_TIER), + ("aarch64 Fedora Rawhide LTO + PGO", "cstratak-fedora-rawhide-aarch64", LTOPGONonDebugBuild, UNSTABLE, NO_TIER), - ("aarch64 CentOS9 Refleaks", "cstratak-CentOS9-aarch64", UnixRefleakBuild, UNSTABLE), - ("aarch64 CentOS9 LTO", "cstratak-CentOS9-aarch64", LTONonDebugUnixBuild, UNSTABLE), - ("aarch64 CentOS9 LTO + PGO", "cstratak-CentOS9-aarch64", LTOPGONonDebugBuild, UNSTABLE), + ("aarch64 CentOS9 Refleaks", "cstratak-CentOS9-aarch64", UnixRefleakBuild, UNSTABLE, NO_TIER), + ("aarch64 CentOS9 LTO", "cstratak-CentOS9-aarch64", LTONonDebugUnixBuild, UNSTABLE, NO_TIER), + ("aarch64 CentOS9 LTO + PGO", "cstratak-CentOS9-aarch64", LTOPGONonDebugBuild, UNSTABLE, NO_TIER), # Linux other archs - ("s390x Fedora Rawhide", "edelsohn-fedora-rawhide-z", UnixBuild, UNSTABLE), - ("s390x Fedora Rawhide Refleaks", "edelsohn-fedora-rawhide-z", UnixRefleakBuild, UNSTABLE), - ("s390x Fedora Rawhide Clang", "edelsohn-fedora-rawhide-z", ClangUnixBuild, UNSTABLE), - ("s390x Fedora Rawhide Clang Installed", "edelsohn-fedora-rawhide-z", ClangUnixInstalledBuild, UNSTABLE), - ("s390x Fedora Rawhide LTO", "edelsohn-fedora-rawhide-z", LTONonDebugUnixBuild, UNSTABLE), - ("s390x Fedora Rawhide LTO + PGO", "edelsohn-fedora-rawhide-z", LTOPGONonDebugBuild, UNSTABLE), + ("s390x Fedora Rawhide", "edelsohn-fedora-rawhide-z", UnixBuild, UNSTABLE, NO_TIER), + ("s390x Fedora Rawhide Refleaks", "edelsohn-fedora-rawhide-z", UnixRefleakBuild, UNSTABLE, NO_TIER), + ("s390x Fedora Rawhide Clang", "edelsohn-fedora-rawhide-z", ClangUnixBuild, UNSTABLE, NO_TIER), + ("s390x Fedora Rawhide Clang Installed", "edelsohn-fedora-rawhide-z", ClangUnixInstalledBuild, UNSTABLE, NO_TIER), + ("s390x Fedora Rawhide LTO", "edelsohn-fedora-rawhide-z", LTONonDebugUnixBuild, UNSTABLE, NO_TIER), + ("s390x Fedora Rawhide LTO + PGO", "edelsohn-fedora-rawhide-z", LTOPGONonDebugBuild, UNSTABLE, NO_TIER), # macOS # Other Unix - ("AMD64 Cygwin64 on Windows 10", "bray-win10-cygwin-amd64", UnixBuild, UNSTABLE), - ("PPC64 AIX", "edelsohn-aix-ppc64", AIXBuild, UNSTABLE), - ("PPC64 AIX XLC", "edelsohn-aix-ppc64", AIXBuildWithXLC, UNSTABLE), - ("SPARCv9 Oracle Solaris 11.4", "kulikjak-solaris-sparcv9", UnixBuild, UNSTABLE), + ("AMD64 Cygwin64 on Windows 10", "bray-win10-cygwin-amd64", UnixBuild, UNSTABLE, NO_TIER), + ("PPC64 AIX", "edelsohn-aix-ppc64", AIXBuild, UNSTABLE, NO_TIER), + ("PPC64 AIX XLC", "edelsohn-aix-ppc64", AIXBuildWithXLC, UNSTABLE, NO_TIER), + ("SPARCv9 Oracle Solaris 11.4", "kulikjak-solaris-sparcv9", UnixBuild, UNSTABLE, NO_TIER), # Windows/arm64 - ("ARM64 Windows", "linaro-win-arm64", WindowsARM64Build, STABLE), - ("ARM64 Windows Non-Debug", "linaro-win-arm64", WindowsARM64ReleaseBuild, STABLE), - ("ARM64 Windows Azure", "linaro2-win-arm64", WindowsARM64Build, UNSTABLE), - ("ARM64 Windows Non-Debug Azure", "linaro2-win-arm64", WindowsARM64ReleaseBuild, UNSTABLE), + ("ARM64 Windows", "linaro-win-arm64", WindowsARM64Build, STABLE, TIER_3), + ("ARM64 Windows Non-Debug", "linaro-win-arm64", WindowsARM64ReleaseBuild, STABLE, NO_TIER), + ("ARM64 Windows Azure", "linaro2-win-arm64", WindowsARM64Build, UNSTABLE, NO_TIER), + ("ARM64 Windows Non-Debug Azure", "linaro2-win-arm64", WindowsARM64ReleaseBuild, UNSTABLE, NO_TIER), ] diff --git a/master/master.cfg b/master/master.cfg index ec784edb2..cc7f89007 100644 --- a/master/master.cfg +++ b/master/master.cfg @@ -200,7 +200,7 @@ mail_status_builders = [] for branch_num, (git_url, branchname, git_branch) in enumerate(git_branches): buildernames = [] dailybuildernames = [] - for name, worker, buildfactory, stability in BUILDERS: + for name, worker, buildfactory, stability, tier in BUILDERS: if any( pattern in name for pattern in ONLY_MASTER_BRANCH ) and branchname not in ("3.x", CUSTOM_BRANCH_NAME): @@ -248,6 +248,9 @@ for branch_num, (git_url, branchname, git_branch) in enumerate(git_branches): # disable GitHub notifications for unstable builders if stability == STABLE: github_status_builders.append(buildername) + tags = [branchname, stability,] + getattr(f, "tags", []) + if tier: + tags.append(tier) c["builders"].append( util.BuilderConfig( name=buildername, @@ -255,7 +258,7 @@ for branch_num, (git_url, branchname, git_branch) in enumerate(git_branches): builddir="%s.%s%s" % (branchname, worker, getattr(f, "buildersuffix", "")), factory=f, - tags=[branchname, stability,] + getattr(f, "tags", []), + tags=tags, locks=[cpulock.access("counting")], ) ) @@ -289,7 +292,7 @@ for branch_num, (git_url, branchname, git_branch) in enumerate(git_branches): pull_request_builders = [] -for name, worker, buildfactory, stability in BUILDERS: +for name, worker, buildfactory, stability, tier in BUILDERS: if stability != STABLE: continue @@ -318,6 +321,9 @@ for name, worker, buildfactory, stability in BUILDERS: **extra_factory_args.get(worker, {}), ) + tags = ["PullRequest", stability,] + getattr(f, "tags", []) + if tier: + tags.append(tier) c["builders"].append( util.BuilderConfig( name=buildername, @@ -325,7 +331,7 @@ for name, worker, buildfactory, stability in BUILDERS: builddir="%s.%s%s" % ("pull_request", worker, getattr(f, "buildersuffix", "")), factory=f, - tags=["PullRequest", stability,] + getattr(f, "tags", []), + tags=tags, locks=[cpulock.access("counting")], ) ) From dbee5378cde6b858feeeb500af2d0c86b7551038 Mon Sep 17 00:00:00 2001 From: Ethan Smith Date: Sat, 11 Jun 2022 03:14:11 -0700 Subject: [PATCH 06/15] Add environment variable to set settings path (#328) Co-authored-by: Zachary Ware Co-authored-by: Zachary Ware --- master/master.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/master/master.cfg b/master/master.cfg index cc7f89007..a64e72e63 100644 --- a/master/master.cfg +++ b/master/master.cfg @@ -80,6 +80,7 @@ def set_up_sentry(): log.addObserver(logToSentry) settings_path = os.path.join('/etc', 'buildbot', 'settings.yaml') +settings_path = os.environ.get('PYBUILDBOT_SETTINGS_PATH', settings_path) try: settings = Settings.from_file(settings_path) From 34888948b1b2fe24f60a853b4a4912fefb29eccc Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Mon, 13 Jun 2022 15:12:15 +0200 Subject: [PATCH 07/15] Split WASM build factories --- master/custom/builders.py | 10 ++- master/custom/factories.py | 145 +++++++++++++++++++++++-------------- master/custom/workers.py | 7 +- 3 files changed, 105 insertions(+), 57 deletions(-) diff --git a/master/custom/builders.py b/master/custom/builders.py index 2855bb748..ef84ebba1 100644 --- a/master/custom/builders.py +++ b/master/custom/builders.py @@ -36,6 +36,9 @@ MacOSArmWithBrewBuild, WindowsARM64Build, WindowsARM64ReleaseBuild, + Wasm32EmscriptenNodeBuild, + Wasm32EmscriptenBrowserBuild, + Wasm32WASIBuild, ) STABLE = "stable" @@ -49,7 +52,7 @@ def get_builders(settings): # Override with a default simple worker if we are using local workers if settings.use_local_worker: - return [("Test Builder", "local-worker", UnixBuild, STABLE)] + return [("Test Builder", "local-worker", UnixBuild, STABLE, NO_TIER)] return [ # -- Stable builders -- @@ -207,6 +210,11 @@ def get_builders(settings): ("ARM64 Windows Non-Debug", "linaro-win-arm64", WindowsARM64ReleaseBuild, STABLE, NO_TIER), ("ARM64 Windows Azure", "linaro2-win-arm64", WindowsARM64Build, UNSTABLE, NO_TIER), ("ARM64 Windows Non-Debug Azure", "linaro2-win-arm64", WindowsARM64ReleaseBuild, UNSTABLE, NO_TIER), + + # WebAssembly + ("wasm32-emscripten node (threaded)", "bcannon-wasm", Wasm32EmscriptenNodeBuild, UNSTABLE, NO_TIER), + ("wasm32-emscripten browser (dynamic linking)", "bcannon-wasm", Wasm32EmscriptenBrowserBuild, UNSTABLE, NO_TIER), + ("wasm32-wasi", "bcannon-wasm", Wasm32WASIBuild, UNSTABLE, NO_TIER), ] diff --git a/master/custom/factories.py b/master/custom/factories.py index 676f4ff68..2d676ffb8 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -9,8 +9,6 @@ from buildbot.plugins import util -import re - from .steps import ( Test, Clean, @@ -592,14 +590,7 @@ class WindowsARM64ReleaseBuild(WindowsARM64Build): ############################################################################## def extract_build_triple(_rc, stdout, _stderr): - lines = stdout.splitlines() - if re.match(r'GNU Make \d+\.\d+(\.\d+)?', lines[0]) is None: - return {} - triple_line = re.match(r'Built for (.*)', lines[1]) - if len(triple_line.groups()) != 1: - return {} - else: - return {'build_triple': triple_line.group(1)} + return {'build_triple': stdout.strip()} class UnixCrossBuild(UnixBuild): @@ -610,7 +601,8 @@ class UnixCrossBuild(UnixBuild): extra_configure_flags = [] host_configure_cmd = ["../../configure"] host = None - host_make_cmd = "make" + host_make_cmd = ["make"] + can_execute_python = True def setup(self, parallel, branch, test_with_PTY=False, **kwargs): assert self.host is not None, "Must set self.host on cross builds" @@ -623,8 +615,8 @@ def setup(self, parallel, branch, test_with_PTY=False, **kwargs): self.addStep( SetPropertyFromCommand( name="Gather build triple from worker", - description="Get the build triple from make", - command=["make", "-v"], + description="Get the build triple config.guess", + command=["./config.guess"], extract_fn=extract_build_triple, warnOnFailure=True, ) @@ -710,9 +702,9 @@ def setup(self, parallel, branch, test_with_PTY=False, **kwargs): ] if parallel: - compile = [self.host_make_cmd, parallel, self.makeTarget] + compile = self.host_make_cmd + [parallel, self.makeTarget] else: - compile = [self.host_make_cmd, self.makeTarget] + compile = self.host_make_cmd + [self.makeTarget] self.addStep( Compile( name="Compile host Python", @@ -721,55 +713,98 @@ def setup(self, parallel, branch, test_with_PTY=False, **kwargs): workdir=oot_host_path, ) ) - pyinfo_command = [ - "make", - "pythoninfo", - ] - self.addStep( - ShellCommand( - name="pythoninfo", - description="pythoninfo", - command=pyinfo_command, - warnOnFailure=True, - env=self.test_environ, - workdir=oot_host_path, + if self.can_execute_python: + self.addStep( + ShellCommand( + name="pythoninfo", + description="pythoninfo", + command=["make", "pythoninfo"], + warnOnFailure=True, + env=self.test_environ, + workdir=oot_host_path, + ) ) - ) - self.addStep( - Test( - command=test, - timeout=self.test_timeout, - usePTY=test_with_PTY, - env=self.test_environ, - workdir=oot_host_path, + self.addStep( + Test( + command=test, + timeout=self.test_timeout, + usePTY=test_with_PTY, + env=self.test_environ, + workdir=oot_host_path, + ) ) - ) - if branch not in ("3",) and "-R" not in self.testFlags: - filename = os.path.join(oot_host_path, "test-results.xml") - self.addStep(UploadTestResults(branch, filename=filename)) + if branch not in ("3",) and "-R" not in self.testFlags: + filename = os.path.join(oot_host_path, "test-results.xml") + self.addStep(UploadTestResults(branch, filename=filename)) self.addStep(Clean(workdir=oot_build_path)) self.addStep(Clean(workdir=oot_host_path)) -class WASMNodeBuild(UnixCrossBuild): - extra_configure_flags = [ - "--with-emscripten-target=node", - "--enable-wasm-dynamic-linking=no", - "--enable-wasm-pthreads", - ] +class Wasm32EmscriptenBuild(UnixCrossBuild): + """wasm32-emscripten builder + + * Emscripten SDK >= 3.1.12 must be installed + * ccache must be installed + * Emscripten PATHs must be pre-pended to PATH + * ``which node`` must be equal $EMSDK_NODE + """ + factory_tags = ["wasm", "emscripten"] + # can only run one process, os.getpid() is stubbed + testFlags = "-j1" + compile_environ = { "CONFIG_SITE": "../../Tools/wasm/config.site-wasm32-emscripten", + "EM_COMPILER_WRAPPER": "ccache", } + host = "wasm32-unknown-emscripten" host_configure_cmd = ["emconfigure", "../../configure"] + host_make_cmd = ["emmake", "make"] - def setup(self, parallel, branch, test_with_PTY=False, **kwargs): - self.addStep( - ShellCommand( - name="Install Emscripten ports of dependencies", - description="Install wasm dependencies", - command=["embuilder", "build", "zlib", "bzip2"], - warnOnFailure=True, - ) - ) - super().setup(parallel, branch, test_with_PTY, **kwargs) + +class Wasm32EmscriptenNodeBuild(Wasm32EmscriptenBuild): + extra_configure_flags = [ + "--with-emscripten-target=node", + "--disable-wasm-dynamic-linking", + "--enable-wasm-pthreads", + ] + + +class Wasm32EmscriptenBrowserBuild(Wasm32EmscriptenBuild): + extra_configure_flags = [ + "--with-emscripten-target=browser", + "--enable-wasm-dynamic-linking", + "--disable-wasm-pthreads", + ] + # browser builds do not accept argv from CLI + can_execute_python = False + + +class Wasm32WASIBuild(UnixCrossBuild): + """wasm32-wasi builder + + * WASI SDK >= 16 must be installed to default path /opt/wasi-sdk + * WASIX must be installed to /opt/wasix + * ccache must be installed + * wasmtime must be installed and on PATH + """ + factory_tags = ["wasm", "wasi"] + + # can only run one process, os.getpid() is stubbed + testFlags = "-j1" + + extra_configure_flags = [ + "--disable-ipv6", + ] + wasi_sdk = "/opt/wasi-sdk" + wasix = "/opt/wasix" + compile_environ = { + "CONFIG_SITE": "../../Tools/wasm/config.site-wasm32-wasi", + "CC": f"ccache {wasi_sdk}/bin/clang", + "LDSHARED": f"{wasi_sdk}/bin/wasm-ld", + "AR": f"{wasi_sdk}/bin/llvm-ar", + "CFLAGS": f"-isystem {wasix}/include", + "LDLAGS": f"-L{wasix}/lib -lwasix", + } + host = "wasm32-unknown-wasi" + host_configure_cmd = ["../../configure"] diff --git a/master/custom/workers.py b/master/custom/workers.py index aa3ff411f..77316cbb9 100644 --- a/master/custom/workers.py +++ b/master/custom/workers.py @@ -289,5 +289,10 @@ def get_workers(settings): tags=['windows', 'arm64'], parallel_tests=2, ), - + cpw( + name="bcannon-wasm", + tags=['wasm', 'emscripten', 'wasi'], + branches=['3.11', '3.x'], + parallel_tests=4, + ), ] From 8f0af91ac65e00850bb8b4143866dd6b3f72a7d6 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Mon, 13 Jun 2022 20:27:09 +0200 Subject: [PATCH 08/15] parallel testing now works --- master/custom/factories.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/master/custom/factories.py b/master/custom/factories.py index 2d676ffb8..fcdb2bb04 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -749,9 +749,6 @@ class Wasm32EmscriptenBuild(UnixCrossBuild): * ``which node`` must be equal $EMSDK_NODE """ factory_tags = ["wasm", "emscripten"] - # can only run one process, os.getpid() is stubbed - testFlags = "-j1" - compile_environ = { "CONFIG_SITE": "../../Tools/wasm/config.site-wasm32-emscripten", "EM_COMPILER_WRAPPER": "ccache", @@ -789,10 +786,6 @@ class Wasm32WASIBuild(UnixCrossBuild): * wasmtime must be installed and on PATH """ factory_tags = ["wasm", "wasi"] - - # can only run one process, os.getpid() is stubbed - testFlags = "-j1" - extra_configure_flags = [ "--disable-ipv6", ] From bebac25271c6df1f73c8e5efc3c9b0082f5f5a82 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 14 Jun 2022 00:32:18 +0200 Subject: [PATCH 09/15] use config.guess directly Co-authored-by: Ethan Smith --- master/custom/factories.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/master/custom/factories.py b/master/custom/factories.py index fcdb2bb04..53e9745e8 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -616,8 +616,8 @@ def setup(self, parallel, branch, test_with_PTY=False, **kwargs): SetPropertyFromCommand( name="Gather build triple from worker", description="Get the build triple config.guess", - command=["./config.guess"], - extract_fn=extract_build_triple, + command="./config.guess", + property="build_triple", warnOnFailure=True, ) ) From e6e71feadc6e006ec0f353518962fe5cbf12931f Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 14 Jun 2022 11:26:33 +0200 Subject: [PATCH 10/15] Fix pkg-config cross build, add suffix to create unique workers --- master/custom/factories.py | 29 +++++++++++++++++++++++++++-- master/master.cfg | 11 ++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/master/custom/factories.py b/master/custom/factories.py index 53e9745e8..50d3704f5 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -760,6 +760,7 @@ class Wasm32EmscriptenBuild(UnixCrossBuild): class Wasm32EmscriptenNodeBuild(Wasm32EmscriptenBuild): + buildersuffix = ".emscripten-node" extra_configure_flags = [ "--with-emscripten-target=node", "--disable-wasm-dynamic-linking", @@ -768,6 +769,7 @@ class Wasm32EmscriptenNodeBuild(Wasm32EmscriptenBuild): class Wasm32EmscriptenBrowserBuild(Wasm32EmscriptenBuild): + buildersuffix = ".emscripten-browser" extra_configure_flags = [ "--with-emscripten-target=browser", "--enable-wasm-dynamic-linking", @@ -785,19 +787,42 @@ class Wasm32WASIBuild(UnixCrossBuild): * ccache must be installed * wasmtime must be installed and on PATH """ + buildersuffix = ".wasi" factory_tags = ["wasm", "wasi"] extra_configure_flags = [ + # debug builds exhaust the limited call stack on WASI + "--without-pydebug" "--disable-ipv6", ] wasi_sdk = "/opt/wasi-sdk" + wasi_sysroot = f"{wasi_sdk}/share/wasi-sysroot" wasix = "/opt/wasix" compile_environ = { "CONFIG_SITE": "../../Tools/wasm/config.site-wasm32-wasi", + # use Clang from WASI-SDK "CC": f"ccache {wasi_sdk}/bin/clang", "LDSHARED": f"{wasi_sdk}/bin/wasm-ld", "AR": f"{wasi_sdk}/bin/llvm-ar", + # use WASIX library with POSIX stubs "CFLAGS": f"-isystem {wasix}/include", - "LDLAGS": f"-L{wasix}/lib -lwasix", + "LDFLAGS": f"-L{wasix}/lib -lwasix", + # WASI-SDK does not have a 'wasm32-unknown-wasi-pkg-config' script + # force pkg-config into cross-compiling mode + "PKG_CONFIG_PATH": "", + "PKG_CONFIG_SYSROOT_DIR": wasi_sysroot, + "PKG_CONFIG_LIBDIR": f"{wasi_sysroot}/lib/pkgconfig:{wasi_sysroot}/share/pkgconfig", } host = "wasm32-unknown-wasi" - host_configure_cmd = ["../../configure"] + + def setup(self, parallel, branch, test_with_PTY=False, **kwargs): + self.addStep( + ShellCommand( + name="Touch srcdir Modules/Setup.local", + description="Hack to work around wasmtime mapdir issue", + command=["touch", "Modules/Setup.local"], + haltOnFailure=True, + ) + ) + super().setup( + parallel, branch, test_with_PTY=test_with_PTY, **kwargs + ) diff --git a/master/master.cfg b/master/master.cfg index a64e72e63..da92f812c 100644 --- a/master/master.cfg +++ b/master/master.cfg @@ -236,6 +236,14 @@ for branch_num, (git_url, branchname, git_branch) in enumerate(git_branches): branch=branchname, **extra_factory_args.get(worker, {}), ) + tags = [branchname, stability,] + getattr(f, "tags", []) + if tier: + tags.append(tier) + + # Only 3.11+ for WebAssembly builds + if "wasm" in tags and branchname in {"3.8", "3.9", "3.10"}: + continue + if name in DAILYBUILDERS: dailybuildernames.append(buildername) else: @@ -249,9 +257,6 @@ for branch_num, (git_url, branchname, git_branch) in enumerate(git_branches): # disable GitHub notifications for unstable builders if stability == STABLE: github_status_builders.append(buildername) - tags = [branchname, stability,] + getattr(f, "tags", []) - if tier: - tags.append(tier) c["builders"].append( util.BuilderConfig( name=buildername, From 5bb2be7a924a273473714305243447d50442ad5e Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 14 Jun 2022 20:28:06 +0200 Subject: [PATCH 11/15] name clean targets --- master/custom/factories.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/master/custom/factories.py b/master/custom/factories.py index 50d3704f5..637cce543 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -736,8 +736,18 @@ def setup(self, parallel, branch, test_with_PTY=False, **kwargs): if branch not in ("3",) and "-R" not in self.testFlags: filename = os.path.join(oot_host_path, "test-results.xml") self.addStep(UploadTestResults(branch, filename=filename)) - self.addStep(Clean(workdir=oot_build_path)) - self.addStep(Clean(workdir=oot_host_path)) + self.addStep( + Clean( + name="Clean build Python", + workdir=oot_build_path, + ) + ) + self.addStep( + Clean( + name="Clean host Python", + workdir=oot_host_path, + ) + ) class Wasm32EmscriptenBuild(UnixCrossBuild): From fc9f403e24498710c498524ef43d766e094fb96c Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 14 Jun 2022 21:37:32 +0200 Subject: [PATCH 12/15] comma --- master/custom/factories.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/master/custom/factories.py b/master/custom/factories.py index 637cce543..050595432 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -801,7 +801,7 @@ class Wasm32WASIBuild(UnixCrossBuild): factory_tags = ["wasm", "wasi"] extra_configure_flags = [ # debug builds exhaust the limited call stack on WASI - "--without-pydebug" + "--without-pydebug", "--disable-ipv6", ] wasi_sdk = "/opt/wasi-sdk" From 5f64117defdf46fe1d6c98b8f181ad12b0509816 Mon Sep 17 00:00:00 2001 From: Ethan Smith Date: Wed, 15 Jun 2022 01:05:23 +0000 Subject: [PATCH 13/15] Remove unused function --- master/custom/factories.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/master/custom/factories.py b/master/custom/factories.py index 050595432..347066b6a 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -589,9 +589,6 @@ class WindowsARM64ReleaseBuild(WindowsARM64Build): ############################## WASM BUILDS ################################# ############################################################################## -def extract_build_triple(_rc, stdout, _stderr): - return {'build_triple': stdout.strip()} - class UnixCrossBuild(UnixBuild): configureFlags = [ From aab31757f3f28bffa88305f66e4f4fe25323165b Mon Sep 17 00:00:00 2001 From: Ethan Smith Date: Wed, 15 Jun 2022 10:42:47 +0000 Subject: [PATCH 14/15] Add comment about wasi lack of ipv6 support --- master/custom/factories.py | 1 + 1 file changed, 1 insertion(+) diff --git a/master/custom/factories.py b/master/custom/factories.py index 347066b6a..15d0b8e90 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -799,6 +799,7 @@ class Wasm32WASIBuild(UnixCrossBuild): extra_configure_flags = [ # debug builds exhaust the limited call stack on WASI "--without-pydebug", + # ipv6 is not supported on WASI "--disable-ipv6", ] wasi_sdk = "/opt/wasi-sdk" From 357c2e7b5f5dcffc9ee32f832cabd515716c1e21 Mon Sep 17 00:00:00 2001 From: Ethan Smith Date: Wed, 15 Jun 2022 10:43:06 +0000 Subject: [PATCH 15/15] Revert updating of requirements --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index c6c73c09f..c55855a35 100644 --- a/requirements.txt +++ b/requirements.txt @@ -36,14 +36,14 @@ pyOpenSSL==22.0.0 python-dateutil==2.8.2 PyYAML==6.0 requests==2.27.1 -sentry-sdk==1.5.10 +sentry-sdk==1.5.9 service-identity==21.1.0 six==1.16.0 SQLAlchemy==1.4.35 treq==22.2.0 Twisted==22.4.0 txaio==22.2.1 -typing_extensions==4.2.0 +typing_extensions==4.1.1 urllib3==1.26.9 Werkzeug==2.1.1 zipp==3.8.0