Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
b9cd61e
Fix issue with SET LOCAL inside PL functions (6.x)
VoidZeroNull0 May 26, 2026
bfec700
CI behave gpexpand @skip, SQL dump changes 6.x (#453)
magf Jun 2, 2026
0c064bc
Rework unpickled exception test
Stolb27 Jun 9, 2026
3a5a00f
Stop modifying PyGreSQL layout
Stolb27 Jun 9, 2026
475213b
Add lsof as dependency for Greengage
Stolb27 Jun 9, 2026
ff4c3c5
Install isolation2 tests deps for plpython3
Stolb27 Jun 9, 2026
106ad51
Fix python coverage configs (#489)
ShapatinAA Jun 22, 2026
14cf0b7
Add pg_event_trigger to the list of master only tables (#483)
dkovalev1 Jun 22, 2026
729cec8
Fix handling path with trailing slashes (#498)
ShapatinAA Jun 23, 2026
9b97b1f
Build rpm-distro docker image 6.x (#436)
magf Jun 23, 2026
81440f0
Fix "Host key verification failed" error in tests (#511)
ShapatinAA Jun 30, 2026
e42c834
Add code coverage workflow (#464)
uaqq Jul 1, 2026
9c86b32
Bump Package CI to v44 for 6.x (#486)
magf Jul 3, 2026
45abc18
Create build rpm package 6.x (#439)
magf Jul 5, 2026
c45d3fa
Report tables and columns removed from Greengage 7 (6.x) (#514)
GirgerS Jul 10, 2026
d0d7565
Bump regression workflow 6.x (#527)
uaqq Jul 14, 2026
9472a25
Fix initialization of unlogged tables at recovery (#520)
red1452 Jul 15, 2026
08c5ec5
Fix wrong table data distribution after gpexpand (#532)
whitehawk Jul 17, 2026
88351ee
Implement 'rows out' in EXPLAIN ANALYZE (#524)
bandetto Jul 13, 2026
64dd42f
Add RHEL9 and RedOS8.0 support (#540)
litrovich88 Jul 22, 2026
2e10293
Merge branch 'sync2adb-conflicts' into sync2adb
Stolb27 Jul 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .abi-check/6.31.0/postgres.symbols.ignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ConfigureNamesBool_gp
46 changes: 40 additions & 6 deletions .github/workflows/greengage-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,15 @@ jobs:
- target_os: ubuntu
- target_os: ubuntu
target_os_version: "24.04"
- target_os: rockylinux
target_os_version: "8"
- target_os: rockylinux
target_os_version: "9"
permissions:
contents: read # Explicit for default behavior
packages: write # Required for GHCR access
actions: write # Required for artifact upload
uses: greengagedb/greengage-ci/.github/workflows/greengage-reusable-build.yml@v33
uses: greengagedb/greengage-ci/.github/workflows/greengage-reusable-build.yml@v42
with:
version: 6
target_os: ${{ matrix.target_os }}
Expand All @@ -48,7 +52,7 @@ jobs:
contents: read # Explicit for default behavior
packages: read # Explicit for GHCR access clarity
actions: write # Required for artifact upload
uses: greengagedb/greengage-ci/.github/workflows/greengage-reusable-tests-behave.yml@v28
uses: greengagedb/greengage-ci/.github/workflows/greengage-reusable-tests-behave.yml@v46
with:
version: 6
target_os: ${{ matrix.target_os }}
Expand All @@ -69,14 +73,36 @@ jobs:
contents: read # Explicit for default behavior
packages: read # Explicit for GHCR access clarity
actions: write # Required for artifact upload
uses: greengagedb/greengage-ci/.github/workflows/greengage-reusable-tests-regression.yml@v28
uses: greengagedb/greengage-ci/.github/workflows/greengage-reusable-tests-regression.yml@v49
with:
version: 6
target_os: ${{ matrix.target_os }}
target_os_version: ${{ matrix.target_os_version }}
secrets:
ghcr_token: ${{ secrets.GITHUB_TOKEN }}

coverage:
needs: [behave-tests, regression-tests]
if: github.event_name == 'pull_request' && needs.behave-tests.result == 'success' && needs.regression-tests.result == 'success'
strategy:
fail-fast: false
matrix:
include:
- target_os: ubuntu
target_os_version: "24.04"
permissions:
contents: read
packages: read
actions: write
uses: greengagedb/greengage-ci/.github/workflows/greengage-reusable-coverage.yml@v46
with:
version: 6
target_os: ${{ matrix.target_os }}
target_os_version: ${{ matrix.target_os_version }}
coverage_threshold: 75
secrets:
ghcr_token: ${{ secrets.GITHUB_TOKEN }}

orca-tests:
needs: build
if: github.event_name == 'pull_request' # Only for PR
Expand Down Expand Up @@ -140,25 +166,33 @@ jobs:
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}

# Rebuild prod-redy version without debug extensions and pack it to deb
# Rebuild prod-redy version without debug extensions and pack it to deb and rpm
package:
needs: build
strategy:
fail-fast: false
matrix:
include:
- target_os: ubuntu
test_install: true
- target_os: ubuntu
target_os_version: "24.04"
test_install: true
- target_os: rockylinux
target_os_version: "8"
test_install: false
- target_os: rockylinux
target_os_version: "9"
test_install: false
permissions:
contents: read # Explicit for default behavior
packages: write # Required for GHCR access
actions: write # Required for artifact upload
uses: greengagedb/greengage-ci/.github/workflows/greengage-reusable-package.yml@v38
uses: greengagedb/greengage-ci/.github/workflows/greengage-reusable-package.yml@v47
with:
version: 6
target_os: ${{ matrix.target_os }}
target_os_version: ${{ matrix.target_os_version }}
test_docker: ${{ matrix.target_os }}:${{ matrix.target_os_version || '22.04' }}
test_install: ${{ matrix.test_install }}
secrets:
ghcr_token: ${{ secrets.GITHUB_TOKEN }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,4 @@ compile_commands.json
/Release/
/CMakeLists.txt
/Package/
/RPM/
75 changes: 58 additions & 17 deletions README.Rhel-Rocky.bash
Original file line number Diff line number Diff line change
@@ -1,21 +1,55 @@
#!/bin/bash
# FILE: README.Rhel-Rocky.bash
# CONTEXT: Called from ci/Dockerfile.rockylinux for Greengage build
# PURPOSE: Install build dependencies, compile zstd static library,
# Install Python based on OS version

sudo dnf -y update
sudo dnf -y install epel-release
sudo dnf -y install 'dnf-command(config-manager)'
sudo dnf config-manager --set-enabled devel
sudo dnf makecache
set -euxo pipefail

sudo dnf -y install\
dnf -y install epel-release

# Detect OS version if not already set
export OS_VERSION="${OS_VERSION:-$(grep -oP '(?<= release )\d+' /etc/redhat-release)}"

perl_packages="perl-Env perl-ExtUtils-Embed perl-IPC-Run perl-JSON perl-Test-Base"
python_packages="python3 python3-devel python3-setuptools python3-pip python3-future"

case "$OS_VERSION" in
8)
dnf config-manager --set-enabled powertools
python_packages="python2 python2-devel python2-setuptools python2-pip $python_packages"
;;
9)
dnf config-manager --set-enabled crb
perl_packages="$perl_packages perl-Opcode perl-Test-Simple perl-Thread-Queue perl-devel"
;;
*)
echo "Unsupported Rocky Linux version: $OS_VERSION"
exit 1
;;
esac
# shellcheck disable=SC2086 # intentional: word splitting for package lists
dnf -y install \
apr-devel \
apr-util-devel \
autoconf \
bison \
bzip2-devel \
cmake3 \
cmake \
expat-devel \
flex \
gcc \
gcc-c++ \
git \
glibc-langpack-en \
gperf \
indent \
iproute \
iputils \
java-11-openjdk-devel \
jq \
krb5-devel \
krb5-server \
krb5-workstation \
libcurl-devel \
libevent-devel \
libicu \
Expand All @@ -29,18 +63,25 @@ sudo dnf -y install\
lsof \
net-tools \
openldap-devel \
openssl \
openssh-server \
openssl-devel \
pam-devel \
perl-Env \
perl-ExtUtils-Embed \
perl-IPC-Run \
perl-JSON \
perl-Test-Base \
procps-ng \
python2-devel \
python2-pip \
readline-devel \
rpm-build \
rsync \
snappy-devel \
sudo \
time \
unzip \
vim \
wget \
xerces-c-devel \
zlib-devel
zlib-devel \
$python_packages $perl_packages

# Build zstd with static library (not available as a package on Rocky)
curl -Ls https://github.com/facebook/zstd/releases/download/v1.4.4/zstd-1.4.4.tar.gz | tar -xzf -
make -j"$(nproc)" -C zstd-1.4.4
make install PREFIX=/usr/local -C zstd-1.4.4
rm -rf zstd-1.4.4
27 changes: 12 additions & 15 deletions README.linux.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,25 @@
```
Note: CentOS 7 is EOL — configure `yum` to use a valid repo (e.g., `vault.centos.org`) before installing dependencies.

## For RHEL/Rocky 8:
## For RHEL/Rocky (versions 8 or 9):

- Install dependencies using README.Rhel-Rocky.bash script:
```bash
./README.Rhel-Rocky.bash
sudo ./README.Rhel-Rocky.bash
```

- Build and install zstd with static library, e.g.:
```bash
cd /tmp
curl -LO https://github.com/facebook/zstd/releases/download/v1.4.4/zstd-1.4.4.tar.gz
tar -xf zstd-1.4.4.tar.gz
cd zstd-1.4.4
make -j$(nproc)
sudo make install PREFIX=/usr/local
```
- Create a symbolic link to Python in `/usr/bin` and install `future` v0.16:

- Create symbolic link to Python 2 in `/usr/bin`:
- Rocky 8:
```bash
sudo ln -s python2 /usr/bin/python
sudo python -m pip install --no-cache-dir future==0.16
```

```bash
sudo ln -s python2 /usr/bin/python
```
- Rocky 9:
```bash
sudo ln -s python3 /usr/bin/python
```

## For Ubuntu (versions 22.04 or 24.04):

Expand Down
79 changes: 79 additions & 0 deletions ci/Dockerfile.rockylinux
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# FILE: ci/Dockerfile.rockylinux
# CONTEXT: Build Greengage on Rocky Linux <OS_VERSION>
# PURPOSE: Multi-stage Docker build for Greengage database

ARG OS_VERSION=8

FROM rockylinux:${OS_VERSION} AS base
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
WORKDIR /home/gpadmin

ARG OS_VERSION
ENV OS_VERSION=${OS_VERSION}

COPY README.Rhel-Rocky.bash ./
COPY gpMgmt/bin/gpload_test/pytest_requirement.txt ./
RUN set -eux; \
./README.Rhel-Rocky.bash; \
rm README.Rhel-Rocky.bash; \
# Set Python as default based on OS version
case "$OS_VERSION" in \
8) \
ln -sf /usr/bin/python2 /usr/bin/python; \
PIP_PACKAGES='allure-behave==2.4.0 mock==3.0.5 psi==0.3b3 future==0.16'; \
;; \
9) \
ln -sf /usr/bin/python3 /usr/bin/python; \
python -m ensurepip --upgrade; \
PIP_PACKAGES='allure-behave==2.4.0'; \
;; \
*) \
echo "Unsupported Rocky Linux version: $OS_VERSION"; \
exit 1; \
;; \
esac; \
# Install pg_bsd_indent used by pgindent utility
wget --progress=dot:giga --no-hsts https://ftp.postgresql.org/pub/dev/pg_bsd_indent-1.3.tar.gz -O - | tar -xzf -; \
make install -C pg_bsd_indent; \
rm -r pg_bsd_indent; \
# To run sshd directly, but not using service
mkdir -p /run/sshd; \
# Alter precedence in favor of IPv4 during resolving
echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf; \
# Upgrade pip to support current package versions
python -m pip install --no-cache-dir --upgrade pip; \
# Install allure-behave for behave tests
python -m pip install --no-cache-dir $PIP_PACKAGES; \
# Cleanup to reduce image size
dnf clean all; \
rm -rf /tmp/* /var/tmp/* /var/cache/man/

ENV LANG=en_US.UTF-8
ENV CONFIGURE_FLAGS="--enable-debug-extensions --with-gssapi --enable-cassert --enable-debug --enable-depend"

FROM base AS build

COPY . gpdb_src

RUN mkdir bin_gpdb

ENV TARGET_OS=rockylinux \
OUTPUT_ARTIFACT_DIR=bin_gpdb

# Use python3 to compile into GPDB's plpython3u
# Set PYTHON3 only on Rocky 8 to avoid compiling plpython3 twice
# On Rocky 9, Python 3 is the default
RUN test "$OS_VERSION" -eq 8 && export PYTHON3=python3; \
gpdb_src/concourse/scripts/compile_gpdb.bash

FROM base AS code
COPY . gpdb_src
RUN rm -rf gpdb_src/.git/

FROM base AS test

COPY --from=code /home/gpadmin/gpdb_src gpdb_src
COPY --from=build /home/gpadmin/bin_gpdb bin_gpdb
COPY --from=build /home/gpadmin/gpdb_src/VERSION gpdb_src

RUN make -C gpdb_src/src/tools/entab install clean
13 changes: 9 additions & 4 deletions ci/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,17 @@ To build an image based on Ubuntu 24.04, specify the version in build args:
docker build -t gpdb6_regress:latest --build-arg OS_VERSION=24.04 -f ci/Dockerfile.ubuntu .
```

There are two additional options in [Dockerfile](./Dockerfile) to passthrough urls for [sigar](https://github.com/hyperic/sigar) packages:
To build a Rocky Linux 8 image:

* `--build-arg sigar=https://path_to_sigar.rpm` for package with sigar library
* `--build-arg sigar_headers=https://path_to_sigar_headers.rpm` for package with sigar headers files
```bash
docker build -t gpdb6_rockylinux8:latest -f ci/Dockerfile.rockylinux .
```

To build a Rocky Linux 9 image:

These options may be useful to build image on different platforms.
```bash
docker build -t gpdb6_rockylinux9:latest --build-arg OS_VERSION=9 -f ci/Dockerfile.rockylinux .
```

CI pushes docker images to the internal registry for each branch. We can pull it with usage of:

Expand Down
1 change: 1 addition & 0 deletions ci/scripts/run_behave_tests.bash
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ run_feature() {
-e FEATURE="$feature" -e PROJECT="$project" \
cdw bash -eux <<'EOF'
set -ex
source /usr/local/greengage-db-devel/greengage_path.sh
cd /tmp/coverage-data

if [ "$(ls "$PROJECT"-coverage-data/ | wc -l)" -gt 0 ]; then
Expand Down
14 changes: 6 additions & 8 deletions concourse/scripts/common.bash
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,12 @@ function set_env() {
}

function os_id() {
if [[ ! -f "/etc/altlinux-release" ]] && [[ -f "/etc/redhat-release" ]]; then
echo "centos"
else
echo "$(
. /etc/os-release
echo "${ID}"
)"
if [[ -f "/etc/os-release" ]]; then
. /etc/os-release
elif [[ -f "/etc/redhat-release" ]]; then
ID="centos"
fi
echo "${ID}"
}

function os_version() {
Expand All @@ -39,7 +37,7 @@ function os_version() {
function build_arch() {
local id=$(os_id)
local version=$(os_version)
# BLD_ARCH expects rhel{6,7,8}_x86_64 || rocky8_x86_64 || sles12_x86_64 || ubuntu20.04_x86_64
# BLD_ARCH expects rhel{6,7,8}_x86_64 || rocky8_x86_64 || rocky9_x86_64 || sles12_x86_64 || ubuntu20.04_x86_64
# for oel7 and oel8 platform, the id will return centos
case ${id} in
sles | rocky) version=$(os_version | cut -d. -f1) ;;
Expand Down
4 changes: 2 additions & 2 deletions concourse/scripts/compile_gpdb.bash
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,10 @@ function include_dependencies() {
vendored_headers=(zstd*.h uv.h uv )
pkgconfigs=(libzstd.pc libuv.pc quicklz.pc)
# rocky9/oel9/rhel9 won't vendor zstd because of rsync on these platform does not work libzstd 1.3.7
if [[ ${BLD_ARCH} == "rhel9"* ]]; then
if [[ ${BLD_ARCH} == "rhel9"* || ${BLD_ARCH} == "rocky9"* ]]; then
vendored_libs=(libquicklz.so{,.1,.1.5.0} libuv.so{,.1,.1.0.0} libxerces-c.so)
# rocky8/oel8/rhel8 needs zstd 1.4.4 to be vendor because these platform support system libzstd 1.4.4
elif [[ ${BLD_ARCH} == "rhel8"* ]]; then
elif [[ ${BLD_ARCH} == "rhel8"* || ${BLD_ARCH} == "rocky8"* ]]; then
vendored_libs=(libquicklz.so{,.1,.1.5.0} libzstd.so{,.1,.1.4.4} libuv.so{,.1,.1.0.0} libxerces-c.so)
else
vendored_libs=(libquicklz.so{,.1,.1.5.0} libzstd.so{,.1,.1.3.7} libuv.so{,.1,.1.0.0} libxerces-c.so)
Expand Down
Loading
Loading