This repository was archived by the owner on Sep 12, 2025. It is now read-only.
docker-cbdb-test-containers #3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -------------------------------------------------------------------- | |
| # | |
| # 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. | |
| # | |
| # -------------------------------------------------------------------- | |
| # | |
| # Purpose: Builds, tests and pushes Docker images for Apache Cloudberry DB test environments | |
| # Images are built for Rocky Linux 8 and 9, tested with TestInfra, and pushed to DockerHub | |
| # | |
| # Images are tagged with: | |
| # - cbdb-test-rocky8-latest | |
| # - cbdb-test-rocky8-{YYYYMMDD}-{git-short-sha} | |
| # - cbdb-test-rocky9-latest | |
| # - cbdb-test-rocky9-{YYYYMMDD}-{git-short-sha} | |
| # | |
| # Features: | |
| # - Matrix build for multiple platforms | |
| # - Caching strategy for efficient builds | |
| # - Path filtering to only build changed platforms | |
| # - Comprehensive build summary and metadata | |
| name: docker-cbdb-test-containers | |
| # Trigger on pushes to docker-images branch when relevant paths change | |
| # Also allows manual triggering via GitHub UI | |
| on: | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - 'images/docker/cbdb/test/rocky8/**' | |
| - 'images/docker/cbdb/test/rocky9/**' | |
| workflow_dispatch: # Manual trigger | |
| # Prevent multiple workflow runs from interfering with each other | |
| concurrency: | |
| group: docker-test-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build-and-push: | |
| timeout-minutes: 60 # Prevent hanging builds | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| # Build for both Rocky Linux 8 and 9 | |
| platform: ['rocky8', 'rocky9'] | |
| steps: | |
| # Checkout repository code | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| # Generate version information for image tags | |
| - name: Set version | |
| id: version | |
| run: | | |
| echo "BUILD_DATE=$(date -u +'%Y%m%d')" >> $GITHUB_OUTPUT | |
| echo "SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT | |
| # Determine if the current platform's files have changed | |
| - name: Determine if platform changed | |
| id: platform-filter | |
| uses: dorny/paths-filter@v3 | |
| with: | |
| filters: | | |
| rocky8: | |
| - 'images/docker/cbdb/test/rocky8/**' | |
| rocky9: | |
| - 'images/docker/cbdb/test/rocky9/**' | |
| # Skip if no changes for current platform | |
| - name: Skip if not relevant | |
| if: ${{ steps.platform-filter.outputs[matrix.platform] != 'true' }} | |
| run: echo "Skipping because the changes do not affect this platform" | |
| # Login to DockerHub for pushing images | |
| - name: Login to Docker Hub | |
| if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USER }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| # Setup Docker Buildx for efficient builds | |
| - name: Set up Docker Buildx | |
| if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} | |
| uses: docker/setup-buildx-action@v3 | |
| with: | |
| buildkitd-flags: --debug | |
| # Build the Docker image locally for testing | |
| - name: Build Docker image for incubator-cloudberry:cbdb-test-${{ matrix.platform }}-latest | |
| if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: ./images/docker/cbdb/test/${{ matrix.platform }} | |
| push: false # Don't push yet, we'll test first | |
| load: true # Load into local Docker daemon for testing | |
| # Use caching for faster builds | |
| cache-from: | | |
| type=registry,ref=apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-latest | |
| type=gha,scope=docker-cbdb-test-${{ matrix.platform }} | |
| cache-to: type=gha,mode=max,scope=docker-cbdb-test-${{ matrix.platform }} | |
| tags: | | |
| incubator-cloudberry:cbdb-test-${{ matrix.platform }}-latest | |
| # Add metadata labels for better image tracking | |
| labels: | | |
| org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} | |
| org.opencontainers.image.revision=${{ github.sha }} | |
| org.opencontainers.image.created=${{ steps.version.outputs.BUILD_DATE }} | |
| org.opencontainers.image.version=${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }} | |
| # Push the image to DockerHub if tests passed | |
| - name: Retag and Push Docker image to DockerHub | |
| if: steps.platform-filter.outputs[matrix.platform] == 'true' | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: ./images/docker/cbdb/test/${{ matrix.platform }} | |
| push: true | |
| cache-from: | | |
| type=registry,ref=apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-latest | |
| type=gha,scope=docker-cbdb-test-${{ matrix.platform }} | |
| tags: | | |
| apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-latest | |
| apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }} | |
| labels: | | |
| org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} | |
| org.opencontainers.image.revision=${{ github.sha }} | |
| org.opencontainers.image.created=${{ steps.version.outputs.BUILD_DATE }} | |
| org.opencontainers.image.version=${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }} | |
| # Generate build summary | |
| - name: Build Summary | |
| if: always() | |
| run: | | |
| echo "### Build Summary for ${{ matrix.platform }} 🚀" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "#### 🔍 Build Information" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Build Status**: ${{ job.status }}" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Platform**: ${{ matrix.platform }}" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Commit SHA**: [\`${{ github.sha }}\`](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }})" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Trigger**: ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Branch**: ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Build Date**: ${{ steps.version.outputs.BUILD_DATE }}" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Version Tag**: \`${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| if [[ "${{ steps.platform-filter.outputs[matrix.platform] }}" == "true" ]]; then | |
| echo "#### 🐳 Docker Image" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Repository**: [\`apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }}\`](https://hub.docker.com/r/apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }})" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Tags Pushed**:" >> $GITHUB_STEP_SUMMARY | |
| echo " - \`latest\`" >> $GITHUB_STEP_SUMMARY | |
| echo " - \`${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "#### 📋 Quick Reference" >> $GITHUB_STEP_SUMMARY | |
| echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY | |
| echo "# Pull the image" >> $GITHUB_STEP_SUMMARY | |
| echo "docker pull apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }}" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "# View image details" >> $GITHUB_STEP_SUMMARY | |
| echo "docker inspect apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }}" >> $GITHUB_STEP_SUMMARY | |
| echo "\`\`\`" >> $GITHUB_STEP_SUMMARY | |
| fi |