Skip to content

Container Images from Commitest patch #50

Container Images from Commitest patch

Container Images from Commitest patch #50

name: Container Images from Commitest patch
on:
workflow_dispatch:
inputs:
patch_id:
description: "ID of the Patch"
required: true
major_version:
description: "PostgreSQL major version (leave empty for default)"
required: false
defaults:
run:
# default failure handling for shell scripts in 'run' steps
shell: 'bash -Eeuo pipefail -x {0}'
jobs:
build-pg:
name: Build the patch for PostgreSQL
runs-on: ubuntu-24.04
permissions:
contents: read
packages: write
outputs:
images: ${{ env.IMAGES }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Set env variables from defaults.json
run: |
for key in $(jq -r 'keys[]' defaults.json); do
echo "$key=$(cat defaults.json | jq -r --arg key "$key" '.[$key]')" >> $GITHUB_ENV
done
# Inputs have priority over defaults.json.
- name: Evaluate E2E workflow inputs
run: |
if [[ -n "${{ github.event.inputs.major_version }}" ]]; then
echo "PG_MAJOR=${{ github.event.inputs.major_version }}" >> $GITHUB_ENV
fi
- name: Set commitfest branch and tag
run: |
BRANCH="cf/${{ github.event.inputs.patch_id }}"
TAG="${BRANCH////-}"
echo "TAG=${TAG}" >> $GITHUB_ENV
echo "BRANCH=${BRANCH}" >> $GITHUB_ENV
- name: Log in to the GitHub Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
uses: docker/bake-action@v6
id: build
env:
environment: production
registry: ghcr.io/${{ github.repository_owner }}
revision: ${{ github.sha }}
pgMajor: ${{ env.PG_MAJOR }}
with:
set: |
*.args.PG_REPO=https://github.com/postgresql-cfbot/postgresql.git
*.args.PG_BRANCH=${{ env.BRANCH }}
minimal.tags=${{ env.registry }}/postgresql-trunk:18-minimal-${{ env.TAG }}
standard.tags=${{ env.registry }}/postgresql-trunk:18-standard-${{ env.TAG }}
postgis.tags=${{ env.registry }}/postgresql-trunk:18-postgis-${{ env.TAG }}
push: true
# Get a list of the images that were built and pushed.
- name: Generated images
id: images
run: |
IMAGES="$(echo '${{ steps.build.outputs.metadata }}' | jq -r '.[]."image.name"')"
{
echo 'IMAGES<<EOF'
echo "${IMAGES}"
echo EOF
} >> $GITHUB_ENV
generate-summary:
name: Commitfest Image Build summary
runs-on: ubuntu-24.04
needs:
- build-pg
steps:
- name: Output summary
run: |
commitFestPatchID=${{ github.event.inputs.patch_id }}
commitFestURL="https://commitfest.postgresql.org/patch/${commitFestPatchID}"
images="${{ needs.build-pg.outputs.images }}"
images_list="$(echo $images | tr ' ' '\n' | sed 's/^/https:\/\//')"
standardImage="$(echo $images | tr ' ' '\n' | grep standard)"
echo "# Commitfest Image Build summary" >> $GITHUB_STEP_SUMMARY
echo "**Commitfest Patch URL**: [$commitFestPatchID]($commitFestURL)" >> $GITHUB_STEP_SUMMARY
echo "Here's the list of Container Images that have been built:" >> $GITHUB_STEP_SUMMARY
echo "$images_list" >> $GITHUB_STEP_SUMMARY
echo "## CloudNativePG Cluster definition" >> $GITHUB_STEP_SUMMARY
echo "You can create a cluster in CloudNativePG running this image:" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`sh" >> $GITHUB_STEP_SUMMARY
echo "(cat <<EOF" >> $GITHUB_STEP_SUMMARY
echo "apiVersion: postgresql.cnpg.io/v1" >> $GITHUB_STEP_SUMMARY
echo "kind: Cluster" >> $GITHUB_STEP_SUMMARY
echo "metadata:" >> $GITHUB_STEP_SUMMARY
echo " name: commitfest-$commitFestPatchID" >> $GITHUB_STEP_SUMMARY
echo "spec:" >> $GITHUB_STEP_SUMMARY
echo " imageName: $standardImage" >> $GITHUB_STEP_SUMMARY
echo " instances: 3" >> $GITHUB_STEP_SUMMARY
echo " storage:" >> $GITHUB_STEP_SUMMARY
echo " size: 1Gi" >> $GITHUB_STEP_SUMMARY
echo "EOF" >> $GITHUB_STEP_SUMMARY
echo ") | kubectl apply -f -" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY