Skip to content

fix: preload pg_textsearch in shared_preload_libraries #26

fix: preload pg_textsearch in shared_preload_libraries

fix: preload pg_textsearch in shared_preload_libraries #26

Workflow file for this run

name: Build and Push Docker Image
on:
push:
branches: [main]
tags: ['v*']
pull_request:
branches: [main]
env:
GHCR_REGISTRY: ghcr.io
GHCR_IMAGE: constructive-io/docker/postgres-plus
DOCKERHUB_IMAGE: constructiveio/postgres
PG_VERSION: '17'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-docker-postgres-plus
cancel-in-progress: true
jobs:
build-postgres-plus:
strategy:
fail-fast: false
matrix:
include:
- platform: linux/amd64
arch: amd64
runner: ubuntu-latest
- platform: linux/arm64
arch: arm64
runner: ubuntu-24.04-arm
runs-on: ${{ matrix.runner }}
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GHCR
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ${{ env.GHCR_REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Log in to Docker Hub
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.GHCR_REGISTRY }}/${{ env.GHCR_IMAGE }}
${{ env.DOCKERHUB_IMAGE }}
tags: |
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
type=raw,value=${{ env.PG_VERSION }},enable=${{ github.ref == 'refs/heads/main' }}
type=sha,format=short,prefix=
type=semver,pattern={{version}},enable=${{ startsWith(github.ref, 'refs/tags/v') }}
type=semver,pattern={{major}}.{{minor}},enable=${{ startsWith(github.ref, 'refs/tags/v') }}
- name: Build (no push, PR only, amd64)
if: github.event_name == 'pull_request' && matrix.platform == 'linux/amd64'
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
platforms: linux/amd64
push: false
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
PG_VERSION=${{ env.PG_VERSION }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Build & push by digest (GHCR)
if: github.event_name != 'pull_request'
id: build-ghcr
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
platforms: ${{ matrix.platform }}
labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,name=${{ env.GHCR_REGISTRY }}/${{ env.GHCR_IMAGE }},push-by-digest=true,push=true
build-args: |
PG_VERSION=${{ env.PG_VERSION }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Build & push by digest (Docker Hub)
if: github.event_name != 'pull_request'
id: build-dockerhub
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
platforms: ${{ matrix.platform }}
labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,name=${{ env.DOCKERHUB_IMAGE }},push-by-digest=true,push=true
build-args: |
PG_VERSION=${{ env.PG_VERSION }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Export GHCR digest
if: github.event_name != 'pull_request'
run: |
mkdir -p "${{ runner.temp }}/digests-ghcr"
digest="${{ steps.build-ghcr.outputs.digest }}"
touch "${{ runner.temp }}/digests-ghcr/${digest#sha256:}"
- name: Export Docker Hub digest
if: github.event_name != 'pull_request'
run: |
mkdir -p "${{ runner.temp }}/digests-dockerhub"
digest="${{ steps.build-dockerhub.outputs.digest }}"
touch "${{ runner.temp }}/digests-dockerhub/${digest#sha256:}"
- name: Upload GHCR digest
if: github.event_name != 'pull_request'
uses: actions/upload-artifact@v4
with:
name: digests-ghcr-${{ matrix.arch }}
path: ${{ runner.temp }}/digests-ghcr/*
- name: Upload Docker Hub digest
if: github.event_name != 'pull_request'
uses: actions/upload-artifact@v4
with:
name: digests-dockerhub-${{ matrix.arch }}
path: ${{ runner.temp }}/digests-dockerhub/*
publish-manifests:
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
needs: build-postgres-plus
permissions:
contents: read
packages: write
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ${{ env.GHCR_REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Download GHCR digests
uses: actions/download-artifact@v4
with:
pattern: digests-ghcr-*
path: ${{ runner.temp }}/digests-ghcr
merge-multiple: true
- name: Download Docker Hub digests
uses: actions/download-artifact@v4
with:
pattern: digests-dockerhub-*
path: ${{ runner.temp }}/digests-dockerhub
merge-multiple: true
- name: Extract GHCR metadata
id: meta-ghcr
uses: docker/metadata-action@v5
with:
images: ${{ env.GHCR_REGISTRY }}/${{ env.GHCR_IMAGE }}
tags: |
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
type=raw,value=${{ env.PG_VERSION }},enable=${{ github.ref == 'refs/heads/main' }}
type=sha,format=short,prefix=
type=semver,pattern={{version}},enable=${{ startsWith(github.ref, 'refs/tags/v') }}
type=semver,pattern={{major}}.{{minor}},enable=${{ startsWith(github.ref, 'refs/tags/v') }}
- name: Extract Docker Hub metadata
id: meta-dockerhub
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKERHUB_IMAGE }}
tags: |
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
type=raw,value=${{ env.PG_VERSION }},enable=${{ github.ref == 'refs/heads/main' }}
type=sha,format=short,prefix=
type=semver,pattern={{version}},enable=${{ startsWith(github.ref, 'refs/tags/v') }}
type=semver,pattern={{major}}.{{minor}},enable=${{ startsWith(github.ref, 'refs/tags/v') }}
- name: Create and push GHCR multi-arch manifests
run: |
set -euo pipefail
image="${{ env.GHCR_REGISTRY }}/${{ env.GHCR_IMAGE }}"
digest_dir="${{ runner.temp }}/digests-ghcr"
if [ ! -d "$digest_dir" ]; then
echo "No digests directory found at $digest_dir"
exit 1
fi
digests=""
for digest_file in "$digest_dir"/*; do
digest="$(basename "$digest_file")"
digests="$digests $image@sha256:$digest"
done
if [ -z "$digests" ]; then
echo "No digests found to create manifest"
exit 1
fi
echo "Creating GHCR manifests for tags:"
echo "${{ steps.meta-ghcr.outputs.tags }}"
echo "${{ steps.meta-ghcr.outputs.tags }}" | while read -r tag; do
[ -z "$tag" ] && continue
echo "Creating multi-arch manifest for $tag"
docker buildx imagetools create -t "$tag" $digests
done
- name: Create and push Docker Hub multi-arch manifests
run: |
set -euo pipefail
image="${{ env.DOCKERHUB_IMAGE }}"
digest_dir="${{ runner.temp }}/digests-dockerhub"
if [ ! -d "$digest_dir" ]; then
echo "No digests directory found at $digest_dir"
exit 1
fi
digests=""
for digest_file in "$digest_dir"/*; do
digest="$(basename "$digest_file")"
digests="$digests $image@sha256:$digest"
done
if [ -z "$digests" ]; then
echo "No digests found to create manifest"
exit 1
fi
echo "Creating Docker Hub manifests for tags:"
echo "${{ steps.meta-dockerhub.outputs.tags }}"
echo "${{ steps.meta-dockerhub.outputs.tags }}" | while read -r tag; do
[ -z "$tag" ] && continue
echo "Creating multi-arch manifest for $tag"
docker buildx imagetools create -t "$tag" $digests
done