From e41e2490cfa6121bf53f69507f5de8909caff59f Mon Sep 17 00:00:00 2001 From: Guanzhou Song Date: Tue, 24 Mar 2026 13:52:19 -0400 Subject: [PATCH 1/2] feat: publish deb13 apt packages Add deb13 support to the Pages package publishing flow so Debian 13 release assets are included in the generated APT repository metadata and exposed through the package finder and install docs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/scripts/download_packages.sh | 40 ++++++++++++++++++-- .github/workflows/continuous-deployment.yml | 42 +++++++++++++++++++++ PACKAGE-INSTALL.md | 19 ++++++++-- app/lib/packageInstall.ts | 5 ++- app/packages/page.tsx | 9 ++--- app/services/articleService.ts | 2 +- 6 files changed, 103 insertions(+), 14 deletions(-) diff --git a/.github/scripts/download_packages.sh b/.github/scripts/download_packages.sh index 478bf47..10cfe33 100755 --- a/.github/scripts/download_packages.sh +++ b/.github/scripts/download_packages.sh @@ -27,7 +27,8 @@ GOT_RPM=0 DEB_POOL="out/deb/pool/${COMPONENTS}" # Debian/Ubuntu pools DEB_POOL_DEB11="out/deb/pool/deb11" -DEB_POOL_DEB12="out/deb/pool/deb12" +DEB_POOL_DEB12="out/deb/pool/deb12" +DEB_POOL_DEB13="out/deb/pool/deb13" DEB_POOL_UBUNTU22="out/deb/pool/ubuntu22" DEB_POOL_UBUNTU24="out/deb/pool/ubuntu24" # RPM pools @@ -39,12 +40,14 @@ DEB_DISTS="dists/${SUITE}" DEB_DISTS_COMPONENTS_AMD64="${DEB_DISTS}/${COMPONENTS}/binary-amd64" DEB_DISTS_DEB11_AMD64="${DEB_DISTS}/deb11/binary-amd64" DEB_DISTS_DEB12_AMD64="${DEB_DISTS}/deb12/binary-amd64" +DEB_DISTS_DEB13_AMD64="${DEB_DISTS}/deb13/binary-amd64" DEB_DISTS_UBUNTU22_AMD64="${DEB_DISTS}/ubuntu22/binary-amd64" DEB_DISTS_UBUNTU24_AMD64="${DEB_DISTS}/ubuntu24/binary-amd64" # ARM64 directories DEB_DISTS_COMPONENTS_ARM64="${DEB_DISTS}/${COMPONENTS}/binary-arm64" DEB_DISTS_DEB11_ARM64="${DEB_DISTS}/deb11/binary-arm64" DEB_DISTS_DEB12_ARM64="${DEB_DISTS}/deb12/binary-arm64" +DEB_DISTS_DEB13_ARM64="${DEB_DISTS}/deb13/binary-arm64" DEB_DISTS_UBUNTU22_ARM64="${DEB_DISTS}/ubuntu22/binary-arm64" DEB_DISTS_UBUNTU24_ARM64="${DEB_DISTS}/ubuntu24/binary-arm64" GPG_TTY="" @@ -54,7 +57,7 @@ generate_hashes() { HASH_TYPE="$1" HASH_COMMAND="$2" echo "${HASH_TYPE}:" - for component in ${COMPONENTS} deb11 deb12 ubuntu22 ubuntu24; do + for component in ${COMPONENTS} deb11 deb12 deb13 ubuntu22 ubuntu24; do if [ -d "$component" ]; then find "$component" -type f | while read -r file do @@ -116,6 +119,12 @@ for asset in data.get('assets', []): clean_name=$(echo "$filename" | sed 's/^deb12-//') cp "out/packages/$filename" "$DEB_POOL_DEB12/$clean_name" sign_deb_package "$DEB_POOL_DEB12/$clean_name" + elif [[ "$filename" =~ ^deb13-postgresql-[0-9]+-documentdb.*\.deb$ ]]; then + GOT_DEB=1 + mkdir -p "$DEB_POOL_DEB13" + clean_name=$(echo "$filename" | sed 's/^deb13-//') + cp "out/packages/$filename" "$DEB_POOL_DEB13/$clean_name" + sign_deb_package "$DEB_POOL_DEB13/$clean_name" elif [[ "$filename" =~ ^ubuntu22\.04-postgresql-[0-9]+-documentdb.*\.deb$ ]]; then GOT_DEB=1 mkdir -p "$DEB_POOL_UBUNTU22" @@ -209,6 +218,13 @@ if [ "$GOT_DEB" = "1" ]; then dpkg-scanpackages --arch arm64 pool/deb12/ > "${DEB_DISTS_DEB12_ARM64}/Packages" gzip -k -f "${DEB_DISTS_DEB12_AMD64}/Packages" "${DEB_DISTS_DEB12_ARM64}/Packages" fi + + if [ -d "pool/deb13" ] && [ "$(ls -A pool/deb13/*.deb 2>/dev/null)" ]; then + mkdir -p "${DEB_DISTS_DEB13_AMD64}" "${DEB_DISTS_DEB13_ARM64}" + dpkg-scanpackages --arch amd64 pool/deb13/ > "${DEB_DISTS_DEB13_AMD64}/Packages" + dpkg-scanpackages --arch arm64 pool/deb13/ > "${DEB_DISTS_DEB13_ARM64}/Packages" + gzip -k -f "${DEB_DISTS_DEB13_AMD64}/Packages" "${DEB_DISTS_DEB13_ARM64}/Packages" + fi if [ -d "pool/ubuntu22" ] && [ "$(ls -A pool/ubuntu22/*.deb 2>/dev/null)" ]; then mkdir -p "${DEB_DISTS_UBUNTU22_AMD64}" "${DEB_DISTS_UBUNTU22_ARM64}" @@ -253,6 +269,21 @@ if [ "$GOT_DEB" = "1" ]; then dpkg-scanpackages --arch arm64 pool/deb12/ > "${DEB_DISTS_DEB12_ARM64}/Packages" gzip -k -f "${DEB_DISTS_DEB12_ARM64}/Packages" fi + + # Create deb13 component (Debian 13 Trixie) + if [ -d "pool/deb13" ] && [ "$(ls -A pool/deb13/*.deb 2>/dev/null)" ]; then + # AMD64 packages + mkdir -p "${DEB_DISTS_DEB13_AMD64}" + echo "Scanning Debian 13 AMD64 packages for deb13 component" + dpkg-scanpackages --arch amd64 pool/deb13/ > "${DEB_DISTS_DEB13_AMD64}/Packages" + gzip -k -f "${DEB_DISTS_DEB13_AMD64}/Packages" + + # ARM64 packages + mkdir -p "${DEB_DISTS_DEB13_ARM64}" + echo "Scanning Debian 13 ARM64 packages for deb13 component" + dpkg-scanpackages --arch arm64 pool/deb13/ > "${DEB_DISTS_DEB13_ARM64}/Packages" + gzip -k -f "${DEB_DISTS_DEB13_ARM64}/Packages" + fi # Create ubuntu22 component (Ubuntu 22.04 Jammy) if [ -d "pool/ubuntu22" ] && [ "$(ls -A pool/ubuntu22/*.deb 2>/dev/null)" ]; then @@ -292,14 +323,15 @@ if [ "$GOT_DEB" = "1" ]; then [ -d "${COMPONENTS}/binary-amd64" ] && AVAILABLE_COMPONENTS="${AVAILABLE_COMPONENTS} ${COMPONENTS}" [ -d "deb11/binary-amd64" ] && AVAILABLE_COMPONENTS="${AVAILABLE_COMPONENTS} deb11" [ -d "deb12/binary-amd64" ] && AVAILABLE_COMPONENTS="${AVAILABLE_COMPONENTS} deb12" + [ -d "deb13/binary-amd64" ] && AVAILABLE_COMPONENTS="${AVAILABLE_COMPONENTS} deb13" [ -d "ubuntu22/binary-amd64" ] && AVAILABLE_COMPONENTS="${AVAILABLE_COMPONENTS} ubuntu22" [ -d "ubuntu24/binary-amd64" ] && AVAILABLE_COMPONENTS="${AVAILABLE_COMPONENTS} ubuntu24" AVAILABLE_COMPONENTS=$(echo $AVAILABLE_COMPONENTS | sed 's/^ *//') # Determine available architectures AVAILABLE_ARCHITECTURES="" - [ -d "${COMPONENTS}/binary-amd64" ] || [ -d "deb11/binary-amd64" ] || [ -d "deb12/binary-amd64" ] || [ -d "ubuntu22/binary-amd64" ] || [ -d "ubuntu24/binary-amd64" ] && AVAILABLE_ARCHITECTURES="${AVAILABLE_ARCHITECTURES} amd64" - [ -d "${COMPONENTS}/binary-arm64" ] || [ -d "deb11/binary-arm64" ] || [ -d "deb12/binary-arm64" ] || [ -d "ubuntu22/binary-arm64" ] || [ -d "ubuntu24/binary-arm64" ] && AVAILABLE_ARCHITECTURES="${AVAILABLE_ARCHITECTURES} arm64" + [ -d "${COMPONENTS}/binary-amd64" ] || [ -d "deb11/binary-amd64" ] || [ -d "deb12/binary-amd64" ] || [ -d "deb13/binary-amd64" ] || [ -d "ubuntu22/binary-amd64" ] || [ -d "ubuntu24/binary-amd64" ] && AVAILABLE_ARCHITECTURES="${AVAILABLE_ARCHITECTURES} amd64" + [ -d "${COMPONENTS}/binary-arm64" ] || [ -d "deb11/binary-arm64" ] || [ -d "deb12/binary-arm64" ] || [ -d "deb13/binary-arm64" ] || [ -d "ubuntu22/binary-arm64" ] || [ -d "ubuntu24/binary-arm64" ] && AVAILABLE_ARCHITECTURES="${AVAILABLE_ARCHITECTURES} arm64" AVAILABLE_ARCHITECTURES=$(echo $AVAILABLE_ARCHITECTURES | sed 's/^ *//') { diff --git a/.github/workflows/continuous-deployment.yml b/.github/workflows/continuous-deployment.yml index 18a80a3..1508a9a 100644 --- a/.github/workflows/continuous-deployment.yml +++ b/.github/workflows/continuous-deployment.yml @@ -79,6 +79,48 @@ jobs: run: npm run build - name: Download DocumentDB packages from latest release run: .github/scripts/download_packages.sh + - name: Verify generated package components + run: | + set -euo pipefail + python3 - <<'PY' + import json + from pathlib import Path + + release_info = Path("out/packages/release-info.json") + if not release_info.exists(): + raise SystemExit("release-info.json was not generated") + + data = json.loads(release_info.read_text()) + assets = [asset["name"] for asset in data.get("assets", [])] + components = ("deb11", "deb12", "deb13", "ubuntu22", "ubuntu24") + + for component in components: + has_assets = any( + name.endswith(".deb") + and ( + name.startswith(f"{component}-") + or name.startswith(f"{component}.04-") + ) + for name in assets + ) + if not has_assets: + continue + + for arch in ("amd64", "arm64"): + packages = Path(f"out/deb/dists/stable/{component}/binary-{arch}/Packages") + packages_gz = Path(f"out/deb/dists/stable/{component}/binary-{arch}/Packages.gz") + if not packages.exists() or not packages_gz.exists(): + raise SystemExit( + f"Missing APT metadata for {component} {arch}: " + f"{packages} / {packages_gz}" + ) + + release_file = Path("out/deb/dists/stable/Release") + if release_file.exists() and any(name.startswith("deb13-") and name.endswith(".deb") for name in assets): + release_text = release_file.read_text() + if "deb13" not in release_text: + raise SystemExit("deb13 assets exist but deb13 is missing from the APT Release file") + PY - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: diff --git a/PACKAGE-INSTALL.md b/PACKAGE-INSTALL.md index df3104d..6eeaa48 100644 --- a/PACKAGE-INSTALL.md +++ b/PACKAGE-INSTALL.md @@ -7,13 +7,14 @@ Verified installation commands for the DocumentDB PostgreSQL extension. - Repository-backed installs were exercised in Docker on Ubuntu 22.04, Ubuntu 24.04, Debian 11, Debian 12, Rocky Linux 8, and Rocky Linux 9. - Both `amd64`/`x86_64` and `arm64`/`aarch64` variants were checked. - PostgreSQL package variants `16`, `17`, and `18` were resolved successfully for the supported repository-backed combinations, with one exception: Debian 11 currently resolves PostgreSQL `16` and `17` only. -- Debian 13 `.deb` assets are published on GitHub Releases, but the APT repository does **not** currently publish a `deb13` component, so Debian 13 should use direct downloads for now. +- Debian 13 `.deb` assets are published on GitHub Releases, and the APT repository now publishes a `deb13` component for repository-backed installs. ## Supported PostgreSQL Versions - Ubuntu 22.04 / 24.04: 16, 17, 18 - Debian 11: 16, 17 - Debian 12: 16, 17, 18 +- Debian 13: 16, 17, 18 - RHEL-family 8 / 9: 16, 17, 18 ## Repository-backed package installs @@ -72,6 +73,19 @@ sudo apt update && \ sudo apt install -y postgresql-16-documentdb ``` +### Debian 13 (Trixie) + +```bash +sudo apt update && \ +sudo apt install -y curl ca-certificates gnupg && \ +curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor --yes -o /usr/share/keyrings/postgresql.gpg && \ +echo "deb [signed-by=/usr/share/keyrings/postgresql.gpg] https://apt.postgresql.org/pub/repos/apt trixie-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list >/dev/null && \ +curl -fsSL https://documentdb.io/documentdb-archive-keyring.gpg | sudo gpg --dearmor --yes -o /usr/share/keyrings/documentdb-archive-keyring.gpg && \ +echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/documentdb-archive-keyring.gpg] https://documentdb.io/deb stable deb13" | sudo tee /etc/apt/sources.list.d/documentdb.list >/dev/null && \ +sudo apt update && \ +sudo apt install -y postgresql-16-documentdb +``` + ### RHEL / Rocky / AlmaLinux / CentOS Stream 8 ```bash @@ -158,7 +172,6 @@ rhel9-postgresql18-documentdb-0.109.0-1.el9.x86_64.rpm ## Notes -- The APT repository currently publishes components for `ubuntu22`, `ubuntu24`, `deb11`, and `deb12`. -- Debian 13 assets exist on GitHub Releases, but the APT repository component is not published yet. +- The APT repository currently publishes components for `ubuntu22`, `ubuntu24`, `deb11`, `deb12`, and `deb13`. - Debian 11 PostgreSQL 18 assets exist, but the upstream Bullseye PostGIS dependency is not currently installable from PGDG. - The RPM flow depends on EPEL plus PostgreSQL's upstream RPM repository because DocumentDB depends on PostgreSQL, `pg_cron`, `pgvector`, PostGIS, and `rum`. diff --git a/app/lib/packageInstall.ts b/app/lib/packageInstall.ts index 3ced83b..3253175 100644 --- a/app/lib/packageInstall.ts +++ b/app/lib/packageInstall.ts @@ -1,4 +1,4 @@ -export type AptDistro = "ubuntu22" | "ubuntu24" | "deb11" | "deb12"; +export type AptDistro = "ubuntu22" | "ubuntu24" | "deb11" | "deb12" | "deb13"; export type RpmDistro = "rhel8" | "rhel9"; export type AptArch = "amd64" | "arm64"; export type RpmArch = "x86_64" | "aarch64"; @@ -10,6 +10,7 @@ export const aptTargetLabels: Record = { ubuntu24: "Ubuntu 24.04 (Noble)", deb11: "Debian 11 (Bullseye)", deb12: "Debian 12 (Bookworm)", + deb13: "Debian 13 (Trixie)", }; export const rpmTargetLabels: Record = { @@ -22,6 +23,7 @@ export const aptTargetPgVersions: Record = { ubuntu24: ["16", "17", "18"], deb11: ["16", "17"], deb12: ["16", "17", "18"], + deb13: ["16", "17", "18"], }; const aptPgdgSuites: Record = { @@ -29,6 +31,7 @@ const aptPgdgSuites: Record = { ubuntu24: "noble", deb11: "bullseye", deb12: "bookworm", + deb13: "trixie", }; const rpmMajorVersions: Record = { diff --git a/app/packages/page.tsx b/app/packages/page.tsx index f07febb..554b287 100644 --- a/app/packages/page.tsx +++ b/app/packages/page.tsx @@ -278,8 +278,7 @@ export default function PackagesPage() {

{packageFamily === "apt" ? (

- Debian 13 packages are currently available from GitHub Releases as direct - downloads while the APT repository component is being published. Debian 11 + Debian 13 is now available in the repository-backed APT flow. Debian 11 currently supports PostgreSQL 16 and 17 in the repository-backed flow.

) : null} @@ -314,7 +313,7 @@ export default function PackagesPage() { APT - Ubuntu 22.04/24.04, Debian 11/12 + Ubuntu 22.04/24.04, Debian 11/12/13 amd64, arm64 16, 17, 18 (Debian 11: 16, 17) @@ -339,8 +338,8 @@ export default function PackagesPage() { target instead of scanning all combinations manually.

- Debian 13 packages are published as direct .deb assets on GitHub - Releases until the APT repository component is available. + Debian 13 packages are available in the deb13 APT component and + remain downloadable as direct .deb assets from GitHub Releases.

diff --git a/app/services/articleService.ts b/app/services/articleService.ts index 1f79758..32392a2 100644 --- a/app/services/articleService.ts +++ b/app/services/articleService.ts @@ -49,7 +49,7 @@ Install DocumentDB on Linux hosts with apt/rpm packages. Use the [Package Finder](/packages) to generate the exact install command for your distro, architecture, and PostgreSQL version. -> The repository-backed install commands currently cover Ubuntu 22.04/24.04, Debian 11/12, and RHEL-family 8/9 systems. Debian 13 packages are available as direct downloads from GitHub Releases while the APT repository component is being published. Debian 11 currently resolves PostgreSQL 16 and 17 in the repository-backed flow. +> The repository-backed install commands currently cover Ubuntu 22.04/24.04, Debian 11/12/13, and RHEL-family 8/9 systems. Debian 11 currently resolves PostgreSQL 16 and 17 in the repository-backed flow. ## APT example From 73c2247512a244c82469f5ccf64e122baa42176f Mon Sep 17 00:00:00 2001 From: Guanzhou Song Date: Tue, 24 Mar 2026 14:08:42 -0400 Subject: [PATCH 2/2] docs: clarify deb13 package wording Refine the package finder copy to state Debian 13 support more clearly and call out the Debian 11 PostgreSQL version limit without repeating the same phrasing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- app/packages/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/packages/page.tsx b/app/packages/page.tsx index 554b287..c1c876d 100644 --- a/app/packages/page.tsx +++ b/app/packages/page.tsx @@ -278,8 +278,8 @@ export default function PackagesPage() {

{packageFamily === "apt" ? (

- Debian 13 is now available in the repository-backed APT flow. Debian 11 - currently supports PostgreSQL 16 and 17 in the repository-backed flow. + Debian 13 is now supported in the APT repository-backed install flow. Debian + 11 currently supports only PostgreSQL 16 and 17.

) : null}