From fabb8a63aa3a997bf694624f5eaba685163e9e7f Mon Sep 17 00:00:00 2001 From: Bibo Hao Date: Sun, 12 Jul 2026 12:11:12 +0800 Subject: [PATCH 1/9] update ubuntu --- .github/workflows/build-docker-db.yml | 9 ++++----- .github/workflows/build-docker-gpu.yml | 6 ++---- .github/workflows/build-docker.yml | 6 ++---- docker_atom/atom.Dockerfile | 2 +- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build-docker-db.yml b/.github/workflows/build-docker-db.yml index 23f16fe0..07fd48bd 100644 --- a/.github/workflows/build-docker-db.yml +++ b/.github/workflows/build-docker-db.yml @@ -4,11 +4,9 @@ on: push: branches: [ "main" ] paths-ignore: [ "*.md" ] - pull_request: branches: [ "main" ] paths-ignore: [ "*.md" ] - workflow_dispatch: # Allows you to run this workflow manually from the Actions tab concurrency: @@ -19,6 +17,7 @@ permissions: contents: read env: + TZ: Asia/Shanghai BUILDKIT_PROGRESS: "plain" # Full logs for CI build. REGISTRY_SRC: ${{ vars.REGISTRY_SRC || 'quay.io' }} # For BASE_NAMESPACE of images: where to pull base images from, docker.io or other source registry URL. REGISTRY_DST: ${{ vars.REGISTRY_DST || 'quay.io' }} # For tags of built images: where to push images to, docker.io or other destination registry URL. @@ -29,7 +28,6 @@ env: DOCKER_MIRROR_REGISTRY_USERNAME: ${{ vars.DOCKER_MIRROR_REGISTRY_USERNAME }} DOCKER_MIRROR_REGISTRY_PASSWORD: ${{ secrets.DOCKER_MIRROR_REGISTRY_PASSWORD }} CI_PROJECT_NAME: ${{ vars.CI_PROJECT_NAME || 'LabNow/lab-foundation' }} - TZ: Asia/Shanghai jobs: job-postgres-17: @@ -71,11 +69,12 @@ jobs: export IMG_PREFIX_SRC="${IMG_PREFIX_DST}" build_image postgres-${PG_MAJOR} latest docker_base/base.Dockerfile --build-arg "BASE_IMG=postgres-${PG_MAJOR}" --build-arg "PYTHON_VERSION=3.13" push_image postgres- - echo "Skip PG 18-ext build as many extension are not yet available for PG 18..." + build_image postgres-${PG_MAJOR}-ext latest docker_db_postgres/postgres-ext.Dockerfile --build-arg BASE_IMG=postgres-${PG_MAJOR} + push_image postgres- ## Sync all images in this build (listed by "names") to mirror registry. - sync_images: + job-sync-images: needs: ["job-postgres-17", "job-postgres-16", "job-postgres-18"] runs-on: ubuntu-latest steps: diff --git a/.github/workflows/build-docker-gpu.yml b/.github/workflows/build-docker-gpu.yml index 2be30a28..1099b3e7 100644 --- a/.github/workflows/build-docker-gpu.yml +++ b/.github/workflows/build-docker-gpu.yml @@ -4,11 +4,9 @@ on: push: branches: [ "main" ] paths-ignore: [ "*.md" ] - pull_request: branches: [ "main" ] paths-ignore: [ "*.md" ] - workflow_dispatch: # Allows you to run this workflow manually from the Actions tab concurrency: @@ -16,6 +14,7 @@ concurrency: cancel-in-progress: true env: + TZ: Asia/Shanghai BUILDKIT_PROGRESS: "plain" # Full logs for CI build. REGISTRY_SRC: ${{ vars.REGISTRY_SRC || 'quay.io' }} # For BASE_NAMESPACE of images: where to pull base images from, docker.io or other source registry URL. REGISTRY_DST: ${{ vars.REGISTRY_DST || 'quay.io' }} # For tags of built images: where to push images to, docker.io or other destination registry URL. @@ -26,7 +25,6 @@ env: DOCKER_MIRROR_REGISTRY_USERNAME: ${{ vars.DOCKER_MIRROR_REGISTRY_USERNAME }} DOCKER_MIRROR_REGISTRY_PASSWORD: ${{ secrets.DOCKER_MIRROR_REGISTRY_PASSWORD }} CI_PROJECT_NAME: ${{ vars.CI_PROJECT_NAME || 'LabNow/lab-foundation' }} - TZ: Asia/Shanghai permissions: contents: read @@ -155,7 +153,7 @@ jobs: ## Sync all images in this build (listed by "names") to mirror registry. - sync_images: + job-sync-images: needs: ["job-core-cuda", "job-py-cv", "job-py-nlp", "job-torch_cuda128", "job-nvidia-ctk"] runs-on: ubuntu-latest steps: diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml index 1223785c..6dae72d8 100644 --- a/.github/workflows/build-docker.yml +++ b/.github/workflows/build-docker.yml @@ -4,11 +4,9 @@ on: push: branches: [ "main" ] paths-ignore: [ "*.md" ] - pull_request: branches: [ "main" ] paths-ignore: [ "*.md" ] - workflow_dispatch: # Allows you to run this workflow manually from the Actions tab concurrency: @@ -19,6 +17,7 @@ permissions: contents: read env: + TZ: Asia/Shanghai BUILDKIT_PROGRESS: "plain" # Full logs for CI build. REGISTRY_SRC: ${{ vars.REGISTRY_SRC || 'quay.io' }} # For BASE_NAMESPACE of images: where to pull base images from, docker.io or other source registry URL. REGISTRY_DST: ${{ vars.REGISTRY_DST || 'quay.io' }} # For tags of built images: where to push images to, docker.io or other destination registry URL. @@ -29,7 +28,6 @@ env: DOCKER_MIRROR_REGISTRY_USERNAME: ${{ vars.DOCKER_MIRROR_REGISTRY_USERNAME }} DOCKER_MIRROR_REGISTRY_PASSWORD: ${{ secrets.DOCKER_MIRROR_REGISTRY_PASSWORD }} CI_PROJECT_NAME: ${{ vars.CI_PROJECT_NAME || 'LabNow/lab-foundation' }} - TZ: Asia/Shanghai jobs: job-base: @@ -238,7 +236,7 @@ jobs: python /opt/utils/image-syncer/run_jobs.py --auth-file=/tmp/.github/workflows/auth.json ## Sync all images in this build (listed by "names") to mirror registry. - sync_images: + job-sync-images: needs: ["job-docker_kit", "job-full-stack", "job-core"] runs-on: ubuntu-latest steps: diff --git a/docker_atom/atom.Dockerfile b/docker_atom/atom.Dockerfile index 7bf4d2f8..0e0a0ade 100644 --- a/docker_atom/atom.Dockerfile +++ b/docker_atom/atom.Dockerfile @@ -1,7 +1,7 @@ # Distributed under the terms of the Modified BSD License. # latest # default value: Latest LTS version of Ubuntu (https://hub.docker.com/_/ubuntu) -ARG BASE_IMG="ubuntu:noble" +ARG BASE_IMG="ubuntu:latest" FROM ${BASE_IMG} LABEL maintainer="postmaster@labnow.ai" From 3336b22a04bebc0d3effb1b0bb35eb1a367b43d1 Mon Sep 17 00:00:00 2001 From: Bibo Hao Date: Sun, 12 Jul 2026 12:21:13 +0800 Subject: [PATCH 2/9] debug lang for ubuntu 26 --- docker_atom/atom.Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker_atom/atom.Dockerfile b/docker_atom/atom.Dockerfile index 0e0a0ade..a0c2ece5 100644 --- a/docker_atom/atom.Dockerfile +++ b/docker_atom/atom.Dockerfile @@ -12,8 +12,8 @@ COPY work /opt/utils/ ENV SHELL=/bin/bash \ DEBIAN_FRONTEND=noninteractive \ - LC_ALL="" \ LC_CTYPE="C.UTF-8" \ + LC_ALL="en_US.UTF-8" \ LC_TYPE="en_US.UTF-8" \ LANG="en_US.UTF-8" \ LANGUAGE="en_US.UTF-8" \ @@ -30,7 +30,7 @@ RUN set -eux && cd /tmp \ && apt-get -qq update --fix-missing && apt-get -y -qq upgrade \ && apt-get -qq install -y --no-install-recommends \ apt-utils apt-transport-https ca-certificates gnupg2 dirmngr locales sudo lsb-release curl \ - && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 \ + && localedef -i en_US -c -f UTF-8 en_US.UTF-8 \ && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen \ && echo "ALL ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers \ && mv /root/.bashrc /etc/profile.d/bash.bashrc.sh \ From ae1d81614d31a4dbdb10d797bcc0251704255d9d Mon Sep 17 00:00:00 2001 From: Bibo Hao Date: Wed, 22 Jul 2026 01:59:22 +0800 Subject: [PATCH 3/9] update ver fetch --- docker_atom/work/script-setup-core.sh | 21 ++++++++----------- docker_atom/work/script-setup-net.sh | 6 +++--- docker_atom/work/script-setup-sys.sh | 4 ++-- .../rootfs/opt/utils/script-setup-pg-ext.sh | 4 ++-- docker_docker_kit/work/script-setup-docker.sh | 4 ++-- 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/docker_atom/work/script-setup-core.sh b/docker_atom/work/script-setup-core.sh index 3e8f1e61..470d182e 100644 --- a/docker_atom/work/script-setup-core.sh +++ b/docker_atom/work/script-setup-core.sh @@ -153,8 +153,7 @@ setup_node_base() { local VER_NODEJS_REQ="${1:-}" \ && local UNAME=$(uname | tr '[:upper:]' '[:lower:]') \ && local ARCH=$(uname -m | sed -e 's/x86_64/x64/' -e 's/aarch64/arm64/') \ - && local ATOM_NODEJS=$(curl -sL https://github.com/nodejs/node/releases.atom | grep 'releases/tag' | sort -r) \ - && local VERS_NODEJS=$(echo "${ATOM_NODEJS}" | grep -Po '\d[\d.]+' | sort -rV) \ + && local VERS_NODEJS=$(curl -sL "https://api.github.com/repos/nodejs/node/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -Po '\d[\d.]+' | sort -rV) \ && if [ -n "${VER_NODEJS_REQ}" ]; then local VER_NODEJS_RE=${VER_NODEJS_REQ#v} && VER_NODEJS_RE=${VER_NODEJS_RE//./\\.} \ && local VER_NODEJS=$(echo "${VERS_NODEJS}" | grep -m1 -E "^${VER_NODEJS_RE}([.-]|$)") @@ -179,7 +178,7 @@ setup_node_pnpm() { local VER_PNPM_REQ="${1:-}" UNAME ARCH URL_PNPM TMPDIR ; UNAME=$(uname | tr '[:upper:]' '[:lower:]') \ && ARCH=$(uname -m | sed -e 's/x86_64/x64/' -e 's/aarch64/arm64/' -e 's/armv7l/arm/') \ - && local VERS_PNPM=$(curl -fsSL https://github.com/pnpm/pnpm/releases.atom | grep -Po '(?<=tag/v)\d[\d.]+' | grep -v alpha | sort -rV) \ + && local VERS_PNPM=$(curl -fsSL "https://api.github.com/repos/pnpm/pnpm/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -v alpha | grep -Po '\d[\d.]+' | sort -rV) \ && if [ -n "${VER_PNPM_REQ}" ]; then local VER_PNPM_RE=${VER_PNPM_REQ#v} \ && VER_PNPM_RE=${VER_PNPM_RE//./\\.} \ @@ -209,8 +208,7 @@ setup_node_bun() { local VER_BUN_REQ="${1:-}" \ && local UNAME=$(uname | tr '[:upper:]' '[:lower:]') \ && local ARCH=$(uname -m | sed -e 's/x86_64/x64/' ) \ - && local ATOM_BUN=$(curl -sL https://github.com/oven-sh/bun/releases.atom | grep 'releases/tag' | sort -r) \ - && local VERS_BUN=$(echo "${ATOM_BUN}" | grep -Po 'bun-v\K\d+\.\d+\.\d+' | sort -rV) \ + && local VERS_BUN=$(curl -sL "https://api.github.com/repos/oven-sh/bun/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -Po 'bun-v\K\d+\.\d+\.\d+' | sort -rV) \ && if [ -n "${VER_BUN_REQ}" ]; then local VER_BUN_RE=${VER_BUN_REQ#v} \ && VER_BUN_RE=${VER_BUN_RE//./\\.} \ @@ -234,8 +232,8 @@ setup_GO() { local VER_GO_REQ="${1:-}" \ && local UNAME=$(uname | tr '[:upper:]' '[:lower:]') \ && local ARCH=$(dpkg --print-architecture) \ - && local ATOM_GO=$(curl -sL https://github.com/golang/go/releases.atom | grep 'releases/tag' | grep -v 'rc' | sort -r) \ - && local VERS_GO=$(echo "${ATOM_GO}" | grep -Po '\d[\d.]+' | sort -rV) \ + && local VERS_GO=$(curl -sL "https://api.github.com/repos/golang/go/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -v 'rc' | grep -Po '\d[\d.]+' | sort -rV) \ + && { [ -n "${VERS_GO}" ] || VERS_GO=$(curl -sL "https://go.dev/dl/?mode=json" | grep -Po '(?<="version": "go)\d[\d.]+' | sort -rV) ; } \ && if [ -n "${VER_GO_REQ}" ]; then local VER_GO_RE=${VER_GO_REQ#v} \ && VER_GO_RE=${VER_GO_RE//./\\.} \ @@ -289,8 +287,7 @@ setup_julia() { && local UNAME=$(uname | tr '[:upper:]' '[:lower:]') \ && local ARCH_1=$(uname -m) \ && local ARCH_2=$(uname -m | sed -e 's/x86_64/x64/') \ - && local ATOM_JULIA=$(curl -sL https://github.com/JuliaLang/julia/releases.atom | grep -P 'releases/tag(?!.*(rc|alpha|beta))' | sort -r) \ - && local VERS_JULIA=$(echo "${ATOM_JULIA}" | grep -Po '\d[\d.]+' | sort -rV) \ + && local VERS_JULIA=$(curl -sL "https://api.github.com/repos/JuliaLang/julia/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -P -v '(rc|alpha|beta)' | grep -Po '\d[\d.]+' | sort -rV) \ && if [ -n "${VER_JULIA_REQ}" ]; then local VER_JULIA_RE=${VER_JULIA_REQ#v} \ && VER_JULIA_RE=${VER_JULIA_RE//./\\.} \ @@ -361,7 +358,7 @@ setup_bazel() { local UNAME=$(uname | tr '[:upper:]' '[:lower:]') \ && local ARCH=$(uname -m | sed -e 's/aarch64/arm64/') \ && local VER_BAZEL_REQ="${1:-}" \ - && local VERS_BAZEL=$(curl -sL https://github.com/bazelbuild/bazel/releases.atom | grep 'releases/tag' | grep -Po '\d[\d.]+' | sort -rV) \ + && local VERS_BAZEL=$(curl -sL "https://api.github.com/repos/bazelbuild/bazel/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -Po '\d[\d.]+' | sort -rV) \ && if [ -n "${VER_BAZEL_REQ}" ]; then local VER_BAZEL_RE=${VER_BAZEL_REQ#v} \ && VER_BAZEL_RE=${VER_BAZEL_RE//./\\.} \ @@ -379,7 +376,7 @@ setup_bazel() { setup_gradle() { local VER_GRADLE_REQ="${1:-}" \ - && local VERS_GRADLE=$(curl -sL https://github.com/gradle/gradle/releases.atom | grep 'releases/tag' | grep -v 'M' | grep -Po '\d[\d.]+' | sort -rV) \ + && local VERS_GRADLE=$(curl -sL "https://api.github.com/repos/gradle/gradle/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -v 'M' | grep -Po '\d[\d.]+' | sort -rV) \ && if [ -n "${VER_GRADLE_REQ}" ]; then local VER_GRADLE_RE=${VER_GRADLE_REQ#v} \ && VER_GRADLE_RE=${VER_GRADLE_RE//./\\.} \ @@ -399,7 +396,7 @@ setup_yq() { local ARCH=$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/' -e 's/armv7l/arm/') ; [[ "$ARCH" =~ ^(amd64|arm64|arm)$ ]] || { echo "Unsupported architecture for yq: $(uname -m)"; return 1; } local VER_YQ="" VER_YQ_REQ="${1:-}" \ - && local VERS_YQ=$(curl -sL https://github.com/mikefarah/yq/releases.atom | grep 'releases/tag' | grep -Po 'v\K[\d.]+' | sort -rV) \ + && local VERS_YQ=$(curl -sL "https://api.github.com/repos/mikefarah/yq/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -Po 'v\K[\d.]+' | sort -rV) \ && if [ -n "${VER_YQ_REQ}" ]; then local VER_YQ_RE=${VER_YQ_REQ#v} && VER_YQ_RE=${VER_YQ_RE//./\\.} \ && VER_YQ=$(echo "${VERS_YQ}" | grep -m1 -E "^${VER_YQ_RE}([.-]|$)") diff --git a/docker_atom/work/script-setup-net.sh b/docker_atom/work/script-setup-net.sh index d6c79012..412ec0ea 100644 --- a/docker_atom/work/script-setup-net.sh +++ b/docker_atom/work/script-setup-net.sh @@ -1,6 +1,6 @@ setup_traefik() { local VER_TRAEFIK_REQ="${1:-}" \ - && local VERS_TRAEFIK=$(curl -sL https://github.com/traefik/traefik/releases.atom | grep 'releases/tag' | grep -Po '\d[\d.]+' | sort -rV) \ + && local VERS_TRAEFIK=$(curl -sL "https://api.github.com/repos/traefik/traefik/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -Po '\d[\d.]+' | sort -rV) \ && if [ -n "${VER_TRAEFIK_REQ}" ]; then local VER_TRAEFIK_RE=${VER_TRAEFIK_REQ#v} \ && VER_TRAEFIK_RE=${VER_TRAEFIK_RE//./\\.} \ @@ -20,7 +20,7 @@ setup_caddy() { UNAME=$(uname | tr '[:upper:]' '[:lower:]') \ && ARCH=$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/') \ && local VER_CADDY_REQ="${1:-}" \ - && local VERS_CADDY=$(curl -sL https://github.com/caddyserver/caddy/releases.atom | grep "releases/tag" | grep -v 'beta' | grep -Po '(\d[\d|.]+)' | sort -rV) \ + && local VERS_CADDY=$(curl -sL "https://api.github.com/repos/caddyserver/caddy/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -v 'beta' | grep -Po '(\d[\d|.]+)' | sort -rV) \ && if [ -n "${VER_CADDY_REQ}" ]; then local VER_CADDY_RE=${VER_CADDY_REQ#v} \ && VER_CADDY_RE=${VER_CADDY_RE//./\\.} \ @@ -41,7 +41,7 @@ setup_oauth2_proxy() { [[ "$ARCH" =~ ^(amd64|arm64|armv7)$ ]] || { echo "Unsupported architecture for oauth2-proxy: $(uname -m)"; return 1; } local VER_OAUTH2_PROXY_REQ="${1:-}" \ - && local VERS_OAUTH2_PROXY=$(curl -sL https://github.com/oauth2-proxy/oauth2-proxy/releases.atom | grep 'releases/tag' | grep -Po '(?<=tag/v)\d[\d.]+' | sort -rV) \ + && local VERS_OAUTH2_PROXY=$(curl -sL "https://api.github.com/repos/oauth2-proxy/oauth2-proxy/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -Po '(?<=v)?\d[\d.]+' | sort -rV) \ && if [ -n "${VER_OAUTH2_PROXY_REQ}" ]; then local VER_OAUTH2_PROXY_RE=${VER_OAUTH2_PROXY_REQ#v} \ && VER_OAUTH2_PROXY_RE=${VER_OAUTH2_PROXY_RE//./\\.} \ diff --git a/docker_atom/work/script-setup-sys.sh b/docker_atom/work/script-setup-sys.sh index 4daf5eaf..57667685 100644 --- a/docker_atom/work/script-setup-sys.sh +++ b/docker_atom/work/script-setup-sys.sh @@ -4,7 +4,7 @@ source /opt/utils/script-utils.sh setup_tini() { ARCH=$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/') \ && local VER_TINI_REQ="${1:-}" \ - && local VERS_TINI=$(curl -sL https://github.com/krallin/tini/releases.atom | grep 'releases/tag' | grep -Po '\d[\d.]+' | sort -rV) \ + && local VERS_TINI=$(curl -sL "https://api.github.com/repos/krallin/tini/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -Po '\d[\d.]+' | sort -rV) \ && if [ -n "${VER_TINI_REQ}" ]; then local VER_TINI_RE=${VER_TINI_REQ#v} \ && VER_TINI_RE=${VER_TINI_RE//./\\.} \ @@ -27,7 +27,7 @@ setup_supervisord() { UNAME=$(uname | tr '[:upper:]' '[:lower:]') \ && ARCH=$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/') \ && local VER_SUPERVISORD_REQ="${1:-}" \ - && local VERS_SUPERVISORD=$(curl -sL https://github.com/LabNow-ai/supervisord/releases.atom | grep "releases/tag" | grep -Po '(\d[\d|.]+)' | sort -rV) \ + && local VERS_SUPERVISORD=$(curl -sL "https://api.github.com/repos/LabNow-ai/supervisord/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | grep -Po '(\d[\d|.]+)' | sort -rV) \ && if [ -n "${VER_SUPERVISORD_REQ}" ]; then local VER_SUPERVISORD_RE=${VER_SUPERVISORD_REQ#v} \ && VER_SUPERVISORD_RE=${VER_SUPERVISORD_RE//./\\.} \ diff --git a/docker_db_postgres/rootfs/opt/utils/script-setup-pg-ext.sh b/docker_db_postgres/rootfs/opt/utils/script-setup-pg-ext.sh index 153098de..890f526a 100644 --- a/docker_db_postgres/rootfs/opt/utils/script-setup-pg-ext.sh +++ b/docker_db_postgres/rootfs/opt/utils/script-setup-pg-ext.sh @@ -18,7 +18,7 @@ setup_pg_search() { ## ref1: https://docs.paradedb.com/deploy/self-hosted/extension ## ref2: https://github.com/paradedb/paradedb ARCH="amd64" \ - && VER_PG_SEARCH=$(curl -sL https://github.com/paradedb/paradedb/releases.atom | grep 'releases/tag' | head -1 | grep -Po '\d[\d.]+' ) \ + && VER_PG_SEARCH=$(curl -sL "https://api.github.com/repos/paradedb/paradedb/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | head -1 | grep -Po '\d[\d.]+' ) \ && URL_PG_SEARCH="https://github.com/paradedb/paradedb/releases/download/v${VER_PG_SEARCH}/postgresql-${PG_MAJOR}-pg-search_${VER_PG_SEARCH}-1PARADEDB-$(lsb_release -cs)_amd64.deb" \ && echo "Downloading pg_search ${VER_PG_SEARCH} from: ${URL_PG_SEARCH}" \ && mkdir -pv /tmp/pg_search/ && cd /tmp/pg_search \ @@ -38,7 +38,7 @@ setup_apache_age() { setup_pgvectorscale() { ## ref: https://github.com/timescale/pgvectorscale ARCH="amd64" \ - && VER_PGVS=$(curl -sL https://github.com/timescale/pgvectorscale/releases.atom | grep 'releases/tag' | head -1 | grep -Po '\d[\d.]+' ) \ + && VER_PGVS=$(curl -sL "https://api.github.com/repos/timescale/pgvectorscale/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | head -1 | grep -Po '\d[\d.]+' ) \ && URL_PGVS="https://github.com/timescale/pgvectorscale/releases/download/${VER_PGVS}/pgvectorscale-${VER_PGVS}-pg${PG_MAJOR}-${ARCH}.zip" \ && mkdir -pv /tmp/pgvectorscale/ && cd /tmp/pgvectorscale \ && install_zip ${URL_PGVS} && mv /opt/pgvectorscal* /tmp/pgvectorscale/ \ diff --git a/docker_docker_kit/work/script-setup-docker.sh b/docker_docker_kit/work/script-setup-docker.sh index a7459712..94b692d1 100644 --- a/docker_docker_kit/work/script-setup-docker.sh +++ b/docker_docker_kit/work/script-setup-docker.sh @@ -3,7 +3,7 @@ source /opt/utils/script-utils.sh setup_docker_compose() { ARCH=$(uname -m) \ - && VER_COMPOSE=$(curl -sL https://github.com/docker/compose/releases.atom | grep 'releases/tag' | head -1 | grep -Po '\d[.\d]+') \ + && VER_COMPOSE=$(curl -sL "https://api.github.com/repos/docker/compose/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | head -1 | grep -Po '\d[.\d]+') \ && URL_COMPOSE="https://github.com/docker/compose/releases/download/v${VER_COMPOSE}/docker-compose-linux-${ARCH}" \ && echo "Downloading Compose from: ${URL_COMPOSE}" \ && sudo curl -o /usr/bin/docker-compose -sL ${URL_COMPOSE} \ @@ -14,7 +14,7 @@ setup_docker_compose() { setup_docker_syncer() { ARCH=$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/') \ - && VER_SYNCER="$(curl -sL https://github.com/AliyunContainerService/image-syncer/releases.atom | grep 'releases/tag' | head -1 | grep -Po '\d[.\d]+')" \ + && VER_SYNCER="$(curl -sL "https://api.github.com/repos/AliyunContainerService/image-syncer/releases?per_page=50" | grep -Po '(?<="tag_name": ")[^"]+' | head -1 | grep -Po '\d[.\d]+')" \ && URL_SYNCER="https://github.com/AliyunContainerService/image-syncer/releases/download/v${VER_SYNCER}/image-syncer-v${VER_SYNCER}-linux-${ARCH}.tar.gz" \ && echo "Downloading image-syncer from: ${URL_SYNCER}" \ && curl -o /tmp/image_syncer.tgz -sL ${URL_SYNCER} \ From 9350d57d7cde6385ee064c8443a1f0c8dfb42c08 Mon Sep 17 00:00:00 2001 From: Bibo Hao Date: Wed, 22 Jul 2026 02:06:26 +0800 Subject: [PATCH 4/9] rm pgxman --- .github/workflows/build-docker-db.yml | 2 +- docker_db_postgres/postgres-ext.Dockerfile | 5 ++--- .../rootfs/opt/utils/script-setup-pg-ext-mirror.sh | 5 ----- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-docker-db.yml b/.github/workflows/build-docker-db.yml index 07fd48bd..92d28a26 100644 --- a/.github/workflows/build-docker-db.yml +++ b/.github/workflows/build-docker-db.yml @@ -59,7 +59,7 @@ jobs: push_image postgres- job-postgres-18: - name: 'postgres-18' + name: 'postgres-18,postgres-18-ext' runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 diff --git a/docker_db_postgres/postgres-ext.Dockerfile b/docker_db_postgres/postgres-ext.Dockerfile index 3e2b4432..d56cd5e8 100644 --- a/docker_db_postgres/postgres-ext.Dockerfile +++ b/docker_db_postgres/postgres-ext.Dockerfile @@ -9,8 +9,8 @@ LABEL maintainer="haobibo@gmail.com" COPY rootfs / RUN set -eux && . /opt/utils/script-utils.sh && . /opt/utils/script-setup-pg-ext-mirror.sh \ - # PG extension managers: pgxman, pgxnclient - && apt-get update && apt-get install -y postgresql-server-dev-${PG_MAJOR} pgxman \ + # PG extension managers: pgxnclient + && apt-get update && apt-get install -y postgresql-server-dev-${PG_MAJOR} \ && pip install --no-cache-dir --root-user-action=ignore -U pgxnclient && pgxn --version \ ## Generate a package list based on PG_MAJOR version && apt-get update && apt-get install -y gettext \ @@ -27,7 +27,6 @@ RUN set -eux && . /opt/utils/script-utils.sh && . /opt/utils/script-setup-pg-ext && setup_apache_age \ && setup_pg_duckdb \ && setup_pg_net \ - ## && pgxman install -y --overwrite pgsodium \ ## required to build some extensions and can be removed after install: && apt-get remove -y postgresql-server-dev-${PG_MAJOR} ninja-build \ && ls -alh /usr/share/postgresql/*/extension/*.control | sort \ diff --git a/docker_db_postgres/rootfs/opt/utils/script-setup-pg-ext-mirror.sh b/docker_db_postgres/rootfs/opt/utils/script-setup-pg-ext-mirror.sh index ca0774be..b1ac4f3c 100644 --- a/docker_db_postgres/rootfs/opt/utils/script-setup-pg-ext-mirror.sh +++ b/docker_db_postgres/rootfs/opt/utils/script-setup-pg-ext-mirror.sh @@ -16,11 +16,6 @@ add_apt_source() { curl -fsSL "$list_url" > "$list_path" } -# pgxman-cli -ARCH=$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/') -curl -fsSL https://apt.pgxman.com/pgxman-keyring.gpg | gpg --dearmor | sudo tee ${APT_KEYRING_DIR}/pgxman-cli.gpg > /dev/null -echo "deb [arch=${ARCH} signed-by=${APT_KEYRING_DIR}/pgxman-cli.gpg] https://apt.pgxman.com/cli stable main" | sudo tee ${APT_SOURCE_DIR}/pgxman-cli.list >/dev/null - # apt source for: https://www.citusdata.com/download/ add_apt_source \ From 1b5fe1aa50964cf9af90c664e74d7c8c65ae3acf Mon Sep 17 00:00:00 2001 From: Bibo Hao Date: Wed, 22 Jul 2026 02:19:32 +0800 Subject: [PATCH 5/9] update citus ver --- docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt b/docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt index 6c60c586..da943fa5 100644 --- a/docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt +++ b/docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt @@ -4,7 +4,7 @@ postgresql-${PG_MAJOR}-cron % job scheduler using background wo postgresql-${PG_MAJOR}-pgaudit % SQL audit logging via executor hooks postgresql-${PG_MAJOR}-pg-stat-kcache % OS-level CPU/IO stats for queries postgresql-${PG_MAJOR}-squeeze % automatic table bloat reduction (bgworker) -postgresql-${PG_MAJOR}-citus-13.0 % distributed PostgreSQL extension (planner hook) +postgresql-${PG_MAJOR}-citus-14.1 % distributed PostgreSQL extension (planner hook) timescaledb-2-postgresql-${PG_MAJOR} % time-series database extension (planner + bgworker) From a813f4a34293a3e7a2c95c6766d1e42fa4f6fec9 Mon Sep 17 00:00:00 2001 From: Bibo Hao Date: Wed, 22 Jul 2026 02:27:32 +0800 Subject: [PATCH 6/9] typo --- docker_db_postgres/postgres-ext.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker_db_postgres/postgres-ext.Dockerfile b/docker_db_postgres/postgres-ext.Dockerfile index d56cd5e8..1f60e2a9 100644 --- a/docker_db_postgres/postgres-ext.Dockerfile +++ b/docker_db_postgres/postgres-ext.Dockerfile @@ -17,7 +17,7 @@ RUN set -eux && . /opt/utils/script-utils.sh && . /opt/utils/script-setup-pg-ext && envsubst < /opt/utils/install-list-pgext.tpl.apt > /opt/utils/install-list-pgext.apt \ && rm -rf /opt/utils/install-list-pgext.tpl.apt \ ## Install extensions: install by apt - && echo "To install PG extensions: $(cat /opt/utils/install_list_pgext.apt)" \ + && echo "To install PG extensions: $(cat /opt/utils/install-list-pgext.apt)" \ && install_apt /opt/utils/install-list-pgext.apt \ ## Install extensions: install ext that need to be installed manually && source /opt/utils/script-setup-pg-ext.sh \ From 6dc2c1ff1dc2e6c3b491ef3540c2281f8b3b139e Mon Sep 17 00:00:00 2001 From: Bibo Hao Date: Wed, 22 Jul 2026 02:38:46 +0800 Subject: [PATCH 7/9] debug pg ext --- .../rootfs/opt/utils/install-list-pgext.tpl.apt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt b/docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt index da943fa5..6577eaa1 100644 --- a/docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt +++ b/docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt @@ -26,7 +26,7 @@ postgresql-${PG_MAJOR}-prioritize % query prioritization framework %% Vector, scientific, spatial, and domain-specific extensions (AI, GIS, chemistry, scientific computing) postgresql-${PG_MAJOR}-pgvector % vector data type and similarity search -postgresql-16-rdkit % cheminformatics cartridge (chemistry) % TODO: >16 not released yet +postgresql-${PG_MAJOR}-rdkit % cheminformatics cartridge (chemistry) postgresql-${PG_MAJOR}-postgis % spatial types, indexes, and GIS functions postgis osm2pgrouting % OpenStreetMap routing tools for PostGIS postgresql-${PG_MAJOR}-pgrouting % routing algorithms on PostGIS networks @@ -77,7 +77,7 @@ postgresql-${PG_MAJOR}-pgmp % management and monitoring utiliti %% Query planning, optimization, and execution control (query behavior analysis and tuning) postgresql-${PG_MAJOR}-show-plans % display cached execution plans postgresql-${PG_MAJOR}-hypopg % hypothetical indexes for query planning -% postgresql-${PG_MAJOR}-pgfincore % inspect shared buffer / OS cache residency % TODO: >17 not released yet +% postgresql-${PG_MAJOR}-pgfincore % inspect shared buffer / OS cache residency %% Indexing, access methods, and physical data layout (storage, partitioning, and index structures) From 242dd67d751073215b35cf6927f0784cf2ddf31b Mon Sep 17 00:00:00 2001 From: Bibo Hao Date: Tue, 21 Jul 2026 19:26:36 +0000 Subject: [PATCH 8/9] debug --- .github/workflows/build-docker-db.yml | 18 +++++++++--------- .../opt/utils/install-list-pgext.tpl.apt | 4 ++-- tool.sh | 11 ++++++++--- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build-docker-db.yml b/.github/workflows/build-docker-db.yml index 92d28a26..c5d3cf3a 100644 --- a/.github/workflows/build-docker-db.yml +++ b/.github/workflows/build-docker-db.yml @@ -30,28 +30,28 @@ env: CI_PROJECT_NAME: ${{ vars.CI_PROJECT_NAME || 'LabNow/lab-foundation' }} jobs: - job-postgres-17: - name: 'postgres-17,postgres-17-ext' + job-postgres-16: + name: 'postgres-16,postgres-16-ext' runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - run: | - source ./tool.sh && export PG_MAJOR=17 - build_image_no_tag postgres-${PG_MAJOR} latest docker_atom/atom.Dockerfile --build-arg "BASE_IMG=postgres:${PG_MAJOR}-bookworm" + source ./tool.sh && export PG_MAJOR=16 + build_image_no_tag postgres-${PG_MAJOR} latest docker_atom/atom.Dockerfile --build-arg "BASE_IMG=postgres:${PG_MAJOR}-trixie" export IMG_PREFIX_SRC="${IMG_PREFIX_DST}" build_image postgres-${PG_MAJOR} latest docker_base/base.Dockerfile --build-arg "BASE_IMG=postgres-${PG_MAJOR}" --build-arg "PYTHON_VERSION=3.13" push_image postgres- build_image postgres-${PG_MAJOR}-ext latest docker_db_postgres/postgres-ext.Dockerfile --build-arg BASE_IMG=postgres-${PG_MAJOR} push_image postgres- - job-postgres-16: - name: 'postgres-16,postgres-16-ext' + job-postgres-17: + name: 'postgres-17,postgres-17-ext' runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - run: | - source ./tool.sh && export PG_MAJOR=16 - build_image_no_tag postgres-${PG_MAJOR} latest docker_atom/atom.Dockerfile --build-arg "BASE_IMG=postgres:${PG_MAJOR}-bookworm" + source ./tool.sh && export PG_MAJOR=17 + build_image_no_tag postgres-${PG_MAJOR} latest docker_atom/atom.Dockerfile --build-arg "BASE_IMG=postgres:${PG_MAJOR}-trixie" export IMG_PREFIX_SRC="${IMG_PREFIX_DST}" build_image postgres-${PG_MAJOR} latest docker_base/base.Dockerfile --build-arg "BASE_IMG=postgres-${PG_MAJOR}" --build-arg "PYTHON_VERSION=3.13" push_image postgres- @@ -65,7 +65,7 @@ jobs: - uses: actions/checkout@v7 - run: | source ./tool.sh && export PG_MAJOR=18 - build_image_no_tag postgres-${PG_MAJOR} latest docker_atom/atom.Dockerfile --build-arg "BASE_IMG=postgres:${PG_MAJOR}-bookworm" + build_image_no_tag postgres-${PG_MAJOR} latest docker_atom/atom.Dockerfile --build-arg "BASE_IMG=postgres:${PG_MAJOR}-trixie" export IMG_PREFIX_SRC="${IMG_PREFIX_DST}" build_image postgres-${PG_MAJOR} latest docker_base/base.Dockerfile --build-arg "BASE_IMG=postgres-${PG_MAJOR}" --build-arg "PYTHON_VERSION=3.13" push_image postgres- diff --git a/docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt b/docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt index 6577eaa1..714f41d3 100644 --- a/docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt +++ b/docker_db_postgres/rootfs/opt/utils/install-list-pgext.tpl.apt @@ -26,7 +26,7 @@ postgresql-${PG_MAJOR}-prioritize % query prioritization framework %% Vector, scientific, spatial, and domain-specific extensions (AI, GIS, chemistry, scientific computing) postgresql-${PG_MAJOR}-pgvector % vector data type and similarity search -postgresql-${PG_MAJOR}-rdkit % cheminformatics cartridge (chemistry) +postgresql-16-rdkit % cheminformatics cartridge (chemistry) postgresql-${PG_MAJOR}-postgis % spatial types, indexes, and GIS functions postgis osm2pgrouting % OpenStreetMap routing tools for PostGIS postgresql-${PG_MAJOR}-pgrouting % routing algorithms on PostGIS networks @@ -46,7 +46,7 @@ postgresql-${PG_MAJOR}-rational % rational number data type postgresql-${PG_MAJOR}-mysql-fdw % foreign data wrapper for MySQL postgresql-${PG_MAJOR}-oracle-fdw % foreign data wrapper for Oracle postgresql-${PG_MAJOR}-tds-fdw % foreign data wrapper for MSSQL / Sybase -postgresql-${PG_MAJOR}-ogr-fdw % FDW for spatial data via GDAL +% postgresql-${PG_MAJOR}-ogr-fdw % FDW for spatial data via GDAL % TODO - fix deps %% Procedural languages and language tooling (user-defined functions and language runtimes) diff --git a/tool.sh b/tool.sh index eb59a997..2fb0a372 100755 --- a/tool.sh +++ b/tool.sh @@ -1,8 +1,13 @@ #!/bin/bash set -eux +# If not executed in GitHub Action, run script in project root, and export the following 3 variables manually: +# export REGISTRY_SRC='quay.io' # For BASE_NAMESPACE of images: where to pull base images from, docker.io or other source registry URL. +# export REGISTRY_DST='quay.io' # For tags of built images: where to push images to, docker.io or other destination registry URL. +# export CI_PROJECT_NAME='LabNow/lab-foundation' + CI_PROJECT_NAME=${CI_PROJECT_NAME:-$GITHUB_REPOSITORY} -CI_PROJECT_BRANCH=${GITHUB_HEAD_REF:-"main"} +CI_PROJECT_BRANCH=${GITHUB_HEAD_REF:-$(git branch --show-current)} CI_PROJECT_SPACE=$(echo "${CI_PROJECT_BRANCH}" | cut -f1 -d'/') # If on the main branch, image namespace will be same as CI_PROJECT_NAME's name space; @@ -11,7 +16,7 @@ CI_PROJECT_SPACE=$(echo "${CI_PROJECT_BRANCH}" | cut -f1 -d'/') export CI_PROJECT_NAMESPACE="$(dirname ${CI_PROJECT_NAME})${NAMESPACE_SUFFIX}" ; export IMG_NAMESPACE=$(echo "${CI_PROJECT_NAMESPACE}" | awk '{print tolower($0)}') -export IMG_PREFIX_SRC=$(echo "${REGISTRY_SRC:-"docker.io"}/${IMG_NAMESPACE}" | awk '{print tolower($0)}') +export IMG_PREFIX_SRC=$(echo "${REGISTRY_SRC:-"quay.io"}/${IMG_NAMESPACE}" | awk '{print tolower($0)}') export IMG_PREFIX_DST=$(echo "${REGISTRY_DST:-"docker.io"}/${IMG_NAMESPACE}" | awk '{print tolower($0)}') export TAG_SUFFIX="-$(git rev-parse --short HEAD)" @@ -91,4 +96,4 @@ setup_github_actions() { jq '.experimental=true | ."data-root"="/mnt/docker"' /etc/docker/daemon.json > /tmp/daemon.json && sudo mv /tmp/daemon.json /etc/docker/ ; ( sudo service docker restart || true ) && cat /etc/docker/daemon.json && docker info ; } -[ "$GITHUB_ACTIONS" = "true" ] && echo "Running in GitHub Actions and Setup Env: $(setup_github_actions)" +[ ${GITHUB_ACTIONS:-"false"} = "true" ] && echo "Running in GitHub Actions and Setup Env: $(setup_github_actions)" || echo "Not running in GitHub Action." ; From 0fee63a8dabda8d31ff4c970b4b73434f522f8cf Mon Sep 17 00:00:00 2001 From: Bibo Hao Date: Tue, 21 Jul 2026 19:34:34 +0000 Subject: [PATCH 9/9] debian - bookworm --- .github/workflows/build-docker-db.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-docker-db.yml b/.github/workflows/build-docker-db.yml index c5d3cf3a..66410b62 100644 --- a/.github/workflows/build-docker-db.yml +++ b/.github/workflows/build-docker-db.yml @@ -37,7 +37,7 @@ jobs: - uses: actions/checkout@v7 - run: | source ./tool.sh && export PG_MAJOR=16 - build_image_no_tag postgres-${PG_MAJOR} latest docker_atom/atom.Dockerfile --build-arg "BASE_IMG=postgres:${PG_MAJOR}-trixie" + build_image_no_tag postgres-${PG_MAJOR} latest docker_atom/atom.Dockerfile --build-arg "BASE_IMG=postgres:${PG_MAJOR}-bookworm" export IMG_PREFIX_SRC="${IMG_PREFIX_DST}" build_image postgres-${PG_MAJOR} latest docker_base/base.Dockerfile --build-arg "BASE_IMG=postgres-${PG_MAJOR}" --build-arg "PYTHON_VERSION=3.13" push_image postgres- @@ -51,7 +51,7 @@ jobs: - uses: actions/checkout@v7 - run: | source ./tool.sh && export PG_MAJOR=17 - build_image_no_tag postgres-${PG_MAJOR} latest docker_atom/atom.Dockerfile --build-arg "BASE_IMG=postgres:${PG_MAJOR}-trixie" + build_image_no_tag postgres-${PG_MAJOR} latest docker_atom/atom.Dockerfile --build-arg "BASE_IMG=postgres:${PG_MAJOR}-bookworm" export IMG_PREFIX_SRC="${IMG_PREFIX_DST}" build_image postgres-${PG_MAJOR} latest docker_base/base.Dockerfile --build-arg "BASE_IMG=postgres-${PG_MAJOR}" --build-arg "PYTHON_VERSION=3.13" push_image postgres- @@ -65,7 +65,7 @@ jobs: - uses: actions/checkout@v7 - run: | source ./tool.sh && export PG_MAJOR=18 - build_image_no_tag postgres-${PG_MAJOR} latest docker_atom/atom.Dockerfile --build-arg "BASE_IMG=postgres:${PG_MAJOR}-trixie" + build_image_no_tag postgres-${PG_MAJOR} latest docker_atom/atom.Dockerfile --build-arg "BASE_IMG=postgres:${PG_MAJOR}-bookworm" export IMG_PREFIX_SRC="${IMG_PREFIX_DST}" build_image postgres-${PG_MAJOR} latest docker_base/base.Dockerfile --build-arg "BASE_IMG=postgres-${PG_MAJOR}" --build-arg "PYTHON_VERSION=3.13" push_image postgres-