This is an automated email from the ASF dual-hosted git repository.

espino pushed a commit to branch build-devel
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit c983819047e40b971170367df9fcf0ee027b1fed
Author: Ed Espino <[email protected]>
AuthorDate: Sun Nov 17 21:30:24 2024 -0800

    ci: add core Apache Cloudberry (incubating) build and test workflow
    
    Introduces foundational GitHub Actions workflow for Apache
    Cloudberry (incubating) CI:
    
    - Multi-stage build pipeline with skip detection
    - Rocky Linux 9 containerized build environment
    - RPM packaging and source tarball generation
    - Installation verification
    - Test matrix for core regression tests
      (subset starting point)
    - Detailed test result parsing and reporting
    - Comprehensive artifact management
    
    The workflow provides:
    - Clean build environment for each run
    - Consistent test execution framework
    - Automated installation testing
    - Test result aggregation
    - Clear job dependencies and progression
    - Flexible CI skip mechanisms
    
    Due to inconsistent test runs, disable the following from
    greenplum_schedule:
    - cbdb_parallel
    - instr_in_shmem_verify
    
    This commit establishes the initial CI pipeline for Apache Cloudberry
    (incubating) with future test matrix expansion planned.
---
 .github/pull_request_template.md         |   64 +-
 .github/workflows/build-cloudberry.yml   | 1125 ++++++++++++++++++++++++++++++
 .github/workflows/build.yml              |  306 --------
 .github/workflows/build_external_fts.yml |   82 ---
 src/test/regress/greenplum_schedule      |    4 +-
 5 files changed, 1165 insertions(+), 416 deletions(-)

diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 5383da8d4d..a95ad16153 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -1,38 +1,50 @@
-<!--Thank you for contributing!-->
-<!--In case of an existing issue or discussions, please reference it-->
-fix #ISSUE_Number
-<!--Remove this section if no corresponding issue.-->
+<!-- Thank you for your contribution to Apache Cloudberry (incubating)! -->
 
----
-
-### Change logs
+Fixes #ISSUE_Number
 
-_Describe your change clearly, including what problem is being solved or what 
feature is being added._
+### What does this PR do?
+<!-- Brief overview of the changes, including any major features or fixes -->
 
-_If it has some breaking backward or forward compatibility, please clary._
+### Type of Change
+- [ ] Bug fix (non-breaking change)
+- [ ] New feature (non-breaking change)
+- [ ] Breaking change (fix or feature with breaking changes)
+- [ ] Documentation update
 
-### Why are the changes needed?
+### Breaking Changes
+<!-- Remove if not applicable. If yes, explain impact and migration path -->
 
-_Describe why the changes are necessary._
+### Test Plan
+<!-- How did you test these changes? -->
+- [ ] Unit tests added/updated
+- [ ] Integration tests added/updated
+- [ ] Passed `make installcheck`
+- [ ] Passed `make -C src/test installcheck-cbdb-parallel`
 
-### Does this PR introduce any user-facing change?
+### Impact
+<!-- Remove sections that don't apply -->
+**Performance:**
+<!-- Any performance implications? -->
 
-_If yes, please clarify the previous behavior and the change this PR proposes._
+**User-facing changes:**
+<!-- Any changes visible to users? -->
 
-### How was this patch tested?
+**Dependencies:**
+<!-- New dependencies or version changes? -->
 
-_Please detail how the changes were tested, including manual tests and any 
relevant unit or integration tests._
+### Checklist
+- [ ] Signed CLA (first-time contributors only)
+- [ ] Followed [contribution 
guide](https://cloudberry.apache.org/contribute/code)
+- [ ] Added/updated documentation
+- [ ] Reviewed code for security implications
+- [ ] Requested review from [cloudberry 
committers](https://github.com/orgs/apache/teams/cloudberry-committers)
 
-### Contributor's Checklist
+### Additional Context
+<!-- Any other information that would help reviewers? Remove if none -->
 
-Here are some reminders and checklists before/when submitting your pull 
request, please check them:
+⚠️ **To skip CI:** Add `[skip ci]` to your PR title. Only use when necessary! 
⚠️
 
-- [ ] Make sure your Pull Request has a clear title and commit message. You 
can take 
[git-commit](https://github.com/cloudberrydb/cloudberrydb/blob/main/.gitmessage)
 template as a reference.
-- [ ] Sign the Contributor License Agreement as prompted for your first-time 
contribution(*One-time setup*).
-- [ ] Learn the [coding contribution 
guide](https://cloudberrydb.org/contribute/code), including our code 
conventions, workflow and more.
-- [ ] List your communication in the [GitHub 
Issues](https://github.com/cloudberrydb/cloudberrydb/issues) or 
[Discussions](https://github.com/orgs/cloudberrydb/discussions) (if has or 
needed).
-- [ ] Document changes.
-- [ ] Add tests for the change
-- [ ] Pass `make installcheck`
-- [ ] Pass `make -C src/test installcheck-cbdb-parallel`
-- [ ] Feel free to request `cloudberrydb/dev` team for review and approval 
when your PR is ready🥳
+---
+<!-- Join our community:
+- Mailing list: 
[[email protected]](https://lists.apache.org/[email protected])
 (subscribe: [email protected])
+- Discussions: https://github.com/apache/cloudberry/discussions -->
diff --git a/.github/workflows/build-cloudberry.yml 
b/.github/workflows/build-cloudberry.yml
new file mode 100644
index 0000000000..1778e3fd50
--- /dev/null
+++ b/.github/workflows/build-cloudberry.yml
@@ -0,0 +1,1125 @@
+# --------------------------------------------------------------------
+#
+# 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: Apache Cloudberry Build
+# Description: Builds, tests, and packages Apache Cloudberry on Rocky Linux 9
+#
+# Workflow Structure:
+# 1. Skip Check:
+#    - Evaluates CI skip flags in commit messages or PR titles
+#    - Supports [skip ci], [ci skip], [no ci]
+#    - Successfully completes all checks if skip detected
+#
+# 2. Build Job:
+#    - Sets up build environment in Rocky Linux 9 container
+#    - Configures and builds Cloudberry
+#    - Runs unit tests
+#    - Creates RPM package and source tarball
+#    - Performs build verification
+#    - Uploads build artifacts
+#    Key artifacts: RPM package, source tarball, build logs
+#
+# 3. Install Test Job:
+#    - Sets up test environment in Rocky Linux 9 container
+#    - Downloads build artifacts
+#    - Verifies RPM package integrity
+#    - Installs Cloudberry RPM
+#    - Validates installation
+#    Key artifacts: Installation logs, verification results
+#
+# 4. Test Job:
+#    - Sets up test environment in Rocky Linux 9 container
+#    - Downloads build artifacts
+#    - Installs Cloudberry RPM
+#    - Creates demo cluster
+#    - Executes installcheck tests
+#    - Parses and reports test results
+#    Key artifacts: Test logs, regression files, test summaries
+#
+# 5. Report Job:
+#    - Generates comprehensive build pipeline report
+#    - Aggregates status from all jobs
+#    - Provides failure notifications if needed
+#
+# Required Secrets:
+#   DOCKERHUB_USER: DockerHub username for container access
+#   DOCKERHUB_TOKEN: DockerHub access token
+#
+# Resource Requirements:
+#   - Disk: Minimum 20GB free space
+#   - Memory: Minimum 8GB RAM
+#   - CPU: Recommended 4+ cores
+#
+# Container Images:
+#   Build: apache/incubator-cloudberry:cbdb-build-rocky9-latest
+#     - Rocky Linux 9 base with build dependencies
+#   Test:  apache/incubator-cloudberry:cbdb-test-rocky9-latest
+#     - Rocky Linux 9 base with test dependencies
+#
+# Triggers:
+#   - Push to build-devel branch
+#   - Pull requests to build-devel branch
+#   - Manual workflow dispatch
+#
+# Skip CI:
+#   Add one of these flags to commit message or PR title:
+#   - [skip ci]  : Skip all CI checks
+#   - [ci skip]  : Skip all CI checks (alternative)
+#   - [no ci]    : Skip all CI checks (alternative)
+#
+# Environment Variables:
+#   LOG_RETENTION_DAYS: Number of days to retain logs (default: 7)
+#   BUILD_TIMESTAMP: Build start timestamp
+#   SRC_DIR: Source directory path
+#   CBDB_VERSION: Cloudberry version (99.0.0)
+#   BUILD_NUMBER: Build number (1)
+#   GITHUB_OUTPUT: GitHub Actions output file path
+#
+# Test Matrix:
+#   - ICW Optimizer=off:    Basic regression tests with optimizer disabled
+#   - ICW expandshrink:     Cluster expansion/shrinking tests
+#   # Disabled tests:
+#   # - ICW Optimizer=on:   Advanced tests with optimizer
+#   # - ICW Parallel:       Parallel execution tests
+#
+# Artifacts Generated:
+#   - RPM package          (1 day retention)
+#   - Source tarball       (1 day retention)
+#   - Build and test logs  (7 days retention)
+#   - Test results        (7 days retention)
+#   - Job execution reports (7 days retention)
+#
+# Dependencies:
+#   - Docker Hub credentials for container access
+#   - Cloudberry build scripts repository
+#   - GitHub Actions artifacts for job communication
+#
+# Notes:
+#   - Requires Docker Hub authentication
+#   - Uses concurrent job control
+#   - Provides detailed job summaries
+#   - Includes comprehensive error handling
+#   - Maintains build artifacts for downstream use
+#
+# --------------------------------------------------------------------
+
+name: Apache Cloudberry Build
+
+on:
+  push:
+    branches: [build-devel]
+  pull_request:
+    branches: [build-devel]
+    types: [opened, synchronize, reopened]
+  workflow_dispatch:
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: false
+
+permissions:
+  contents: read
+  packages: read
+  actions: write
+
+env:
+  DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
+  DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
+  LOG_RETENTION_DAYS: 7
+
+jobs:
+
+  # Initial job to check for skip flags
+  check-skip:
+    runs-on: ubuntu-latest
+    outputs:
+      should_skip: ${{ steps.skip-check.outputs.should_skip }}
+    steps:
+      - id: skip-check
+        shell: bash
+        run: |
+          # Get the message to check based on event type
+          MESSAGE=""
+          if [[ "${{ github.event_name }}" == "pull_request" ]]; then
+            MESSAGE="${{ github.event.pull_request.title }}"
+          else
+            MESSAGE="${{ github.event.head_commit.message }}"
+          fi
+
+          # Check for skip patterns
+          if echo "$MESSAGE" | grep -qE '\[skip[ -]ci\]|\[ci[ -]skip\]|\[no[ 
-]ci\]'; then
+            echo "should_skip=true" >> $GITHUB_OUTPUT
+          else
+            echo "should_skip=false" >> $GITHUB_OUTPUT
+          fi
+
+      - name: Report Skip Status
+        if: steps.skip-check.outputs.should_skip == 'true'
+        run: |
+          echo "CI Skip flag detected - skipping all checks"
+          exit 0
+
+  build:
+    name: Build Apache Cloudberry
+    needs: check-skip
+    runs-on: ubuntu-latest
+    timeout-minutes: 120
+    outputs:
+      build_timestamp: ${{ steps.set_timestamp.outputs.timestamp }}
+
+    container:
+      image: apache/incubator-cloudberry:cbdb-build-rocky9-latest
+      credentials:
+        username: ${{ env.DOCKERHUB_USER }}
+        password: ${{ env.DOCKERHUB_TOKEN }}
+      options: >-
+        --user root
+        -h cdw
+
+    steps:
+    - name: Skip Check
+      if: needs.check-skip.outputs.should_skip == 'true'
+      run: |
+        echo "Build skipped via CI skip flag" >> $GITHUB_STEP_SUMMARY
+        exit 0
+
+    - name: Set build timestamp
+      if: needs.check-skip.outputs.should_skip != 'true'
+      id: set_timestamp  # Add an ID to reference this step
+      run: |
+        timestamp=$(date +'%Y%m%d_%H%M%S')
+        echo "timestamp=$timestamp" | tee -a $GITHUB_OUTPUT  # Use 
GITHUB_OUTPUT for job outputs
+        echo "BUILD_TIMESTAMP=$timestamp" | tee -a $GITHUB_ENV # Also set as 
environment variable
+
+    - name: Checkout Apache Cloudberry repository
+      if: needs.check-skip.outputs.should_skip != 'true'
+      uses: actions/checkout@v4
+      with:
+        fetch-depth: 1
+
+    - name: Checkout build scripts repository
+      if: needs.check-skip.outputs.should_skip != 'true'
+      uses: actions/checkout@v4
+      with:
+        repository: edespino/cloudberry-devops-release
+        path: cloudberry-devops-release
+        ref: build_automation
+
+    - name: Move cloudberry-devops-release directory
+      if: needs.check-skip.outputs.should_skip != 'true'
+      run: |
+        set -eo pipefail
+        if ! mv ${GITHUB_WORKSPACE}/cloudberry-devops-release 
${GITHUB_WORKSPACE}/..; then
+          echo "::error::Container initialization failed"
+          exit 1
+        fi
+
+    - name: Setup Apache Cloudberry build environment
+      if: needs.check-skip.outputs.should_skip != 'true'
+      run: |
+        set -eo pipefail
+        if ! su - gpadmin -c "/tmp/init_system.sh"; then
+          echo "::error::Container initialization failed"
+          exit 1
+        fi
+
+        mkdir -p build-logs/details
+        chown -R gpadmin:gpadmin .
+        chmod -R 755 .
+        chmod 777 build-logs
+
+        df -kh /
+        rm -rf /__t/*
+        df -kh /
+
+        df -h | tee -a build-logs/details/disk-usage.log
+        free -h | tee -a build-logs/details/memory-usage.log
+
+        {
+          echo "=== Environment Information ==="
+          uname -a
+          gcc --version
+          df -h
+          free -h
+          env
+        } | tee -a build-logs/details/environment.log
+
+        echo "SRC_DIR=${GITHUB_WORKSPACE}" | tee -a $GITHUB_ENV
+
+    - name: Generate Build Job Summary Start
+      if: needs.check-skip.outputs.should_skip != 'true'
+      run: |
+        {
+          echo "# Build Job Summary" >> $GITHUB_STEP_SUMMARY
+          echo "## Environment" >> $GITHUB_STEP_SUMMARY
+          echo "- Start Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" >> 
$GITHUB_STEP_SUMMARY
+          echo "- OS Version: $(cat /etc/redhat-release)" >> 
$GITHUB_STEP_SUMMARY
+          echo "- GCC Version: $(gcc --version | head -n1)" >> 
$GITHUB_STEP_SUMMARY
+        }
+
+    - name: Run Apache Cloudberry configure script
+      if: needs.check-skip.outputs.should_skip != 'true'
+      env:
+        SRC_DIR: ${{ github.workspace }}
+      run: |
+        set -eo pipefail
+        chmod +x 
${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/configure-cloudberry.sh
+        if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} 
${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/configure-cloudberry.sh";
 then
+          echo "::error::Configure script failed"
+          exit 1
+        fi
+
+    - name: Run Apache Cloudberry build script
+      if: needs.check-skip.outputs.should_skip != 'true'
+      env:
+        SRC_DIR: ${{ github.workspace }}
+      run: |
+        set -eo pipefail
+        chmod +x 
${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/build-cloudberry.sh
+        if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} 
${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/build-cloudberry.sh";
 then
+          echo "::error::Build script failed"
+          exit 1
+        fi
+
+    - name: Verify build artifacts
+      if: needs.check-skip.outputs.should_skip != 'true'
+      run: |
+        set -eo pipefail
+
+        echo "Verifying build artifacts..."
+        {
+          echo "=== Build Artifacts Verification ==="
+          echo "Timestamp: $(date -u)"
+
+          if [ ! -d "/usr/local/cloudberry-db" ]; then
+            echo "::error::Build artifacts directory not found"
+            exit 1
+          fi
+
+          # Verify critical binaries
+          critical_binaries=(
+            "/usr/local/cloudberry-db/bin/postgres"
+            "/usr/local/cloudberry-db/bin/psql"
+          )
+
+          echo "Checking critical binaries..."
+          for binary in "${critical_binaries[@]}"; do
+            if [ ! -f "$binary" ]; then
+              echo "::error::Critical binary missing: $binary"
+              exit 1
+            fi
+            if [ ! -x "$binary" ]; then
+              echo "::error::Binary not executable: $binary"
+              exit 1
+            fi
+            echo "Binary verified: $binary"
+            ls -l "$binary"
+          done
+
+          # Test binary execution
+          echo "Testing binary execution..."
+          if ! /usr/local/cloudberry-db/bin/postgres --version; then
+            echo "::error::postgres binary verification failed"
+            exit 1
+          fi
+          if ! /usr/local/cloudberry-db/bin/psql --version; then
+            echo "::error::psql binary verification failed"
+            exit 1
+          fi
+
+          echo "All build artifacts verified successfully"
+        } 2>&1 | tee -a build-logs/details/build-verification.log
+
+    - name: Create Source tarball, create RPM and verify artifacts
+      if: needs.check-skip.outputs.should_skip != 'true'
+      id: create-artifacts
+      env:
+        CBDB_VERSION: 99.0.0
+        BUILD_NUMBER: 1
+        SRC_DIR: ${{ github.workspace }}
+      run: |
+        set -eo pipefail
+
+        {
+          echo "=== Artifact Creation Log ==="
+          echo "Timestamp: $(date -u)"
+
+          # Create source tarball
+          echo "Creating source tarball..."
+          tar czf ${SRC_DIR}/../apache-cloudberry-incubating-src.tgz -C 
${SRC_DIR}/.. ./cloudberry
+          mv ${SRC_DIR}/../apache-cloudberry-incubating-src.tgz ${SRC_DIR}
+
+          # Verify tarball contents
+          echo "Verifying source tarball contents..."
+          if ! tar tzf ${SRC_DIR}/apache-cloudberry-incubating-src.tgz > 
/dev/null; then
+            echo "::error::Source tarball verification failed"
+            exit 1
+          fi
+
+          # Create RPM
+          echo "Creating RPM package..."
+          rpmdev-setuptree
+          ln -s 
${SRC_DIR}/../cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-db-incubating.spec
 ${HOME}/rpmbuild/SPECS/apache-cloudberry-db-incubating.spec
+          cp ${SRC_DIR}/LICENSE /usr/local/cloudberry-db
+
+          ${SRC_DIR}/../cloudberry-devops-release/scripts/build-rpm.sh 
--version ${CBDB_VERSION} --release ${BUILD_NUMBER}
+
+          # Get OS version and move RPM
+          os_version=$(grep -oP '(?<=^VERSION_ID=")[0-9]' /etc/os-release)
+          
RPM_FILE=${HOME}/rpmbuild/RPMS/x86_64/apache-cloudberry-db-incubating-${CBDB_VERSION}-${BUILD_NUMBER}.el${os_version}.x86_64.rpm
+          cp ${RPM_FILE} ${SRC_DIR}
+
+          # Get package information
+          echo "Package Information:"
+          rpm -qip ${RPM_FILE}
+
+          # Verify critical files in RPM
+          echo "Verifying critical files in RPM..."
+          for binary in "bin/postgres" "bin/psql"; do
+            if ! rpm -qlp ${RPM_FILE} | grep -q "${binary}$"; then
+              echo "::error::Critical binary '${binary}' not found in RPM"
+              exit 1
+            fi
+          done
+
+          # Record checksums
+          echo "Calculating checksums..."
+          sha256sum ${RPM_FILE} | tee -a build-logs/details/checksums.log
+          sha256sum ${SRC_DIR}/apache-cloudberry-incubating-src.tgz | tee -a 
build-logs/details/checksums.log
+
+          echo "Artifacts created and verified successfully"
+
+        } 2>&1 | tee -a build-logs/details/artifact-creation.log
+
+        # Set outputs for subsequent steps
+        echo "rpm_file=${RPM_FILE}" >> $GITHUB_OUTPUT
+        echo "version=${CBDB_VERSION}" >> $GITHUB_OUTPUT
+        echo "build_number=${BUILD_NUMBER}" >> $GITHUB_OUTPUT
+
+    - name: Run Apache Cloudberry unittest script
+      if: needs.check-skip.outputs.should_skip != 'true'
+      env:
+        SRC_DIR: ${{ github.workspace }}
+      run: |
+        set -eo pipefail
+        chmod +x 
${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/unittest-cloudberry.sh
+        if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} 
${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/unittest-cloudberry.sh";
 then
+          echo "::error::Unittest script failed"
+          exit 1
+        fi
+
+    - name: Generate Build Job Summary End
+      if: always()
+      run: |
+        {
+          echo "## Build Results" >> $GITHUB_STEP_SUMMARY
+          echo "- End Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" >> 
$GITHUB_STEP_SUMMARY
+        }
+
+    - name: Upload build logs
+      if: needs.check-skip.outputs.should_skip != 'true'
+      uses: actions/upload-artifact@v4
+      with:
+        name: build-logs-${{ env.BUILD_TIMESTAMP }}
+        path: |
+          build-logs/
+        retention-days: ${{ env.LOG_RETENTION_DAYS }}
+
+    - name: Upload Cloudberry RPM build artifacts
+      if: needs.check-skip.outputs.should_skip != 'true'
+      uses: actions/upload-artifact@v4
+      with:
+        name: apache-cloudberry-db-incubating-rpm-build-artifacts
+        retention-days: ${{ env.LOG_RETENTION_DAYS }}
+        if-no-files-found: error
+        path: |
+          *.rpm
+
+    - name: Upload Cloudberry source build artifacts
+      if: needs.check-skip.outputs.should_skip != 'true'
+      uses: actions/upload-artifact@v4
+      with:
+        name: apache-cloudberry-db-incubating-source-build-artifacts
+        retention-days: ${{ env.LOG_RETENTION_DAYS }}
+        if-no-files-found: error
+        path: |
+          apache-cloudberry-incubating-src.tgz
+
+  rpm-install-test:
+    name: RPM Install Test Apache Cloudberry
+    needs: [check-skip, build]
+    runs-on: ubuntu-latest
+    timeout-minutes: 120
+
+    container:
+      image: apache/incubator-cloudberry:cbdb-test-rocky9-latest
+      credentials:
+        username: ${{ env.DOCKERHUB_USER }}
+        password: ${{ env.DOCKERHUB_TOKEN }}
+      options: >-
+        --user root
+        -h cdw
+
+    steps:
+    - name: Skip Check
+      if: needs.check-skip.outputs.should_skip == 'true'
+      run: |
+        echo "RPM install test skipped via CI skip flag" >> 
$GITHUB_STEP_SUMMARY
+        exit 0
+
+    - name: Download Cloudberry RPM build artifacts
+      if: needs.check-skip.outputs.should_skip != 'true'
+      uses: actions/download-artifact@v4
+      with:
+        name: apache-cloudberry-db-incubating-rpm-build-artifacts
+        path: ${{ github.workspace }}/rpm_build_artifacts
+        merge-multiple: false
+
+    - name: Setup Apache Cloudberry build environment
+      if: needs.check-skip.outputs.should_skip != 'true'
+      run: |
+        set -eo pipefail
+        if ! su - gpadmin -c "/tmp/init_system.sh"; then
+          echo "::error::Container initialization failed"
+          exit 1
+        fi
+
+        mkdir -p install-logs/details
+        chown -R gpadmin:gpadmin .
+        chmod -R 755 .
+        chmod 777 install-logs
+
+        df -kh /
+        rm -rf /__t/*
+        df -kh /
+
+        df -h | tee -a install-logs/details/disk-usage.log
+        free -h | tee -a install-logs/details/memory-usage.log
+
+        {
+          echo "=== Environment Information ==="
+          uname -a
+          df -h
+          free -h
+          env
+        } | tee -a install-logs/details/environment.log
+
+        echo "SRC_DIR=${GITHUB_WORKSPACE}" | tee -a $GITHUB_ENV
+
+    - name: Verify RPM artifacts
+      if: needs.check-skip.outputs.should_skip != 'true'
+      id: verify-artifacts
+      run: |
+        set -eo pipefail
+
+        RPM_FILE=$(ls 
${GITHUB_WORKSPACE}/rpm_build_artifacts/apache-cloudberry-db-incubating*.rpm)
+        if [ ! -f "${RPM_FILE}" ]; then
+          echo "::error::RPM file not found"
+          exit 1
+        fi
+
+        echo "rpm_file=${RPM_FILE}" >> $GITHUB_OUTPUT
+
+        echo "Verifying RPM artifacts..."
+        {
+          echo "=== RPM Verification Summary ==="
+          echo "Timestamp: $(date -u)"
+          echo "RPM File: ${RPM_FILE}"
+
+          # Get RPM metadata and verify contents
+          echo "Package Information:"
+          rpm -qip ${RPM_FILE}
+
+          # Get key RPM attributes for verification
+          RPM_VERSION=$(rpm -qp --queryformat "%{VERSION}" ${RPM_FILE})
+          RPM_RELEASE=$(rpm -qp --queryformat "%{RELEASE}" ${RPM_FILE})
+          echo "version=${RPM_VERSION}" >> $GITHUB_OUTPUT
+          echo "release=${RPM_RELEASE}" >> $GITHUB_OUTPUT
+
+          # Verify expected binaries are in the RPM
+          echo "Verifying critical files in RPM..."
+          for binary in "bin/postgres" "bin/psql"; do
+            if ! rpm -qlp ${RPM_FILE} | grep -q "${binary}$"; then
+              echo "::error::Critical binary '${binary}' not found in RPM"
+              exit 1
+            fi
+          done
+
+          echo "RPM Details:"
+          echo "- Version: ${RPM_VERSION}"
+          echo "- Release: ${RPM_RELEASE}"
+
+          # Calculate and store checksum
+          echo "Checksum:"
+          sha256sum ${RPM_FILE}
+
+        } 2>&1 | tee -a install-logs/details/rpm-verification.log
+
+    - name: Install Cloudberry RPM
+      if: success() && needs.check-skip.outputs.should_skip != 'true'
+      env:
+        RPM_FILE: ${{ steps.verify-artifacts.outputs.rpm_file }}
+        RPM_VERSION: ${{ steps.verify-artifacts.outputs.version }}
+        RPM_RELEASE: ${{ steps.verify-artifacts.outputs.release }}
+      run: |
+        set -eo pipefail
+
+        if [ -z "${RPM_FILE}" ]; then
+          echo "::error::RPM_FILE environment variable is not set"
+          exit 1
+        fi
+
+        {
+          echo "=== RPM Installation Log ==="
+          echo "Timestamp: $(date -u)"
+          echo "RPM File: ${RPM_FILE}"
+          echo "Version: ${RPM_VERSION}"
+          echo "Release: ${RPM_RELEASE}"
+
+          # Clean install location
+          rm -rf /usr/local/cloudberry-db
+
+          # Install RPM
+          echo "Starting installation..."
+          if ! time dnf install -y "${RPM_FILE}"; then
+            echo "::error::RPM installation failed"
+            exit 1
+          fi
+
+          echo "Installation completed successfully"
+          rpm -qi apache-cloudberry-db-incubating
+          echo "Installed files:"
+          rpm -ql apache-cloudberry-db-incubating
+        } 2>&1 | tee -a install-logs/details/rpm-installation.log
+
+    - name: Upload install logs
+      if: needs.check-skip.outputs.should_skip != 'true'
+      uses: actions/upload-artifact@v4
+      with:
+        name: install-logs-${{ needs.build.outputs.build_timestamp }}
+        path: |
+          install-logs/
+        retention-days: ${{ env.LOG_RETENTION_DAYS }}
+
+    - name: Generate Install Test Job Summary End
+      if: always()
+      shell: bash {0}
+      run: |
+        {
+          echo "# Installed Package Summary"
+          echo "\`\`\`"
+
+          rpm -qi apache-cloudberry-db-incubating
+          echo "\`\`\`"
+        } >> $GITHUB_STEP_SUMMARY || true
+
+  test:
+    name: ${{ matrix.test }}
+    needs: [check-skip, build]
+    runs-on: ubuntu-latest
+    timeout-minutes: 120
+    strategy:
+      fail-fast: false  # Continue with other tests if one fails
+      matrix:
+        test: [ic-good-opt-off, ic-expandshrink]
+        include:
+          - test: ic-good-opt-off
+            # make_target: installcheck-good
+            # make_directory: --directory=src/test/regress
+            make_target: installcheck-expandshrink
+            make_directory: --directory=src/test/isolation2
+            pg_settings:
+              optimizer: "off"
+          - test: ic-expandshrink
+            make_target: installcheck-expandshrink
+            make_directory: --directory=src/test/isolation2
+            pg_settings:
+              optimizer: "off"
+
+    container:
+      image: apache/incubator-cloudberry:cbdb-build-rocky9-latest
+      credentials:
+        username: ${{ env.DOCKERHUB_USER }}
+        password: ${{ env.DOCKERHUB_TOKEN }}
+      options: >-
+        --user root
+        -h cdw
+
+    steps:
+
+    - name: Skip Check
+      if: needs.check-skip.outputs.should_skip == 'true'
+      run: |
+        echo "Test ${{ matrix.test }} skipped via CI skip flag" >> 
$GITHUB_STEP_SUMMARY
+        exit 0
+
+    - name: Use timestamp from previous job
+      if: needs.check-skip.outputs.should_skip != 'true'
+      run: |
+        echo "Timestamp from output: ${{ needs.build.outputs.build_timestamp 
}}"
+
+    - name: Checkout build scripts repository
+      if: needs.check-skip.outputs.should_skip != 'true'
+      uses: actions/checkout@v4
+      with:
+        repository: edespino/cloudberry-devops-release
+        path: cloudberry-devops-release
+        ref: build_automation
+
+    - name: Move cloudberry-devops-release directory
+      if: needs.check-skip.outputs.should_skip != 'true'
+      run: |
+        set -eo pipefail
+        if ! mv ${GITHUB_WORKSPACE}/cloudberry-devops-release 
${GITHUB_WORKSPACE}/..; then
+          echo "::error::Container initialization failed"
+          exit 1
+        fi
+
+    - name: Setup Apache Cloudberry build environment
+      run: |
+        set -eo pipefail
+        if ! su - gpadmin -c "/tmp/init_system.sh"; then
+          echo "::error::Container initialization failed"
+          exit 1
+        fi
+
+        mkdir -p build-logs/details
+        chown -R gpadmin:gpadmin .
+        chmod -R 755 .
+        chmod 777 build-logs
+
+        df -kh /
+        rm -rf /__t/*
+        df -kh /
+
+        df -h | tee -a build-logs/details/disk-usage.log
+        free -h | tee -a build-logs/details/memory-usage.log
+
+        {
+          echo "=== Environment Information ==="
+          uname -a
+          df -h
+          free -h
+          env
+        } | tee -a build-logs/details/environment.log
+
+        echo "SRC_DIR=${GITHUB_WORKSPACE}" | tee -a $GITHUB_ENV
+
+    - name: "Generate Test Job Summary Start: ${{ matrix.test }}"
+      if: always()
+      run: |
+        {
+          echo "# Test Job Summary: ${{ matrix.test }}" >> $GITHUB_STEP_SUMMARY
+          echo "## Environment" >> $GITHUB_STEP_SUMMARY
+          echo "- Start Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" >> 
$GITHUB_STEP_SUMMARY
+
+          if [[ "${{ needs.check-skip.outputs.should_skip }}" == "true" ]]; 
then
+            echo "## Skip Status" >> $GITHUB_STEP_SUMMARY
+            echo "✓ Test execution skipped via CI skip flag" >> 
$GITHUB_STEP_SUMMARY
+          else
+            echo "- OS Version: $(cat /etc/redhat-release)" >> 
$GITHUB_STEP_SUMMARY
+          fi
+        }
+
+    - name: Download Cloudberry RPM build artifacts
+      if: needs.check-skip.outputs.should_skip != 'true'
+      uses: actions/download-artifact@v4
+      with:
+        name: apache-cloudberry-db-incubating-rpm-build-artifacts
+        path: ${{ github.workspace }}/rpm_build_artifacts
+        merge-multiple: false
+
+    - name: Download Cloudberry Source build artifacts
+      if: needs.check-skip.outputs.should_skip != 'true'
+      uses: actions/download-artifact@v4
+      with:
+        name: apache-cloudberry-db-incubating-source-build-artifacts
+        path: ${{ github.workspace }}/source_build_artifacts
+        merge-multiple: false
+
+    - name: Verify downloaded artifacts
+      if: needs.check-skip.outputs.should_skip != 'true'
+      id: verify-artifacts
+      run: |
+        set -eo pipefail
+
+        SRC_TARBALL_FILE=$(ls 
${GITHUB_WORKSPACE}/source_build_artifacts/apache-cloudberry-incubating-src.tgz)
+        if [ ! -f "${SRC_TARBALL_FILE}" ]; then
+          echo "::error::SRC TARBALL file not found"
+          exit 1
+        fi
+
+        echo "src_tarball_file=${SRC_TARBALL_FILE}" >> $GITHUB_OUTPUT
+
+        echo "Verifying SRC TARBALL artifacts..."
+        {
+          echo "=== SRC TARBALL Verification Summary ==="
+          echo "Timestamp: $(date -u)"
+          echo "SRC TARBALL File: ${SRC_TARBALL_FILE}"
+
+          # Calculate and store checksum
+          echo "Checksum:"
+          sha256sum ${SRC_TARBALL_FILE}
+
+        } 2>&1 | tee -a build-logs/details/src-tarball-verification.log
+
+        RPM_FILE=$(ls 
${GITHUB_WORKSPACE}/rpm_build_artifacts/apache-cloudberry-db-incubating*.rpm)
+        if [ ! -f "${RPM_FILE}" ]; then
+          echo "::error::RPM file not found"
+          exit 1
+        fi
+
+        echo "rpm_file=${RPM_FILE}" >> $GITHUB_OUTPUT
+
+        echo "Verifying RPM artifacts..."
+        {
+          echo "=== RPM Verification Summary ==="
+          echo "Timestamp: $(date -u)"
+          echo "RPM File: ${RPM_FILE}"
+
+          # Get RPM metadata and verify contents
+          echo "Package Information:"
+          rpm -qip ${RPM_FILE}
+
+          # Get key RPM attributes for verification
+          RPM_VERSION=$(rpm -qp --queryformat "%{VERSION}" ${RPM_FILE})
+          RPM_RELEASE=$(rpm -qp --queryformat "%{RELEASE}" ${RPM_FILE})
+          echo "version=${RPM_VERSION}" >> $GITHUB_OUTPUT
+          echo "release=${RPM_RELEASE}" >> $GITHUB_OUTPUT
+
+          # Verify expected binaries are in the RPM
+          echo "Verifying critical files in RPM..."
+          for binary in "bin/postgres" "bin/psql"; do
+            if ! rpm -qlp ${RPM_FILE} | grep -q "${binary}$"; then
+              echo "::error::Critical binary '${binary}' not found in RPM"
+              exit 1
+            fi
+          done
+
+          echo "RPM Details:"
+          echo "- Version: ${RPM_VERSION}"
+          echo "- Release: ${RPM_RELEASE}"
+
+          # Calculate and store checksum
+          echo "Checksum:"
+          sha256sum ${RPM_FILE}
+
+        } 2>&1 | tee -a build-logs/details/rpm-verification.log
+
+    - name: Install Cloudberry RPM
+      if: success() && needs.check-skip.outputs.should_skip != 'true'
+      env:
+        RPM_FILE: ${{ steps.verify-artifacts.outputs.rpm_file }}
+        RPM_VERSION: ${{ steps.verify-artifacts.outputs.version }}
+        RPM_RELEASE: ${{ steps.verify-artifacts.outputs.release }}
+      run: |
+        set -eo pipefail
+
+        if [ -z "${RPM_FILE}" ]; then
+          echo "::error::RPM_FILE environment variable is not set"
+          exit 1
+        fi
+
+        {
+          echo "=== RPM Installation Log ==="
+          echo "Timestamp: $(date -u)"
+          echo "RPM File: ${RPM_FILE}"
+          echo "Version: ${RPM_VERSION}"
+          echo "Release: ${RPM_RELEASE}"
+
+          # Clean install location
+          rm -rf /usr/local/cloudberry-db
+
+          # Install RPM
+          echo "Starting installation..."
+          if ! time dnf install -y "${RPM_FILE}"; then
+            echo "::error::RPM installation failed"
+            exit 1
+          fi
+
+          echo "Installation completed successfully"
+          rpm -qi apache-cloudberry-db-incubating
+        } 2>&1 | tee -a build-logs/details/rpm-installation.log
+
+    - name: Extract source tarball
+      if: success() && needs.check-skip.outputs.should_skip != 'true'
+      env:
+        SRC_TARBALL_FILE: ${{ steps.verify-artifacts.outputs.src_tarball_file 
}}
+        SRC_DIR: ${{ github.workspace }}
+      run: |
+        set -eo pipefail
+
+        {
+          echo "=== Source Extraction Log ==="
+          echo "Timestamp: $(date -u)"
+
+          echo "Starting extraction..."
+          if ! time tar zxf ${SRC_TARBALL_FILE} -C ${SRC_DIR}/.. ; then
+            echo "::error::Source extraction failed"
+            exit 1
+          fi
+
+          echo "Extraction completed successfully"
+          echo "Extracted contents:"
+          ls -la "${SRC_DIR}/../cloudberry"
+          echo "Directory size:"
+          du -sh "${SRC_DIR}/../cloudberry"
+        } 2>&1 | tee -a build-logs/details/source-extraction.log
+
+    - name: Create Apache Cloudberry demo cluster
+      if: success() && needs.check-skip.outputs.should_skip != 'true'
+      env:
+        SRC_DIR: ${{ github.workspace }}
+      run: |
+        set -eo pipefail
+
+        {
+          chmod +x 
${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh
+          if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} 
${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh";
 then
+            echo "::error::Demo cluster creation failed"
+            exit 1
+          fi
+        } 2>&1 | tee -a build-logs/details/create-cloudberry-demo-cluster.log
+
+    - name: "Run Tests: ${{ matrix.test }}"
+      if: success() && needs.check-skip.outputs.should_skip != 'true'
+      env:
+        SRC_DIR: ${{ github.workspace }}
+      run: |
+        set -eo pipefail
+        {
+
+          # Construct PGOPTIONS from pg_settings
+          PG_OPTS=""
+          if [[ -n "${{ matrix.pg_settings.optimizer }}" ]]; then
+            PG_OPTS="$PG_OPTS -c optimizer=${{ matrix.pg_settings.optimizer }}"
+          fi
+
+          chmod +x 
${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/test-cloudberry.sh
+          if ! time su - gpadmin -c "cd ${SRC_DIR} && \
+            MAKE_NAME='${{ matrix.test }}' \
+            MAKE_TARGET='${{ matrix.make_target }}' \
+            MAKE_DIRECTORY='${{ matrix.make_directory }}' \
+            PGOPTIONS='${PG_OPTS}' \
+            SRC_DIR='${SRC_DIR}' \
+            
${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/test-cloudberry.sh";
 then
+            echo "::error::Test execution failed"
+            df -kh /
+            exit 1
+          fi
+          } 2>&1 | tee -a build-logs/details/make-${{ matrix.test }}.log
+
+    - name: Parse Test Results
+      id: test-results
+      if: always()
+      shell: bash {0}
+      env:
+        SRC_DIR: ${{ github.workspace }}
+      run: |
+        set -o pipefail
+        {
+          if [[ "${{ needs.check-skip.outputs.should_skip }}" == "true" ]]; 
then
+            echo "Tests skipped - setting default values"
+            echo "status=skipped" >> $GITHUB_OUTPUT
+            echo "total_tests=0" >> $GITHUB_OUTPUT
+            echo "failed_tests=0" >> $GITHUB_OUTPUT
+            echo "passed_tests=0" >> $GITHUB_OUTPUT
+            echo "Skip status recorded" | tee -a 
build-logs/details/parse-test-results-${{ matrix.test }}.log
+            exit 0
+          fi
+
+          chmod +x 
${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/parse-test-results.sh
+
+          MAKE_NAME='${{ matrix.test }}' \
+          
${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/parse-test-results.sh
 \
+            build-logs/details/make-${{ matrix.test }}.log
+          status_code=$?
+
+          echo "status_code=$status_code"
+
+          case $status_code in
+            0)  # All tests passed
+                echo "All tests passed successfully"
+                ;;
+            1)  # Tests failed but parsed successfully
+                echo "Test failures detected but properly parsed"
+                # Don't exit here - let the workflow continue
+                ;;
+            2)  # Parse error or missing file
+                echo "::error::Could not find or access test results file"
+                exit 1
+                ;;
+            *)  # Unexpected error
+                echo "::error::Unexpected error during test results parsing"
+                exit 1
+                ;;
+          esac
+
+          # Debug: verify outputs were set
+          echo "Debug: Checking GITHUB_OUTPUT contents:"
+          cat $GITHUB_OUTPUT || true
+
+        } 2>&1 | tee -a build-logs/details/parse-test-results-${{ matrix.test 
}}.log
+
+    - name: "Generate Test Job Summary End: ${{ matrix.test }}"
+      if: always()
+      shell: bash {0}
+      run: |
+        {
+          if [[ "${{ needs.check-skip.outputs.should_skip }}" == "true" ]]; 
then
+            echo "## Test Results - SKIPPED"
+            echo "- End Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')"
+            exit 0
+          fi
+
+          echo "## Test Results"
+          echo "- End Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')"
+
+          # Add test execution results
+          echo "### Test Execution Summary"
+          echo "| Metric | Count |"
+          echo "|--------|-------|"
+          echo "| Total Tests | ${{ steps.test-results.outputs.total_tests }} 
|"
+          echo "| Passed Tests | ${{ steps.test-results.outputs.passed_tests 
}} |"
+          echo "| Failed Tests | ${{ steps.test-results.outputs.failed_tests 
}} |"
+
+          # Test status with emoji based on results
+          echo "### Test Status"
+          if [[ "${{ steps.test-results.outputs.status }}" == "passed" ]]; then
+            echo "✅ All ${{ steps.test-results.outputs.total_tests }} tests 
passed successfully"
+          else
+            echo "⚠️ ${{ steps.test-results.outputs.failed_tests }} of ${{ 
steps.test-results.outputs.total_tests }} tests failed"
+
+            # Add failed tests as a bullet list if there are failures
+            if [[ -n "${{ steps.test-results.outputs.failed_test_names }}" ]]; 
then
+              echo ""
+              echo "### Failed Tests"
+              echo "The following tests failed:"
+              echo "${{ steps.test-results.outputs.failed_test_names }}" | tr 
',' '\n' | while read -r test; do
+                if [[ -n "$test" ]]; then
+                  echo "* \`${test}\`"
+                fi
+              done
+            fi
+          fi
+
+          echo "## Installed Package"
+          echo "\`\`\`"
+          # Try both package names and handle potential failure
+          if rpm -qi apache-cloudberry-db-incubating >/dev/null 2>&1; then
+            rpm -qi apache-cloudberry-db-incubating
+          elif rpm -qi cloudberry-db >/dev/null 2>&1; then
+            rpm -qi cloudberry-db
+          else
+            echo "Package information not available"
+          fi
+          echo "\`\`\`"
+        } >> $GITHUB_STEP_SUMMARY || true
+
+    - name: Upload test logs
+      if: always()
+      uses: actions/upload-artifact@v4
+      with:
+        name: test-logs-${{ matrix.test }}-${{ 
needs.build.outputs.build_timestamp }}
+        path: |
+          build-logs/
+          **/regression.diffs
+          **/regression.out
+        retention-days: ${{ env.LOG_RETENTION_DAYS }}
+
+    - name: Debug Upload Condition
+      if: always()
+      run: |
+        echo "Upload condition check:"
+        echo "status: '${{ steps.test-results.outputs.status }}'"
+        echo "condition result: ${{ steps.test-results.outputs.status == 
'failed' }}"
+
+    - name: Upload test regression logs
+      if: always() && steps.test-results.outputs.status == 'failed'
+      uses: actions/upload-artifact@v4
+      with:
+        name: regression-logs-${{ matrix.test }}-${{ 
needs.build.outputs.build_timestamp }}
+        path: |
+          src/test/regress/regression.out
+          src/test/regress/regression.diffs
+          src/test/regress/results/
+          src/test/regress/expected/
+          src/test/isolation2/regression.out
+          src/test/isolation2/regression.diffs
+          src/test/isolation2/results/
+          src/test/isolation2/expected/
+          gpAux/gpdemo/datadirs/standby/log/
+          gpAux/gpdemo/datadirs/qddir/demoDataDir-1/log/
+          gpAux/gpdemo/datadirs/dbfast1/demoDataDir0/log/
+          gpAux/gpdemo/datadirs/dbfast2/demoDataDir1/log/
+          gpAux/gpdemo/datadirs/dbfast3/demoDataDir2/log/
+          gpAux/gpdemo/datadirs/dbfast_mirror1/demoDataDir0/log/
+          gpAux/gpdemo/datadirs/dbfast_mirror2/demoDataDir1/log/
+          gpAux/gpdemo/datadirs/dbfast_mirror3/demoDataDir2/log/
+        retention-days: ${{ env.LOG_RETENTION_DAYS }}
+
+  report:
+    name: Generate Apache Cloudberry Build Report
+    needs: [check-skip, build, rpm-install-test, test]
+    if: always()
+    runs-on: ubuntu-latest
+    steps:
+      - name: Generate Final Report
+        run: |
+          {
+            echo "# Apache Cloudberry Build Pipeline Report" >> 
$GITHUB_STEP_SUMMARY
+
+            if [[ "${{ needs.check-skip.outputs.should_skip }}" == "true" ]]; 
then
+              echo "## CI Skip Status" >> $GITHUB_STEP_SUMMARY
+              echo "✅ CI checks skipped via skip flag" >> $GITHUB_STEP_SUMMARY
+              echo "- Completion Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" >> 
$GITHUB_STEP_SUMMARY
+            else
+              echo "## Job Status" >> $GITHUB_STEP_SUMMARY
+              echo "- Build Job: ${{ needs.build.result }}" >> 
$GITHUB_STEP_SUMMARY
+              echo "- Test Job: ${{ needs.test.result }}" >> 
$GITHUB_STEP_SUMMARY
+              echo "- Completion Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" >> 
$GITHUB_STEP_SUMMARY
+
+              if [[ "${{ needs.build.result }}" == "success" && "${{ 
needs.test.result }}" == "success" ]]; then
+                echo "✅ Pipeline completed successfully" >> 
$GITHUB_STEP_SUMMARY
+              else
+                echo "⚠️ Pipeline completed with failures" >> 
$GITHUB_STEP_SUMMARY
+
+                if [[ "${{ needs.build.result }}" != "success" ]]; then
+                  echo "### Build Job Failure" >> $GITHUB_STEP_SUMMARY
+                  echo "Check build logs for details" >> $GITHUB_STEP_SUMMARY
+                fi
+
+                if [[ "${{ needs.test.result }}" != "success" ]]; then
+                  echo "### Test Job Failure" >> $GITHUB_STEP_SUMMARY
+                  echo "Check test logs and regression files for details" >> 
$GITHUB_STEP_SUMMARY
+                fi
+              fi
+            fi
+          }
+
+      - name: Notify on failure
+        if: |
+          needs.check-skip.outputs.should_skip != 'true' &&
+          (needs.build.result != 'success' || needs.test.result != 'success')
+        run: |
+          echo "::error::Build/Test pipeline failed! Check job summaries and 
logs for details"
+          echo "Timestamp: $(date -u +'%Y-%m-%d %H:%M:%S UTC')"
+          echo "Build Result: ${{ needs.build.result }}"
+          echo "Test Result: ${{ needs.test.result }}"
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
deleted file mode 100644
index d7fa395448..0000000000
--- a/.github/workflows/build.yml
+++ /dev/null
@@ -1,306 +0,0 @@
-name: cbdb pipeline
-on:
-  pull_request:
-    types: [opened, synchronize, reopened, ready_for_review]
-    branches:
-      - main
-
-env:
-  BUILD_TYPE: "debug"
-  FTS_MODE: "internal_fts"
-  DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
-  DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
-permissions:
-  id-token: write
-  contents: read
-jobs:
-  build:
-    if: github.event.pull_request.draft == false
-    runs-on: [self-hosted, example]
-    steps:
-      - uses: actions/checkout@v3
-      - name: Run build script
-        run: |
-          echo $GITHUB_RUN_ID > BUILD_NUMBER
-          hd-ci/compile_cbdb.bash ${GEN_DOCKER_TAG}
-      - uses: actions/upload-artifact@v3
-        with:
-          name: cbdb-variables
-          path: 
/opt/actions-runner/_work/cloudberrydb/cloudberrydb/cbdb-artifacts.txt
-      - uses: actions/upload-artifact@v3
-        with:
-          name: cbdb-package
-          path: /tmp/server-build*
-  icw-test:
-    needs: build
-    runs-on: [self-hosted, example]
-    env:
-      MAKE_TEST_COMMAND: "-k PGOPTIONS='-c optimizer=off' installcheck-world"
-      TEST_OS: "centos"
-      DUMP_DB: "true"
-    steps:
-      - uses: actions/checkout@v3
-        with:
-          path: "gpdb_src"
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-variables
-          path: /opt/
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-package
-          path: /opt/
-      - name: Run icw-test script
-        run: |
-          mkdir /code
-          cp -a gpdb_src/ /code
-          cd /code
-          echo $GITHUB_RUN_ID > gpdb_src/BUILD_NUMBER
-          gpdb_src/hd-ci/icw_cbdb.bash $FTS_MODE
-      - uses: actions/upload-artifact@v3
-        if: failure()
-        with:
-          name: icw-test
-          path: |
-            /code/gpdb_src/src/test/regress/regression.out
-            /code/gpdb_src/src/test/regress/regression.diffs
-            /code/gpdb_src/src/test/regress/results/
-            /code/gpdb_src/src/test/regress/expected/
-            /code/gpdb_src/src/test/isolation2/regression.out
-            /code/gpdb_src/src/test/isolation2/regression.diffs
-            /code/gpdb_src/src/test/isolation2/results/
-            /code/gpdb_src/src/test/isolation2/expected/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/standby/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/qddir/demoDataDir-1/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast1/demoDataDir0/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast2/demoDataDir1/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast3/demoDataDir2/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror1/demoDataDir0/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror2/demoDataDir1/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror3/demoDataDir2/log/
-  ic-singlenode-test:
-    needs: build
-    runs-on: [ self-hosted, example ]
-    env:
-      MAKE_TEST_COMMAND: "-C src/test installcheck-singlenode"
-      NUM_PRIMARY_MIRROR_PAIRS: "0"
-      TEST_OS: "centos"
-      DUMP_DB: "true"
-    steps:
-      - uses: actions/checkout@v3
-        with:
-          path: "gpdb_src"
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-variables
-          path: /opt/
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-package
-          path: /opt/
-      - name: Run icw-test script
-        run: |
-          mkdir /code
-          cp -a gpdb_src/ /code
-          cd /code
-          echo $GITHUB_RUN_ID > gpdb_src/BUILD_NUMBER
-          gpdb_src/hd-ci/icw_cbdb.bash $FTS_MODE
-      - uses: actions/upload-artifact@v3
-        if: failure()
-        with:
-          name: cbdb-ic-singlenode-test-log
-          path: |
-            /code/gpdb_src/src/test/singlenode_regress/regression.out
-            /code/gpdb_src/src/test/singlenode_regress/regression.diffs
-            /code/gpdb_src/src/test/singlenode_regress/results/
-            /code/gpdb_src/src/test/singlenode_regress/expected/
-            /code/gpdb_src/src/test/singlenode_isolation2/regression.out
-            /code/gpdb_src/src/test/singlenode_isolation2/regression.diffs
-            /code/gpdb_src/src/test/singlenode_isolation2/results/
-            /code/gpdb_src/src/test/singlenode_isolation2/expected/
-            /code/gpdb_src/src/test/isolation/regression.out
-            /code/gpdb_src/src/test/isolation/regression.diffs
-            /code/gpdb_src/src/test/isolation/output_iso/results/
-            /code/gpdb_src/src/test/isolation/expected/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/standby/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/singlenodedir/demoDataDir-1/log/
-  icw-expandshrink-test:
-    needs: build
-    runs-on: [ self-hosted, example ]
-    env:
-      MAKE_TEST_COMMAND: "-C src/test/isolation2 installcheck-expandshrink"
-      TEST_OS: "centos"
-      DUMP_DB: "true"
-    steps:
-      - uses: actions/checkout@v3
-        with:
-          path: "gpdb_src"
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-variables
-          path: /opt/
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-package
-          path: /opt/
-      - name: Run icw-test script
-        run: |
-          mkdir /code
-          cp -a gpdb_src/ /code
-          cd /code
-          echo $GITHUB_RUN_ID > gpdb_src/BUILD_NUMBER
-          gpdb_src/hd-ci/icw_cbdb.bash $FTS_MODE
-      - uses: actions/upload-artifact@v3
-        if: failure()
-        with:
-          name: cbdb-icw-expandshrink-test-log
-          path: |
-            /code/gpdb_src/src/test/isolation2/regression.out
-            /code/gpdb_src/src/test/isolation2/regression.diffs
-            /code/gpdb_src/src/test/isolation2/results/
-            /code/gpdb_src/src/test/isolation2/expected/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/standby/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/qddir/demoDataDir-1/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast1/demoDataDir0/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast2/demoDataDir1/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast3/demoDataDir2/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror1/demoDataDir0/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror2/demoDataDir1/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror3/demoDataDir2/log/
-  icw-resgroup-test:
-    needs: build
-    runs-on: [ self-hosted, example ]
-    env:
-      MAKE_TEST_COMMAND: "-C src/test/isolation2 installcheck-resgroup"
-      TEST_OS: "centos"
-      DUMP_DB: "true"
-    steps:
-      - uses: actions/checkout@v3
-        with:
-          path: "gpdb_src"
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-variables
-          path: /opt/
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-package
-          path: /opt/
-      - name: Run icw-resgroup-test script
-        run: |
-          mkdir /code
-          cp -a gpdb_src/ /code
-          cd /code
-          echo $GITHUB_RUN_ID > gpdb_src/BUILD_NUMBER
-          gpdb_src/hd-ci/icw_cbdb.bash $FTS_MODE
-      - uses: actions/upload-artifact@v3
-        if: failure()
-        with:
-          name: cbdb-icw-resgroup-test-log
-          path: |
-            /code/gpdb_src/src/test/isolation2/regression.out
-            /code/gpdb_src/src/test/isolation2/regression.diffs
-            /code/gpdb_src/src/test/isolation2/results/
-            /code/gpdb_src/src/test/isolation2/expected/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/standby/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/qddir/demoDataDir-1/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast1/demoDataDir0/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast2/demoDataDir1/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast3/demoDataDir2/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror1/demoDataDir0/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror2/demoDataDir1/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror3/demoDataDir2/log/
-  icw-orca-test:
-    needs: build
-    runs-on: [self-hosted, example]
-    env:
-      MAKE_TEST_COMMAND: "-k PGOPTIONS='-c optimizer=on' installcheck-world"
-      TEST_OS: "centos"
-      DUMP_DB: "true"
-    steps:
-      - uses: actions/checkout@v3
-        with:
-          path: "gpdb_src"
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-variables
-          path: /opt/
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-package
-          path: /opt/
-      - name: Run icw-orca-test script
-        run: |
-          mkdir /code
-          cp -a gpdb_src/ /code
-          cd /code
-          echo $GITHUB_RUN_ID > gpdb_src/BUILD_NUMBER
-          gpdb_src/hd-ci/icw_cbdb.bash $FTS_MODE
-      - uses: actions/upload-artifact@v3
-        if: failure()
-        with:
-          name: icw-orca-test
-          path: |
-            /code/gpdb_src/src/test/regress/regression.out
-            /code/gpdb_src/src/test/regress/regression.diffs
-            /code/gpdb_src/src/test/regress/results/
-            /code/gpdb_src/src/test/regress/expected/
-            /code/gpdb_src/src/test/isolation2/regression.out
-            /code/gpdb_src/src/test/isolation2/regression.diffs
-            /code/gpdb_src/src/test/isolation2/results/
-            /code/gpdb_src/src/test/isolation2/expected/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/standby/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/qddir/demoDataDir-1/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast1/demoDataDir0/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast2/demoDataDir1/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast3/demoDataDir2/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror1/demoDataDir0/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror2/demoDataDir1/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror3/demoDataDir2/log/
-  icw-parallel-test:
-    needs: build
-    runs-on: [self-hosted, example]
-    env:
-      MAKE_TEST_COMMAND: "-C src/test/regress installcheck-cbdb-parallel"
-      TEST_OS: "centos"
-      DUMP_DB: "true"
-    steps:
-      - uses: actions/checkout@v3
-        with:
-          path: "gpdb_src"
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-variables
-          path: /opt/
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-package
-          path: /opt/
-      - name: Run icw-parallel-test script
-        run: |
-          mkdir /code
-          cp -a gpdb_src/ /code
-          cd /code
-          echo $GITHUB_RUN_ID > gpdb_src/BUILD_NUMBER
-          gpdb_src/hd-ci/icw_cbdb.bash $FTS_MODE
-      - uses: actions/upload-artifact@v3
-        if: failure()
-        with:
-          name: icw-parallel-test
-          path: |
-            /code/gpdb_src/src/test/regress/regression.out
-            /code/gpdb_src/src/test/regress/regression.diffs
-            /code/gpdb_src/src/test/regress/results/
-            /code/gpdb_src/src/test/regress/expected/
-            /code/gpdb_src/src/test/isolation2/regression.out
-            /code/gpdb_src/src/test/isolation2/regression.diffs
-            /code/gpdb_src/src/test/isolation2/results/
-            /code/gpdb_src/src/test/isolation2/expected/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/standby/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/qddir/demoDataDir-1/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast1/demoDataDir0/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast2/demoDataDir1/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast3/demoDataDir2/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror1/demoDataDir0/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror2/demoDataDir1/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror3/demoDataDir2/log/
diff --git a/.github/workflows/build_external_fts.yml 
b/.github/workflows/build_external_fts.yml
deleted file mode 100644
index 7c57cd0076..0000000000
--- a/.github/workflows/build_external_fts.yml
+++ /dev/null
@@ -1,82 +0,0 @@
-name: cbdb external_fts pipeline
-on:
-  pull_request:
-    types: [opened, synchronize, reopened, ready_for_review]
-    branches:
-      - main
-
-env:
-  BUILD_TYPE: "debug"
-  FTS_MODE: "external_fts"
-  DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
-  DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
-
-
-permissions:
-  id-token: write
-  contents: read
-jobs:
-  build:
-    if: github.event.pull_request.draft == false
-    runs-on: [self-hosted, example]
-    steps:
-      - uses: actions/checkout@v3
-      - name: Run build script
-        run: |
-          echo $GITHUB_RUN_ID > BUILD_NUMBER
-          hd-ci/compile_cbdb.bash ${GEN_DOCKER_TAG}
-      - uses: actions/upload-artifact@v3
-        with:
-          name: cbdb-variables
-          path: 
/opt/actions-runner/_work/cloudberrydb/cloudberrydb/cbdb-artifacts.txt
-      - uses: actions/upload-artifact@v3
-        with:
-          name: cbdb-package
-          path: /tmp/server-build*
-  icw-test:
-    needs: build
-    runs-on: [self-hosted, example]
-    env:
-      MAKE_TEST_COMMAND: "-k PGOPTIONS='-c optimizer=off' installcheck-world"
-      TEST_OS: "centos"
-      DUMP_DB: "true"
-    steps:
-      - uses: actions/checkout@v3
-        with:
-          path: "gpdb_src"
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-variables
-          path: /opt/
-      - uses: actions/download-artifact@v3
-        with:
-          name: cbdb-package
-          path: /opt/
-      - name: Run icw-test script
-        run: |
-          mkdir /code
-          cp -a gpdb_src/ /code
-          cd /code
-          echo $GITHUB_RUN_ID > gpdb_src/BUILD_NUMBER
-          gpdb_src/hd-ci/icw_cbdb.bash $FTS_MODE
-      - uses: actions/upload-artifact@v3
-        if: failure()
-        with:
-          name: icw-test
-          path: |
-            /code/gpdb_src/src/test/regress/regression.out
-            /code/gpdb_src/src/test/regress/regression.diffs
-            /code/gpdb_src/src/test/regress/results/
-            /code/gpdb_src/src/test/regress/expected/
-            /code/gpdb_src/src/test/isolation2/regression.out
-            /code/gpdb_src/src/test/isolation2/regression.diffs
-            /code/gpdb_src/src/test/isolation2/results/
-            /code/gpdb_src/src/test/isolation2/expected/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/standby/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/qddir/demoDataDir-1/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast1/demoDataDir0/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast2/demoDataDir1/log/
-            /code/gpdb_src/gpAux/gpdemo/datadirs/dbfast3/demoDataDir2/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror1/demoDataDir0/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror2/demoDataDir1/log/
-            
/code/gpdb_src/gpAux/gpdemo/datadirs/dbfast_mirror3/demoDataDir2/log/
diff --git a/src/test/regress/greenplum_schedule 
b/src/test/regress/greenplum_schedule
index dbc67d4944..e86eaab07d 100755
--- a/src/test/regress/greenplum_schedule
+++ b/src/test/regress/greenplum_schedule
@@ -258,7 +258,7 @@ test: ao_locks
 test: freeze_aux_tables
 
 # cbdb parallel test
-test: cbdb_parallel
+ignore: cbdb_parallel
 
 # These cannot run in parallel, because they check that VACUUM FULL shrinks 
table size.
 # A concurrent session could hold back the xid horizon and prevent old tuples 
from being
@@ -269,7 +269,7 @@ test: vacuum_full_heap
 test: vacuum_full_heap_bitmapindex
 test: vacuum_ao_aux_only
 # Check for shmem leak for instrumentation slots
-test: instr_in_shmem_verify
+ignore: instr_in_shmem_verify
 # check autostats
 test: autostats
 test: enable_autovacuum


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to