From cc73b16bf46c2461e4680a1b924a17c226a543dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Serhat=20And=C4=B1=C3=A7?= Date: Tue, 8 Sep 2026 19:15:44 +0300 Subject: [PATCH 1/3] Retire Debian Bullseye from packaging tools Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../citus-package-all-platforms-test.yml | 1 - .github/workflows/package-tests.yml | 1 - packaging_automation/README.md | 21 +++++ packaging_automation/citus_package.py | 1 - packaging_automation/common_tool_methods.py | 1 - packaging_automation/test_citus_package.py | 4 - .../tests/test_citus_package.py | 5 +- .../tests/test_citus_package_utils.py | 60 +++++++++++++++ .../upload_to_package_cloud.py | 1 - test-images/debian-bullseye/Dockerfile | 77 ------------------- 10 files changed, 83 insertions(+), 89 deletions(-) delete mode 100644 test-images/debian-bullseye/Dockerfile diff --git a/.github/workflows/citus-package-all-platforms-test.yml b/.github/workflows/citus-package-all-platforms-test.yml index 8ce8811d..14e3cbbb 100644 --- a/.github/workflows/citus-package-all-platforms-test.yml +++ b/.github/workflows/citus-package-all-platforms-test.yml @@ -25,7 +25,6 @@ jobs: - el/8 - ol/9 - ol/8 - - debian/bullseye - debian/bookworm - debian/trixie - ubuntu/jammy diff --git a/.github/workflows/package-tests.yml b/.github/workflows/package-tests.yml index 818c0d60..3b90e03a 100644 --- a/.github/workflows/package-tests.yml +++ b/.github/workflows/package-tests.yml @@ -51,7 +51,6 @@ jobs: platform: - el/9 - ol/9 - - debian/bullseye - debian/bookworm - ubuntu/jammy - ubuntu/noble diff --git a/packaging_automation/README.md b/packaging_automation/README.md index 40e29df2..8cb5183a 100644 --- a/packaging_automation/README.md +++ b/packaging_automation/README.md @@ -40,6 +40,27 @@ python -m pip install -r packaging_automation/requirements.txt If all the steps above completed successfully , you are ready for script execution +## Debian Bullseye retirement + +Debian 11 (Bullseye) LTS ended on 2026-08-31. It is no longer eligible for new +package builds, installation tests, or uploads. Bookworm and Trixie remain +supported Debian targets. This retirement does not change other distributions. + +Coordinate rollout across repositories: + +1. Remove Bullseye from active caller matrices and host selection in + `citusdata/packaging` (`develop` and `all-citus`), Citus CI, and test automation; + update installer eligibility on packaging's `gh-pages` branch. Do this before + those callers adopt tools that reject Bullseye. Existing tools pins may still + recognize Bullseye, so updating tools alone does not retire those callers. +2. Release these tools changes through the normal release process, then update + shared tools pins to that published release. Do not bump pins to an unpublished + version. + +Keep already-published packages and historical data. Package inspection and +deletion helpers accept distro names independently of the upload allowlist, so +they can still operate on legacy Bullseye packages without re-enabling uploads. + # **Prepare Release ** prepare-release.py script performs the pre-packaging configurations in citus/citus-enterprise projects. diff --git a/packaging_automation/citus_package.py b/packaging_automation/citus_package.py index d19d4407..5073a23c 100644 --- a/packaging_automation/citus_package.py +++ b/packaging_automation/citus_package.py @@ -54,7 +54,6 @@ "centos,8": "el/8", "centos,7": "el/7", "debian,bookworm": "debian/bookworm", - "debian,bullseye": "debian/bullseye", "debian,stretch": "debian/stretch", "debian,trixie": "debian/trixie", "oraclelinux,8": "ol/8", diff --git a/packaging_automation/common_tool_methods.py b/packaging_automation/common_tool_methods.py index df3a599b..98a5ec1f 100644 --- a/packaging_automation/common_tool_methods.py +++ b/packaging_automation/common_tool_methods.py @@ -39,7 +39,6 @@ supported_platforms = { "debian": [ "bookworm", - "bullseye", "buster", "stretch", "jessie", diff --git a/packaging_automation/test_citus_package.py b/packaging_automation/test_citus_package.py index df51f352..89df16a4 100644 --- a/packaging_automation/test_citus_package.py +++ b/packaging_automation/test_citus_package.py @@ -37,10 +37,6 @@ class TestPlatform(Enum): ol_9 = {"name": "ol/9", "docker_image_name": "ol-9"} debian_stretch = {"name": "debian/stretch", "docker_image_name": "debian-stretch"} debian_buster = {"name": "debian/buster", "docker_image_name": "debian-buster"} - debian_bullseye = { - "name": "debian/bullseye", - "docker_image_name": "debian-bullseye", - } debian_bookworm = { "name": "debian/bookworm", "docker_image_name": "debian-bookworm", diff --git a/packaging_automation/tests/test_citus_package.py b/packaging_automation/tests/test_citus_package.py index 179c7917..45c08a4a 100644 --- a/packaging_automation/tests/test_citus_package.py +++ b/packaging_automation/tests/test_citus_package.py @@ -53,7 +53,6 @@ "el/9": 1, "ol/9": 1, "debian/stretch": 2, - "debian/bullseye": 2, "debian/bookworm": 2, "debian/trixie": 2, "ubuntu/bionic": 2, @@ -237,10 +236,10 @@ def test_get_postgres_versions_el_7(): assert len(nightly_versions) == 2 and nightly_versions == ["14", "15"] -def test_get_postgres_versions_debain_bullseye(): +def test_get_postgres_versions_debian_bookworm(): release_versions, nightly_versions = get_postgres_versions( input_files_dir=f"{os.getcwd()}/packaging_automation/tests/files/get_postgres_versions_tests", - platform="debian/bullseye", + platform="debian/bookworm", ) # pg 15 is excluded for all releases with pg_exclude file assert len(release_versions) == 2 and release_versions == ["13", "14"] diff --git a/packaging_automation/tests/test_citus_package_utils.py b/packaging_automation/tests/test_citus_package_utils.py index 45fba637..8b93a58a 100644 --- a/packaging_automation/tests/test_citus_package_utils.py +++ b/packaging_automation/tests/test_citus_package_utils.py @@ -1,12 +1,16 @@ import os import subprocess +from unittest.mock import patch import pathlib2 import pytest from .test_utils import generate_new_gpg_key +from .. import upload_to_package_cloud from ..citus_package import ( decode_os_and_release, + get_build_platform, + get_docker_image_name, is_docker_running, get_signing_credentials, get_postgres_versions, @@ -28,6 +32,11 @@ get_private_key_by_fingerprint_with_passphrase, verify_rpm_signature_in_dir, transform_key_into_base64_str, + platform_names, +) +from ..test_citus_package import ( + TestPlatform as PackageTestPlatform, + get_test_platform_for_os_release, ) TEST_BASE_PATH = os.getenv("BASE_PATH", default=pathlib2.Path(__file__).parents[2]) @@ -72,6 +81,57 @@ def test_decode_os_and_release(): decode_os_and_release("debian/anders") +def test_bullseye_is_not_an_active_platform(): + assert "debian/bullseye" not in platform_names() + with pytest.raises(ValueError, match="bullseye is not among supported releases"): + decode_os_and_release("debian/bullseye") + with pytest.raises(ValueError, match="bullseye is not among supported releases"): + get_docker_image_name("debian/bullseye") + with pytest.raises(KeyError): + get_build_platform(None, "debian,bullseye") + assert ( + get_test_platform_for_os_release("debian/bullseye") + == PackageTestPlatform.undefined + ) + assert "debian/bullseye" not in upload_to_package_cloud.supported_distros + + +@pytest.mark.parametrize("release", ["bookworm", "trixie"]) +def test_supported_debian_platforms(release): + platform = f"debian/{release}" + assert platform in platform_names() + assert decode_os_and_release(platform) == ("debian", release) + assert get_build_platform(None, f"debian,{release}") == platform + assert get_docker_image_name(platform) == f"debian-{release}" + test_platform = get_test_platform_for_os_release(platform) + assert test_platform.value["docker_image_name"] == f"debian-{release}" + assert platform in upload_to_package_cloud.supported_distros + + +def test_legacy_bullseye_package_operations(): + with patch.object(upload_to_package_cloud.requests, "get") as get: + get.return_value.ok = True + assert upload_to_package_cloud.package_exists( + "test-token", "citus-bot", "sample", "old.deb", "debian/bullseye" + ) + assert get.call_args.args[0] == ( + "https://packagecloud.io/api/v1/repos/citus-bot/sample/search?" + "q=old.deb&filter=all&dist=debian%2Fbullseye" + ) + with patch.object(upload_to_package_cloud.requests, "delete") as delete: + delete.return_value.ok = True + delete.return_value.content = b"deleted" + result = upload_to_package_cloud.delete_package_from_package_cloud( + "test-token", "citus-bot", "sample", "debian", "bullseye", "old.deb" + ) + assert result.success_status + delete.assert_called_once_with( + "https://test-token:@packagecloud.io/api/v1/repos/citus-bot/sample/" + "debian/bullseye/old.deb", + timeout=60, + ) + + def test_is_docker_running(): assert is_docker_running() diff --git a/packaging_automation/upload_to_package_cloud.py b/packaging_automation/upload_to_package_cloud.py index 2119aa15..39759ca5 100644 --- a/packaging_automation/upload_to_package_cloud.py +++ b/packaging_automation/upload_to_package_cloud.py @@ -18,7 +18,6 @@ "ol/9": 244, "debian/stretch": 149, "debian/buster": 150, - "debian/bullseye": 207, "debian/bookworm": 215, "debian/trixie": 221, "ubuntu/bionic": 190, diff --git a/test-images/debian-bullseye/Dockerfile b/test-images/debian-bullseye/Dockerfile deleted file mode 100644 index 448df625..00000000 --- a/test-images/debian-bullseye/Dockerfile +++ /dev/null @@ -1,77 +0,0 @@ -FROM debian:bullseye -ARG CITUS_VERSION -# FOrmat should be XY and should not include dots e.g for 10.2.1=>102 -ARG CITUS_MAJOR_VERSION -ARG PG_MAJOR -ARG FANCY=1 -ARG HLL_VERSION=2.21.citus-1 -ARG TOPN_VERSION=2.7.1.citus-1 - -ENV CITUS_VERSION ${CITUS_VERSION} - -ENV PG_MAJOR ${PG_MAJOR} - -ENV TZ=Europe/Istanbul -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - -# install prequisities -RUN apt-get update \ - && apt-get install -y lsb-release \ - apt-utils \ - vim \ - wget \ - curl \ - gnupg2 \ - software-properties-common \ - libcurl4-openssl-dev \ - libssl-dev - - -# install Citus -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - && curl -s https://install.citusdata.com/community/deb.sh | bash -RUN apt-get install -y postgresql-${PG_MAJOR}-citus-${CITUS_MAJOR_VERSION}=${CITUS_VERSION}.citus-${FANCY} \ - postgresql-$PG_MAJOR-hll=${HLL_VERSION} \ - postgresql-$PG_MAJOR-topn=${TOPN_VERSION} \ - && rm -rf /var/lib/apt/lists/*12 - - - -ARG POSTGRES_HOME=/var/lib/postgresql/ -ENV PATH=${PATH}:/usr/lib/postgresql/${PG_MAJOR}/bin:${POSTGRES_HOME} - -WORKDIR ${POSTGRES_HOME} - -RUN mkdir citus && chown postgres citus - -USER postgres -RUN cd ~ && initdb -D citus && echo "shared_preload_libraries = 'citus'" >> citus/postgresql.conf - -USER root -# Install python 3.8 and its dependencies -RUN apt-get install -y build-essential \ - libcurl4-openssl-dev \ - libssl-dev \ - zlib1g-dev \ - curl \ - libffi-dev \ - gnupg2 && \ - curl https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz --output Python-3.8.12.tgz &&\ - tar xvf Python-3.8.12.tgz &&\ - cd Python-3.8.*/ && \ - ./configure --enable-optimizations && \ - make altinstall && \ - python3.8 -m pip install pip-tools - -COPY scripts/* ./ - -RUN pip-compile && python3.8 -m pip install -r requirements.txt - -USER postgres - -WORKDIR ${POSTGRES_HOME} - -CMD ["test_internal.sh"] From 194ac38dc8a2b40c452ecd2d8caf8d10e9b7c9e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Serhat=20And=C4=B1=C3=A7?= Date: Tue, 8 Sep 2026 19:41:40 +0300 Subject: [PATCH 2/3] Drop retirement-specific platform tests Follow the existing distro-retirement pattern without new registry or legacy-package assertions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../tests/test_citus_package_utils.py | 60 ------------------- 1 file changed, 60 deletions(-) diff --git a/packaging_automation/tests/test_citus_package_utils.py b/packaging_automation/tests/test_citus_package_utils.py index 8b93a58a..45fba637 100644 --- a/packaging_automation/tests/test_citus_package_utils.py +++ b/packaging_automation/tests/test_citus_package_utils.py @@ -1,16 +1,12 @@ import os import subprocess -from unittest.mock import patch import pathlib2 import pytest from .test_utils import generate_new_gpg_key -from .. import upload_to_package_cloud from ..citus_package import ( decode_os_and_release, - get_build_platform, - get_docker_image_name, is_docker_running, get_signing_credentials, get_postgres_versions, @@ -32,11 +28,6 @@ get_private_key_by_fingerprint_with_passphrase, verify_rpm_signature_in_dir, transform_key_into_base64_str, - platform_names, -) -from ..test_citus_package import ( - TestPlatform as PackageTestPlatform, - get_test_platform_for_os_release, ) TEST_BASE_PATH = os.getenv("BASE_PATH", default=pathlib2.Path(__file__).parents[2]) @@ -81,57 +72,6 @@ def test_decode_os_and_release(): decode_os_and_release("debian/anders") -def test_bullseye_is_not_an_active_platform(): - assert "debian/bullseye" not in platform_names() - with pytest.raises(ValueError, match="bullseye is not among supported releases"): - decode_os_and_release("debian/bullseye") - with pytest.raises(ValueError, match="bullseye is not among supported releases"): - get_docker_image_name("debian/bullseye") - with pytest.raises(KeyError): - get_build_platform(None, "debian,bullseye") - assert ( - get_test_platform_for_os_release("debian/bullseye") - == PackageTestPlatform.undefined - ) - assert "debian/bullseye" not in upload_to_package_cloud.supported_distros - - -@pytest.mark.parametrize("release", ["bookworm", "trixie"]) -def test_supported_debian_platforms(release): - platform = f"debian/{release}" - assert platform in platform_names() - assert decode_os_and_release(platform) == ("debian", release) - assert get_build_platform(None, f"debian,{release}") == platform - assert get_docker_image_name(platform) == f"debian-{release}" - test_platform = get_test_platform_for_os_release(platform) - assert test_platform.value["docker_image_name"] == f"debian-{release}" - assert platform in upload_to_package_cloud.supported_distros - - -def test_legacy_bullseye_package_operations(): - with patch.object(upload_to_package_cloud.requests, "get") as get: - get.return_value.ok = True - assert upload_to_package_cloud.package_exists( - "test-token", "citus-bot", "sample", "old.deb", "debian/bullseye" - ) - assert get.call_args.args[0] == ( - "https://packagecloud.io/api/v1/repos/citus-bot/sample/search?" - "q=old.deb&filter=all&dist=debian%2Fbullseye" - ) - with patch.object(upload_to_package_cloud.requests, "delete") as delete: - delete.return_value.ok = True - delete.return_value.content = b"deleted" - result = upload_to_package_cloud.delete_package_from_package_cloud( - "test-token", "citus-bot", "sample", "debian", "bullseye", "old.deb" - ) - assert result.success_status - delete.assert_called_once_with( - "https://test-token:@packagecloud.io/api/v1/repos/citus-bot/sample/" - "debian/bullseye/old.deb", - timeout=60, - ) - - def test_is_docker_running(): assert is_docker_running() From 558421aa3ca9b2a8e12e3706a852809f886d2bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Serhat=20And=C4=B1=C3=A7?= Date: Tue, 8 Sep 2026 19:46:14 +0300 Subject: [PATCH 3/3] Keep the Bullseye support notice concise Leave coordinated rollout instructions in the PR descriptions rather than permanent documentation. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- packaging_automation/README.md | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/packaging_automation/README.md b/packaging_automation/README.md index 8cb5183a..64a9a899 100644 --- a/packaging_automation/README.md +++ b/packaging_automation/README.md @@ -40,26 +40,8 @@ python -m pip install -r packaging_automation/requirements.txt If all the steps above completed successfully , you are ready for script execution -## Debian Bullseye retirement - -Debian 11 (Bullseye) LTS ended on 2026-08-31. It is no longer eligible for new -package builds, installation tests, or uploads. Bookworm and Trixie remain -supported Debian targets. This retirement does not change other distributions. - -Coordinate rollout across repositories: - -1. Remove Bullseye from active caller matrices and host selection in - `citusdata/packaging` (`develop` and `all-citus`), Citus CI, and test automation; - update installer eligibility on packaging's `gh-pages` branch. Do this before - those callers adopt tools that reject Bullseye. Existing tools pins may still - recognize Bullseye, so updating tools alone does not retire those callers. -2. Release these tools changes through the normal release process, then update - shared tools pins to that published release. Do not bump pins to an unpublished - version. - -Keep already-published packages and historical data. Package inspection and -deletion helpers accept distro names independently of the upload allowlist, so -they can still operate on legacy Bullseye packages without re-enabling uploads. +Debian 11 (Bullseye) is no longer supported after Debian LTS ended on 2026-08-31. +Use Bookworm or Trixie instead. Already-published packages remain available. # **Prepare Release ** @@ -265,4 +247,3 @@ Script executes docker build on given image type and publishes the docker image --exec_path "$(pwd)" --tag_name ${{ github.event.inputs.tag_name }} \ --manual_trigger_type ${{ github.event.inputs.trigger_type }} ``` -