This is an automated email from the ASF dual-hosted git repository.
djwang pushed a commit to branch cbdb-postgres-merge
in repository https://gitbox.apache.org/repos/asf/cloudberry.git
The following commit(s) were added to refs/heads/cbdb-postgres-merge by this
push:
new 36fd995f631 CI: add basic CI for PG16 merge
36fd995f631 is described below
commit 36fd995f63171aba538f516a3da13509c04ca318
Author: Dianjin Wang <[email protected]>
AuthorDate: Tue Dec 9 11:07:00 2025 +0800
CI: add basic CI for PG16 merge
---
.github/workflows/pg16-merge-validation.yml | 767 ++++++++++++++++++++++++++++
1 file changed, 767 insertions(+)
diff --git a/.github/workflows/pg16-merge-validation.yml
b/.github/workflows/pg16-merge-validation.yml
new file mode 100644
index 00000000000..62f88c2b15b
--- /dev/null
+++ b/.github/workflows/pg16-merge-validation.yml
@@ -0,0 +1,767 @@
+# --------------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to You under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of the
+# License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# permissions and limitations under the License.
+#
+# --------------------------------------------------------------------
+# GitHub Actions Workflow: PostgreSQL 16 Merge Validation
+# --------------------------------------------------------------------
+# Description:
+#
+# This workflow validates the cbdb-postgres-merge branch, which upgrades
+# the PostgreSQL kernel from version 14 to version 16. It builds the
+# codebase, creates a gpdemo cluster, and performs basic validation to
+# ensure the upgrade is functional and prevent regressions.
+#
+# Workflow Overview:
+# 1. **Build and Test Job**:
+# - Configures and builds Apache Cloudberry with PG16 kernel.
+# - Installs required dependencies (ICU, Xerces-C).
+# - Creates a gpdemo cluster for validation.
+# - Runs basic smoke tests to verify cluster functionality.
+# - **Key Artifacts**: Build logs, cluster configuration, test results.
+#
+# 2. **Report Job**:
+# - Aggregates job results into a final report.
+# - Sends failure notifications if any step fails.
+#
+# Triggers:
+# - Push to `cbdb-postgres-merge` branch.
+# - Pull requests to `cbdb-postgres-merge` branch.
+# - Manual workflow dispatch.
+#
+# Container Images:
+# - **Build/Test**: `apache/incubator-cloudberry:cbdb-build-rocky9-latest`
+#
+# Artifacts:
+# - Build Logs (retention: ${{ env.LOG_RETENTION_DAYS }} days).
+# - Cluster Logs (retention: ${{ env.LOG_RETENTION_DAYS }} days).
+# - Test Results (retention: ${{ env.LOG_RETENTION_DAYS }} days).
+#
+# Notes:
+# - This workflow is specifically designed for the PG16 upgrade validation.
+# - Many extensions are not yet supported and will be disabled during build.
+# - The focus is on ensuring the core database functionality works correctly.
+# --------------------------------------------------------------------
+
+name: PostgreSQL 16 Merge Validation
+
+on:
+ push:
+ branches: [cbdb-postgres-merge]
+ pull_request:
+ branches: [cbdb-postgres-merge]
+ types: [opened, synchronize, reopened, edited]
+ workflow_dispatch:
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: false
+
+permissions:
+ contents: read
+ packages: read
+ actions: write
+ checks: read
+ pull-requests: read
+
+env:
+ LOG_RETENTION_DAYS: 7
+ INSTALL_PREFIX: /usr/local/cloudberry-db
+
+jobs:
+
+ ## ======================================================================
+ ## Job: prepare-test-matrix
+ ## ======================================================================
+
+ prepare-test-matrix:
+ runs-on: ubuntu-22.04
+ outputs:
+ test-matrix: ${{ steps.set-matrix.outputs.matrix }}
+ should_run: ${{ steps.set-matrix.outputs.should_run }}
+
+ steps:
+ - name: Generate Test Matrix
+ id: set-matrix
+ run: |
+ echo "=== PG16 Test Matrix Preparation ==="
+
+ # Define defaults for test configurations
+ DEFAULT_NUM_PRIMARY_MIRROR_PAIRS=3
+ DEFAULT_ENABLE_CGROUPS=false
+ DEFAULT_ENABLE_CORE_CHECK=true
+ DEFAULT_PG_SETTINGS_OPTIMIZER=""
+
+ # Define test configurations for PG16 merge validation
+ # Tests are currently disabled as installcheck support is being fixed
+ # Uncomment and add tests as features become available
+ ALL_TESTS='{
+ "include": [
+ ]
+ }'
+
+ # Tests to be added as PG16 support improves:
+ # - ic-good-opt-off: Basic installcheck with optimizer off
+ # {"test":"ic-good-opt-off",
+ # "make_configs":["src/test/regress:installcheck-good"],
+ # "pg_settings":{"optimizer":"off"}
+ # }
+ #
+ # - ic-good-opt-on: Basic installcheck with optimizer on (requires
ORCA)
+ # {"test":"ic-good-opt-on",
+ # "make_configs":["src/test/regress:installcheck-good"],
+ # "pg_settings":{"optimizer":"on"}
+ # }
+ #
+ # - ic-isolation2: Isolation2 tests
+ # {"test":"ic-isolation2",
+ # "make_configs":["src/test/isolation2:installcheck-isolation2"]
+ # }
+ #
+ # - ic-contrib: Contrib module tests
+ # {"test":"ic-contrib",
+ # "make_configs":["contrib/auto_explain:installcheck",
+ # "contrib/citext:installcheck"]
+ # }
+ #
+ # - ic-gpcontrib: GPContrib module tests
+ # {"test":"ic-gpcontrib",
+ # "make_configs":["gpcontrib/orafce:installcheck",
+ # "gpcontrib/gp_toolkit:installcheck"]
+ # }
+
+ # Function to apply defaults to test configurations
+ apply_defaults() {
+ echo "$1" | jq --arg npm "$DEFAULT_NUM_PRIMARY_MIRROR_PAIRS" \
+ --argjson ec "$DEFAULT_ENABLE_CGROUPS" \
+ --argjson ecc "$DEFAULT_ENABLE_CORE_CHECK" \
+ --arg opt "$DEFAULT_PG_SETTINGS_OPTIMIZER" \
+ 'def get_defaults:
+ {
+ num_primary_mirror_pairs: ($npm|tonumber),
+ enable_cgroups: $ec,
+ enable_core_check: $ecc,
+ pg_settings: {
+ optimizer: $opt
+ }
+ };
+ get_defaults * .'
+ }
+
+ # Build result JSON with defaults applied
+ RESULT='{"include":['
+ FIRST=true
+
+ for TEST_CONFIG in $(echo "$ALL_TESTS" | jq -c '.include[]'); do
+ FILTERED_WITH_DEFAULTS=$(apply_defaults "$TEST_CONFIG")
+ if [[ "$FIRST" == true ]]; then
+ FIRST=false
+ else
+ RESULT="${RESULT},"
+ fi
+ RESULT="${RESULT}${FILTERED_WITH_DEFAULTS}"
+ done
+
+ RESULT="${RESULT}]}"
+
+ # Output the matrix for GitHub Actions
+ echo "Final test matrix configuration:"
+ echo "$RESULT" | jq .
+
+ # Set output
+ {
+ echo "matrix<<EOF"
+ echo "$RESULT"
+ echo "EOF"
+
+ # Check if matrix is empty
+ TEST_COUNT=$(echo "$RESULT" | jq '.include | length')
+ if [ "$TEST_COUNT" -gt 0 ]; then
+ echo "should_run=true"
+ else
+ echo "should_run=false"
+ fi
+ } >> "$GITHUB_OUTPUT"
+
+ echo "=== Test Matrix Preparation Complete ==="
+
+ ## ======================================================================
+ ## Job: build
+ ## ======================================================================
+
+ build:
+ name: Build PG16 for Cloudberry
+ env:
+ JOB_TYPE: build
+ needs: [prepare-test-matrix]
+ runs-on: ubuntu-22.04
+ timeout-minutes: 180
+ outputs:
+ build_timestamp: ${{ steps.set_timestamp.outputs.timestamp }}
+
+ container:
+ image: apache/incubator-cloudberry:cbdb-build-rocky9-latest
+ options: >-
+ --privileged
+ --user root
+ -h cdw
+ --shm-size=2gb
+
+ steps:
+ - name: Set build timestamp
+ id: set_timestamp
+ run: |
+ timestamp=$(date +'%Y%m%d_%H%M%S')
+ echo "timestamp=$timestamp" | tee -a "$GITHUB_OUTPUT"
+ echo "BUILD_TIMESTAMP=$timestamp" | tee -a "$GITHUB_ENV"
+
+ - name: Checkout Apache Cloudberry (cbdb-postgres-merge branch)
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 1
+ submodules: true
+
+ - name: Cloudberry Environment Initialization
+ env:
+ LOGS_DIR: pg16-build-logs
+ run: |
+ set -eo pipefail
+
+ # Initialize system
+ if ! su - gpadmin -c "/tmp/init_system.sh"; then
+ echo "::error::Container initialization failed"
+ exit 1
+ fi
+
+ # Setup logging directories
+ mkdir -p "${LOGS_DIR}/details"
+ chown -R gpadmin:gpadmin .
+ chmod -R 755 .
+ chmod 777 "${LOGS_DIR}"
+
+ # Clean up disk space
+ df -kh /
+ rm -rf /__t/*
+ df -kh /
+
+ {
+ echo "=== Environment Information ==="
+ uname -a
+ df -h
+ free -h
+ env
+ } | tee -a "${LOGS_DIR}/details/environment.log"
+
+ echo "SRC_DIR=${GITHUB_WORKSPACE}" | tee -a "$GITHUB_ENV"
+
+ - name: Generate Build Job Summary Start
+ run: |
+ {
+ echo "# PostgreSQL 16 Merge Validation"
+ echo "## Environment"
+ echo "- Start Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')"
+ echo "- OS Version: $(cat /etc/redhat-release)"
+ echo "- GCC Version: $(gcc --version | head -n1)"
+ echo ""
+ echo "## Build Configuration"
+ echo "- Install Prefix: ${INSTALL_PREFIX}"
+ echo "- Port: 5432"
+ echo "- Debug: Enabled (O0, g3, cassert)"
+ echo "- Disabled Features: ORCA, GPCloud, GPFdist, zstd"
+ } >> "$GITHUB_STEP_SUMMARY"
+
+ - name: Prepare Installation Directory
+ run: |
+ set -eo pipefail
+
+ # Clean and prepare installation directory
+ sudo rm -rf ${INSTALL_PREFIX}
+ sudo chmod a+w /usr/local
+ mkdir -p ${INSTALL_PREFIX}/lib
+
+ # Copy Xerces-C libraries
+ sudo cp -v /usr/local/xerces-c/lib/libxerces-c.so \
+ /usr/local/xerces-c/lib/libxerces-c-3.*.so \
+ ${INSTALL_PREFIX}/lib
+
+ sudo chown -R gpadmin:gpadmin ${INSTALL_PREFIX}
+
+ echo "Installation directory prepared successfully"
+
+ - name: Install ICU Development Libraries
+ run: |
+ set -eo pipefail
+
+ echo "Installing ICU development libraries..."
+ sudo dnf install -y libicu-devel
+
+ echo "ICU libraries installed successfully"
+ rpm -qa | grep libicu
+
+ - name: Configure PG16 for Cloudberry
+ env:
+ SRC_DIR: ${{ github.workspace }}
+ run: |
+ set -eo pipefail
+
+ {
+ echo "=== Configure Log ==="
+ echo "Timestamp: $(date -u)"
+ echo "Configure options:"
+ echo " --prefix=${INSTALL_PREFIX}"
+ echo " --with-pgport=5432"
+ echo " --enable-cassert"
+ echo " --enable-debug-extensions"
+ echo " --with-perl --with-python --with-libxml --with-openssl"
+ echo " --without-zstd"
+ echo " --disable-gpcloud --disable-orca --disable-gpfdist"
+ echo " --with-pythonsrc-ext"
+ echo " --with-gssapi"
+ echo ""
+
+ # Run configure as gpadmin
+ if ! su - gpadmin -c "
+ cd ${SRC_DIR}
+ export LD_LIBRARY_PATH=${INSTALL_PREFIX}/lib:\${LD_LIBRARY_PATH}
+ CFLAGS='-O0 -g3' ./configure \
+ --prefix=${INSTALL_PREFIX} \
+ --with-pgport=5432 \
+ --enable-cassert \
+ --with-perl \
+ --with-python \
+ --with-libxml \
+ --with-openssl \
+ --without-zstd \
+ --enable-debug-extensions \
+ --disable-gpcloud \
+ --disable-orca \
+ --disable-gpfdist \
+ --with-pythonsrc-ext \
+ --with-gssapi
+ "; then
+ echo "::error::Configure failed"
+ exit 1
+ fi
+
+ echo "Configure completed successfully"
+ } 2>&1 | tee -a pg16-build-logs/details/configure.log
+
+ - name: Build and Install Apache Cloudberry
+ env:
+ SRC_DIR: ${{ github.workspace }}
+ run: |
+ set -eo pipefail
+
+ {
+ echo "=== Build and Install Log ==="
+ echo "Timestamp: $(date -u)"
+ echo "Starting build and installation (non-parallel)..."
+
+ # Build and install as gpadmin (non-parallel to avoid issues)
+ if ! time su - gpadmin -c "
+ cd ${SRC_DIR}
+ export LD_LIBRARY_PATH=${INSTALL_PREFIX}/lib:\${LD_LIBRARY_PATH}
+ make
+ make install
+ "; then
+ echo "::error::Build and installation failed"
+ exit 1
+ fi
+
+ echo "Build and installation completed successfully"
+ } 2>&1 | tee -a pg16-build-logs/details/build-install.log
+
+ - name: Verify Build Artifacts
+ run: |
+ set -eo pipefail
+
+ {
+ echo "=== Build Verification ==="
+ echo "Timestamp: $(date -u)"
+
+ # Verify postgres binary exists and is executable
+ if [ ! -x "${INSTALL_PREFIX}/bin/postgres" ]; then
+ echo "::error::postgres binary not found or not executable"
+ exit 1
+ fi
+
+ # Check versions
+ echo "PostgreSQL version:"
+ su - gpadmin -c "${INSTALL_PREFIX}/bin/postgres --version"
+
+ echo ""
+ echo "Cloudberry version:"
+ su - gpadmin -c "${INSTALL_PREFIX}/bin/postgres --gp-version"
+
+ echo ""
+ echo "Library dependencies:"
+ ldd ${INSTALL_PREFIX}/bin/postgres
+
+ echo ""
+ echo "Build artifacts verified successfully"
+ } 2>&1 | tee -a pg16-build-logs/details/verification.log
+
+ - name: Create Build Artifact
+ run: |
+ set -eo pipefail
+ echo "Creating build artifact tarball..."
+ echo "Listing /usr/local:"
+ ls -la /usr/local
+
+ if [ ! -d "/usr/local/cloudberry-db" ]; then
+ echo "::error::/usr/local/cloudberry-db does not exist!"
+ exit 1
+ fi
+
+ # Create tarball of the installation directory
+ # We use -C /usr/local to avoid including full path structure
+ tar -czf cloudberry-pg16.tar.gz -C /usr/local cloudberry-db
+
+ echo "Build artifact created: cloudberry-pg16.tar.gz"
+ ls -lh cloudberry-pg16.tar.gz
+
+ - name: Upload Build Artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: cloudberry-pg16-binary
+ path: cloudberry-pg16.tar.gz
+ retention-days: 1
+
+ - name: Create gpdemo Cluster
+ env:
+ SRC_DIR: ${{ github.workspace }}
+ run: |
+ set -eo pipefail
+
+ {
+ echo "=== gpdemo Cluster Creation ==="
+ echo "Timestamp: $(date -u)"
+ echo "Creating demo cluster..."
+
+ # Source greenplum_path and create demo cluster
+ if ! su - gpadmin -c "
+ cd ${SRC_DIR}
+ source ${INSTALL_PREFIX}/greenplum_path.sh
+ make create-demo-cluster
+ "; then
+ echo "::error::Demo cluster creation failed"
+ exit 1
+ fi
+
+ echo "Demo cluster created successfully"
+ } 2>&1 | tee -a pg16-build-logs/details/cluster-creation.log
+
+ - name: Generate Build Job Summary End
+ if: always()
+ run: |
+ {
+ echo ""
+ echo "## Build Results"
+ echo "- End Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')"
+ echo "- Status: ${{ job.status }}"
+ } >> "$GITHUB_STEP_SUMMARY"
+
+ - name: Upload Build and Test Logs
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: pg16-build-logs-${{ env.BUILD_TIMESTAMP }}
+ path: |
+ pg16-build-logs/
+ retention-days: ${{ env.LOG_RETENTION_DAYS }}
+
+ ## ======================================================================
+ ## Job: test
+ ## ======================================================================
+
+ test:
+ name: ${{ matrix.test }}
+ needs: [build, prepare-test-matrix]
+ if: needs.prepare-test-matrix.outputs.should_run == 'true'
+ runs-on: ubuntu-22.04
+ timeout-minutes: 120
+ strategy:
+ fail-fast: false # Continue with other tests if one fails
+ matrix: ${{ fromJson(needs.prepare-test-matrix.outputs.test-matrix) }}
+
+ container:
+ image: apache/incubator-cloudberry:cbdb-build-rocky9-latest
+ options: >-
+ --privileged
+ --user root
+ --hostname cdw
+ --shm-size=2gb
+ --ulimit core=-1
+
+ steps:
+ - name: Checkout Apache Cloudberry (cbdb-postgres-merge branch)
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 1
+ submodules: true
+
+ - name: Cloudberry Environment Initialization
+ env:
+ LOGS_DIR: test-logs-${{ matrix.test }}
+ run: |
+ set -eo pipefail
+
+ # Initialize system
+ if ! su - gpadmin -c "/tmp/init_system.sh"; then
+ echo "::error::Container initialization failed"
+ exit 1
+ fi
+
+ # Setup logging directories
+ mkdir -p "${LOGS_DIR}/details"
+ chown -R gpadmin:gpadmin .
+ chmod -R 755 .
+ chmod 777 "${LOGS_DIR}"
+
+ # Clean up disk space
+ df -kh /
+ rm -rf /__t/*
+ df -kh /
+
+ # Log system information
+ df -h | tee -a "${LOGS_DIR}/details/disk-usage.log"
+ free -h | tee -a "${LOGS_DIR}/details/memory-usage.log"
+
+ {
+ echo "=== Environment Information ==="
+ uname -a
+ df -h
+ free -h
+ env
+ } | tee -a "${LOGS_DIR}/details/environment.log"
+
+ echo "SRC_DIR=${GITHUB_WORKSPACE}" | tee -a "$GITHUB_ENV"
+ echo "LOGS_DIR=${LOGS_DIR}" | tee -a "$GITHUB_ENV"
+
+ - name: "Generate Test Job Summary Start: ${{ matrix.test }}"
+ run: |
+ {
+ echo "# Test: ${{ matrix.test }}"
+ echo "## Configuration"
+ echo "- Test Name: ${{ matrix.test }}"
+ echo "- Start Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')"
+ echo "- Optimizer: ${{ matrix.pg_settings.optimizer || 'default'
}}"
+ echo "- Num Segments: ${{ matrix.num_primary_mirror_pairs }}"
+ echo ""
+ } >> "$GITHUB_STEP_SUMMARY"
+
+ - name: Prepare Installation Directory
+ run: |
+ set -eo pipefail
+
+ # Clean and prepare installation directory
+ sudo rm -rf ${INSTALL_PREFIX}
+ sudo chmod a+w /usr/local
+ mkdir -p ${INSTALL_PREFIX}/lib
+
+ # Copy Xerces-C libraries
+ sudo cp -v /usr/local/xerces-c/lib/libxerces-c.so \
+ /usr/local/xerces-c/lib/libxerces-c-3.*.so \
+ ${INSTALL_PREFIX}/lib
+
+ sudo chown -R gpadmin:gpadmin ${INSTALL_PREFIX}
+
+ - name: Download Build Artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: cloudberry-pg16-binary
+ path: .
+
+ - name: Install Cloudberry from Artifact
+ run: |
+ set -eo pipefail
+ echo "Installing Cloudberry from artifact..."
+
+ # Extract tarball to /usr/local
+ sudo tar -xzf cloudberry-pg16.tar.gz -C /usr/local
+
+ # Fix permissions
+ sudo chown -R gpadmin:gpadmin ${INSTALL_PREFIX}
+
+ echo "Cloudberry installed successfully"
+ ${INSTALL_PREFIX}/bin/postgres --version
+
+ - name: Configure PG16 for Cloudberry
+ env:
+ SRC_DIR: ${{ github.workspace }}
+ run: |
+ set -eo pipefail
+
+ # Run configure as gpadmin to generate Makefiles for tests
+ # We don't need to build, just configure
+ su - gpadmin -c "
+ cd ${SRC_DIR}
+ export LD_LIBRARY_PATH=${INSTALL_PREFIX}/lib:\${LD_LIBRARY_PATH}
+ CFLAGS='-O0 -g3' ./configure \
+ --prefix=${INSTALL_PREFIX} \
+ --with-pgport=5432 \
+ --enable-cassert \
+ --with-perl \
+ --with-python \
+ --with-libxml \
+ --with-openssl \
+ --without-zstd \
+ --enable-debug-extensions \
+ --disable-gpcloud \
+ --disable-orca \
+ --disable-gpfdist \
+ --with-pythonsrc-ext \
+ --with-gssapi
+ " 2>&1 | tee -a ${LOGS_DIR}/details/configure.log
+
+ - name: Create gpdemo Cluster
+ env:
+ SRC_DIR: ${{ github.workspace }}
+ run: |
+ set -eo pipefail
+
+ # Create demo cluster with specified number of segments
+ su - gpadmin -c "
+ source ${INSTALL_PREFIX}/greenplum_path.sh
+ NUM_PRIMARY_MIRROR_PAIRS=${{ matrix.num_primary_mirror_pairs }}
make create-demo-cluster
+ " 2>&1 | tee -a ${LOGS_DIR}/details/cluster-creation.log
+
+ - name: Configure PostgreSQL Settings
+ env:
+ SRC_DIR: ${{ github.workspace }}
+ run: |
+ set -eo pipefail
+
+ # Apply PostgreSQL settings from matrix configuration
+ su - gpadmin -c "
+ source ${INSTALL_PREFIX}/greenplum_path.sh
+ source ${SRC_DIR}/gpAux/gpdemo/gpdemo-env.sh
+
+ # Set optimizer if specified
+ OPTIMIZER='${{ matrix.pg_settings.optimizer }}'
+ if [ -n \"\$OPTIMIZER\" ]; then
+ echo \"Setting optimizer to: \$OPTIMIZER\"
+ gpconfig -c optimizer -v \$OPTIMIZER
+ gpstop -u
+ fi
+ " 2>&1 | tee -a ${LOGS_DIR}/details/pg-settings.log
+
+ - name: Run Tests
+ env:
+ SRC_DIR: ${{ github.workspace }}
+ run: |
+ set -eo pipefail
+
+ # Run each make target from the test configuration
+ MAKE_CONFIGS='${{ toJson(matrix.make_configs) }}'
+
+ su - gpadmin -c "
+ source ${INSTALL_PREFIX}/greenplum_path.sh
+ source ${SRC_DIR}/gpAux/gpdemo/gpdemo-env.sh
+
+ echo '=== Running Tests for ${{ matrix.test }} ==='
+ echo 'Make configurations: ${MAKE_CONFIGS}'
+
+ # Parse and run each make config
+ for config in \$(echo '${MAKE_CONFIGS}' | jq -r '.[]'); do
+ DIR=\$(echo \$config | cut -d: -f1)
+ TARGET=\$(echo \$config | cut -d: -f2)
+
+ echo \"\"
+ echo \"Running: make -C \$DIR \$TARGET\"
+ echo \"\"
+
+ if ! make -C \$DIR \$TARGET; then
+ echo \"::error::Test failed: \$DIR:\$TARGET\"
+ exit 1
+ fi
+ done
+
+ echo \"\"
+ echo \"All tests completed successfully\"
+ " 2>&1 | tee -a ${LOGS_DIR}/details/test-run.log
+
+ - name: Collect Test Results
+ if: always()
+ env:
+ SRC_DIR: ${{ github.workspace }}
+ run: |
+ set -eo pipefail
+
+ # Collect regression diffs and test results
+ mkdir -p ${LOGS_DIR}/regression-results
+
+ # Find and copy all regression.diffs files
+ find ${SRC_DIR} -name "regression.diffs" -exec cp --parents {}
${LOGS_DIR}/regression-results/ \; || true
+
+ # Find and copy all regression.out files
+ find ${SRC_DIR} -name "regression.out" -exec cp --parents {}
${LOGS_DIR}/regression-results/ \; || true
+
+ echo "Test results collected"
+
+ - name: "Generate Test Job Summary End: ${{ matrix.test }}"
+ if: always()
+ run: |
+ {
+ echo ""
+ echo "## Test Results"
+ echo "- End Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')"
+ echo "- Status: ${{ job.status }}"
+ } >> "$GITHUB_STEP_SUMMARY"
+
+ - name: Upload Test Logs
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: test-logs-${{ matrix.test }}-${{
needs.build.outputs.build_timestamp }}
+ path: |
+ test-logs-${{ matrix.test }}/
+ retention-days: ${{ env.LOG_RETENTION_DAYS }}
+
+ ## ======================================================================
+ ## Job: report
+ ## ======================================================================
+
+ report:
+ name: Report Results
+ needs: [build]
+ runs-on: ubuntu-22.04
+ if: always()
+
+ steps:
+ - name: Generate Final Report
+ run: |
+ {
+ echo "# PostgreSQL 16 Merge Validation Report"
+ echo ""
+ echo "## Job Status Summary"
+ echo "- Build: ${{ needs.build.result }}"
+ echo ""
+ echo "**Note**: Test matrix is currently empty as installcheck
support is being fixed."
+ echo "Tests will be added incrementally as features become
available."
+ echo ""
+
+ if [ "${{ needs.build.result }}" == "success" ]; then
+ echo "✅ Build completed successfully!"
+ echo ""
+ echo "The cbdb-postgres-merge branch builds correctly and gpdemo
cluster can be created."
+ else
+ echo "❌ Build failed!"
+ echo ""
+ echo "Please check the build logs for details."
+ fi
+ } >> "$GITHUB_STEP_SUMMARY"
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]