diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index ad9f7ff2..f4bbd8e7 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -15,7 +15,6 @@ jobs: fail-fast: false matrix: python-version: - - '3.9' - '3.13' steps: - uses: actions/checkout@v4 diff --git a/README.md b/README.md index 0f6c9a19..da5a88ea 100644 --- a/README.md +++ b/README.md @@ -45,14 +45,6 @@ psycopg2 also requires libpq-dev: Configurations from this repository are applied from the `master` branch on a `*/15` cron interval using the `update-master` target in `Makefile`. -Python 3.9 is installed manually using ``pyenv`` (which was also installed -manually). Commands to install Python 3.9: - - pyenv update - pyenv install 3.9.1 - pyenv global 3.8.1 3.9.1 - - ## Add a worker The list of workers is stored in `/etc/buildbot/settings.yaml` on the server. diff --git a/master/custom/builders.py b/master/custom/builders.py index 2ab8eb26..89df362e 100644 --- a/master/custom/builders.py +++ b/master/custom/builders.py @@ -10,7 +10,6 @@ UnixAsanDebugBuild, UnixBigmemBuild, UnixTraceRefsBuild, - UnixVintageParserBuild, UnixRefleakBuild, UnixNoGilBuild, UnixNoGilRefleakBuild, @@ -217,8 +216,6 @@ ("AMD64 Ubuntu", "skumaran-ubuntu-x86_64", UnixBuild), - ("AMD64 Arch Linux VintageParser", "pablogsal-arch-x86_64", UnixVintageParserBuild), - ("AMD64 RHEL8 FIPS No Builtin Hashes", "cstratak-RHEL8-fips-x86_64", RHEL8NoBuiltinHashesUnixBuild), ("AMD64 CentOS9", "cstratak-CentOS9-x86_64", CentOS9Build), diff --git a/master/custom/factories.py b/master/custom/factories.py index 9a3f9460..e832ac42 100644 --- a/master/custom/factories.py +++ b/master/custom/factories.py @@ -77,9 +77,9 @@ def setup(self, parallel, branch, test_with_PTY=False, **kwargs): # Adjust the timeout for this worker self.test_timeout *= kwargs.get("timeout_factor", 1) - # In 3.9 and 3.10, test_asyncio wasn't split out, and refleaks tests + # In 3.10, test_asyncio wasn't split out, and refleaks tests # need more time. - if branch in ("3.9", "3.10") and has_option("-R", self.testFlags): + if branch == "3.10" and has_option("-R", self.testFlags): self.test_timeout *= 2 if self.build_out_of_tree: @@ -159,11 +159,6 @@ def setup(self, parallel, branch, test_with_PTY=False, **kwargs): return super().setup(parallel, branch, test_with_PTY=test_with_PTY, **kwargs) -class UnixVintageParserBuild(UnixBuild): - buildersuffix = ".oldparser" # to get unique directory names on master - test_environ = {'PYTHONOLDPARSER': 'old'} - - class UnixRefleakBuild(UnixBuild): buildersuffix = ".refleak" testFlags = ["-R", "3:3", "-u-cpu"] @@ -308,17 +303,9 @@ class NonDebugUnixBuild(UnixBuild): class PGOUnixBuild(NonDebugUnixBuild): buildersuffix = ".pgo" - configureFlags = ["--enable-optimizations"] + configureFlags = ["--enable-optimizations", "--with-readline=edit"] factory_tags = ["pgo"] - def setup(self, parallel, branch, *args, **kwargs): - # Only Python >3.10 has --with-readline=edit - if branch != '3.9': - # Use libedit instead of libreadline on this buildbot for - # some libedit Linux compilation coverage. - self.configureFlags = self.configureFlags + ["--with-readline=edit"] - return super().setup(parallel, branch, *args, **kwargs) - class ClangUnixBuild(UnixBuild): buildersuffix = ".clang" diff --git a/master/custom/workers.py b/master/custom/workers.py index bf151fd6..8c7892ec 100644 --- a/master/custom/workers.py +++ b/master/custom/workers.py @@ -86,7 +86,7 @@ def get_workers(settings): name="cstratak-RHEL8-x86_64", tags=['linux', 'unix', 'rhel', 'amd64', 'x86-64'], parallel_tests=10, - branches=['3.9', '3.10', '3.11', '3.12'], + branches=['3.10', '3.11', '3.12'], ), cpw( name="cstratak-RHEL8-fips-x86_64", @@ -105,7 +105,7 @@ def get_workers(settings): tags=['linux', 'unix', 'rhel', 'amd64', 'x86-64', 'fips'], parallel_tests=6, # Only 3.12+ for FIPS builder - not_branches=["3.9", "3.10", "3.11"], + not_branches=["3.10", "3.11"], ), cpw( name="cstratak-fedora-rawhide-ppc64le", @@ -121,7 +121,7 @@ def get_workers(settings): name="cstratak-RHEL8-ppc64le", tags=['linux', 'unix', 'rhel', 'ppc64le'], parallel_tests=10, - branches=['3.9', '3.10', '3.11', '3.12'], + branches=['3.10', '3.11', '3.12'], ), cpw( name="cstratak-CentOS9-ppc64le", @@ -142,7 +142,7 @@ def get_workers(settings): name="cstratak-RHEL8-aarch64", tags=['linux', 'unix', 'rhel', 'arm', 'arm64', 'aarch64'], parallel_tests=40, - branches=['3.9', '3.10', '3.11', '3.12'], + branches=['3.10', '3.11', '3.12'], ), cpw( name="cstratak-CentOS9-aarch64", @@ -152,7 +152,7 @@ def get_workers(settings): cpw( name="diegorusso-aarch64-bigmem", tags=['linux', 'unix', 'ubuntu', 'arm', 'arm64', 'aarch64', 'bigmem'], - not_branches=['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'], + not_branches=['3.10', '3.11', '3.12', '3.13', '3.14'], parallel_tests=8, ), cpw( @@ -169,7 +169,7 @@ def get_workers(settings): name="cstratak-rhel8-s390x", tags=['linux', 'unix', 'rhel', 's390x'], parallel_tests=10, - branches=['3.9', '3.10', '3.11', '3.12'], + branches=['3.10', '3.11', '3.12'], ), cpw( name="cstratak-rhel9-s390x", @@ -193,7 +193,7 @@ def get_workers(settings): 'aarch64', 'arm'], parallel_tests=4, # Tests fail with latin1 encoding on 3.12, probably earlier - not_branches=['3.12', '3.11', '3.10', '3.9'] + not_branches=['3.12', '3.11', '3.10'] ), cpw( name="savannah-raspbian", @@ -227,7 +227,7 @@ def get_workers(settings): cpw( name="ware-alpine", tags=['linux', 'unix', 'alpine', 'docker', 'amd64', 'x86-64', 'musl'], - not_branches=['3.9', '3.10', '3.11', '3.12', '3.13'], + not_branches=['3.10', '3.11', '3.12', '3.13'], ), cpw( name="ware-freebsd", @@ -262,77 +262,77 @@ def get_workers(settings): cpw( name="bcannon-wasi", tags=['wasm', 'wasi'], - not_branches=['3.9', '3.10'], + not_branches=['3.10'], parallel_tests=2, parallel_builders=2, ), cpw( name="ambv-bb-win11", tags=['windows', 'win11', 'amd64', 'x86-64', 'bigmem'], - not_branches=['3.9', '3.10', '3.11', '3.12', '3.13'], + not_branches=['3.10', '3.11', '3.12', '3.13'], parallel_tests=4, ), cpw( name="itamaro-centos-aws", tags=['linux', 'unix', 'rhel', 'amd64', 'x86-64'], - not_branches=['3.9', '3.10', '3.11', '3.12'], + not_branches=['3.10', '3.11', '3.12'], parallel_tests=10, parallel_builders=2, ), cpw( name="itamaro-win64-srv-22-aws", tags=['windows', 'win-srv-22', 'amd64', 'x86-64'], - not_branches=['3.9', '3.10', '3.11', '3.12'], + not_branches=['3.10', '3.11', '3.12'], parallel_tests=10, parallel_builders=2, ), cpw( name="itamaro-macos-intel-aws", tags=['macOS', 'unix', 'amd64', 'x86-64'], - not_branches=['3.9', '3.10', '3.11', '3.12'], + not_branches=['3.10', '3.11', '3.12'], parallel_tests=10, ), cpw( name="itamaro-macos-arm64-aws", tags=['macOS', 'unix', 'arm', 'arm64'], - not_branches=['3.9', '3.10', '3.11', '3.12'], + not_branches=['3.10', '3.11', '3.12'], parallel_tests=10, ), cpw( name="kushaldas-wasi", tags=['wasm', 'wasi'], - not_branches=['3.9', '3.10'], + not_branches=['3.10'], parallel_tests=4, parallel_builders=2, ), cpw( name="onder-riscv64", tags=['linux', 'unix', 'ubuntu', 'riscv64'], - not_branches=['3.9', '3.10'], + not_branches=['3.10'], parallel_tests=4, ), cpw( name="rkm-arm64-ios-simulator", tags=['iOS'], - not_branches=['3.9', '3.10', '3.11', '3.12'], + not_branches=['3.10', '3.11', '3.12'], parallel_builders=1, # All builds use the same simulator ), cpw( name="rkm-emscripten", tags=['emscripten'], - not_branches=['3.9', '3.10', '3.11', '3.12', '3.13'], + not_branches=['3.10', '3.11', '3.12', '3.13'], parallel_builders=4, ), cpw( name="mhsmith-android-aarch64", tags=['android'], - not_branches=['3.9', '3.10', '3.11', '3.12'], + not_branches=['3.10', '3.11', '3.12'], parallel_builders=1, # All builds use the same emulator and app ID. ), cpw( name="mhsmith-android-x86_64", tags=['android'], - not_branches=['3.9', '3.10', '3.11', '3.12'], + not_branches=['3.10', '3.11', '3.12'], parallel_builders=1, # All builds use the same emulator and app ID. ), ] diff --git a/master/master.cfg b/master/master.cfg index 3890f252..6615b76a 100644 --- a/master/master.cfg +++ b/master/master.cfg @@ -138,7 +138,6 @@ git_branches = [ (git_url, "3.12", "3.12"), (git_url, "3.11", "3.11"), (git_url, "3.10", "3.10"), - (git_url, "3.9", "3.9"), ] # common Git() and GitHub() keyword arguments @@ -257,9 +256,6 @@ for branch_num, (git_url, branchname, git_branch) in enumerate(git_branches): # Workers known to be broken on older branches: let's focus on # supporting these platforms in the main branch. continue - # Only 3.9 has two parsers mode from Python 3.9 and higher - if "VintageParser" in name and branchname != "3.9": - continue worker = WORKERS_BY_NAME[worker_name] if worker.not_branches and branchname in worker.not_branches: @@ -282,7 +278,7 @@ for branch_num, (git_url, branchname, git_branch) in enumerate(git_branches): # Only 3.11+ for WebAssembly builds if "wasm" in tags: # WASM wasn't a supported platform until 3.11. - if branchname in {"3.9", "3.10"}: + if branchname in {"3.10"}: continue # Tier 3 support is 3.11 & 3.12. elif "nondebug" in tags and branchname not in {"3.11", "3.12"}: @@ -292,7 +288,7 @@ for branch_num, (git_url, branchname, git_branch) in enumerate(git_branches): continue # Only 3.13+ for NoGIL builds - if 'nogil' in tags and branchname in {"3.9", "3.10", "3.11", "3.12"}: + if 'nogil' in tags and branchname in {"3.10", "3.11", "3.12"}: continue if 'refleak' in tags: diff --git a/requirements-3.9.txt b/requirements-3.9.txt deleted file mode 100644 index dd84e9dc..00000000 --- a/requirements-3.9.txt +++ /dev/null @@ -1,57 +0,0 @@ -alembic==1.16.5 -attrs==25.3.0 -autobahn==24.4.2 -Automat==25.4.16 -blinker==1.9.0 -buildbot==4.3.0 -buildbot-console-view==4.3.0 -buildbot-grid-view==4.3.0 -buildbot-waterfall-view==4.3.0 -buildbot-worker==4.3.0 -buildbot-wsgi-dashboards==4.3.0 -buildbot-www==4.3.0 -certifi==2025.8.3 -cffi==2.0.0 -charset-normalizer==3.4.3 -click==8.1.8 -constantly==23.10.4 -croniter==6.0.0 -cryptography==45.0.7 -Flask==3.1.2 -greenlet==3.2.4 -humanize==4.13.0 -hyperlink==21.0.0 -idna==3.10 -importlib_metadata==8.7.0 -incremental==24.7.2 -itsdangerous==2.2.0 -Jinja2==3.1.6 -Mako==1.3.10 -MarkupSafe==3.0.2 -msgpack==1.1.1 -multipart==1.3.0 -packaging==25.0 -psycopg2==2.9.10 -pyasn1==0.6.1 -pyasn1_modules==0.4.2 -pycparser==2.23 -PyJWT==2.10.1 -pyOpenSSL==25.1.0 -python-dateutil==2.9.0.post0 -pytz==2025.2 -PyYAML==6.0.2 -requests==2.32.5 -sentry-sdk==2.37.1 -service-identity==24.2.0 -six==1.17.0 -SQLAlchemy==2.0.43 -tomli==2.2.1 -treq==25.5.0 -Twisted==25.5.0 -txaio==23.6.1 -typing_extensions==4.15.0 -unidiff==0.7.5 -urllib3==2.5.0 -Werkzeug==3.1.3 -zipp==3.23.0 -zope.interface==7.2