Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .github/workflows/docker-image-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ jobs:
- Dockerfile-15
- Dockerfile-17
- Dockerfile-orioledb-17
- Dockerfile-multigres-17
- Dockerfile-multigres-orioledb-17
steps:
- name: Checkout Repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
Expand Down Expand Up @@ -96,15 +98,39 @@ jobs:
.

- name: Run image size analysis
if: ${{ !startsWith(matrix.dockerfile, 'Dockerfile-multigres-') }}
run: |
echo "=== Image Size Analysis for ${{ matrix.dockerfile }} ==="
nix run --accept-flake-config .#image-size-analyzer -- --image ${{ matrix.dockerfile }} --no-build

- name: Run Docker image tests
if: ${{ !startsWith(matrix.dockerfile, 'Dockerfile-multigres-') }}
run: |
echo "=== Running tests for ${{ matrix.dockerfile }} ==="
nix run --accept-flake-config .#docker-image-test -- --no-build ${{ matrix.dockerfile }}

- name: Verify multigres image (build-only smoke test)
if: ${{ startsWith(matrix.dockerfile, 'Dockerfile-multigres-') }}
run: |
echo "=== Smoke test for ${{ matrix.dockerfile }} ==="
VERSION="${{ matrix.dockerfile }}"
VERSION="${VERSION#Dockerfile-}"
# --entrypoint "" overrides the tail entrypoint so we can run commands directly
echo "Verifying PostgreSQL binaries are available..."
docker run --rm --entrypoint "" "pg-docker-test:${VERSION}" which initdb
docker run --rm --entrypoint "" "pg-docker-test:${VERSION}" which pg_ctl
docker run --rm --entrypoint "" "pg-docker-test:${VERSION}" which pg_isready
docker run --rm --entrypoint "" "pg-docker-test:${VERSION}" which psql
docker run --rm --entrypoint "" "pg-docker-test:${VERSION}" initdb --version
echo "Verifying configs are present..."
docker run --rm --entrypoint "" "pg-docker-test:${VERSION}" test -f /etc/postgresql/postgresql.conf
docker run --rm --entrypoint "" "pg-docker-test:${VERSION}" test -f /etc/postgresql-custom/supautils.conf
docker run --rm --entrypoint "" "pg-docker-test:${VERSION}" test -f /usr/lib/postgresql/bin/pgsodium_getkey.sh
docker run --rm --entrypoint "" "pg-docker-test:${VERSION}" test -d /docker-entrypoint-initdb.d/migrations
echo "Verifying docker-entrypoint.sh is NOT present..."
docker run --rm --entrypoint "" "pg-docker-test:${VERSION}" sh -c '! test -f /usr/local/bin/docker-entrypoint.sh'
echo "Multigres smoke test passed."

- name: Show container logs on failure
if: failure()
run: |
Expand Down
46 changes: 36 additions & 10 deletions .github/workflows/dockerhub-release-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
id: set-matrix
run: |
nix run nixpkgs#nushell -- -c 'let versions = (open ansible/vars.yml | get postgres_major)
let matrix = ($versions | each { |ver|
let base_matrix = ($versions | each { |ver|
let version = ($ver | str trim)
let dockerfile = $"Dockerfile-($version)"
if ($dockerfile | path exists) {
Expand All @@ -40,6 +40,23 @@ jobs:
}
} | compact)

# Also discover multigres variants for each base version
let multigres_matrix = ($versions | each { |ver|
let version = ($ver | str trim)
let mg_version = $"multigres-($version)"
let mg_dockerfile = $"Dockerfile-($mg_version)"
if ($mg_dockerfile | path exists) {
{
version: $mg_version,
dockerfile: $mg_dockerfile
}
} else {
null
}
} | compact)

let matrix = ($base_matrix | append $multigres_matrix)

let matrix_config = {
include: $matrix
}
Expand Down Expand Up @@ -95,23 +112,29 @@ jobs:
if [[ "${{ matrix.arch }}" == "arm64" ]]; then
pg_version=$(nix run nixpkgs#nushell -- -c '
let version = "${{ matrix.postgres.version }}"
let release_key = if ($version | str contains "orioledb") {
let is_multigres = ($version | str starts-with "multigres-")
let base_version = if $is_multigres { $version | str replace "multigres-" "" } else { $version }
let release_key = if ($base_version | str contains "orioledb") {
$"postgresorioledb-17"
} else {
$"postgres($version)"
$"postgres($base_version)"
}
open ansible/vars.yml | get postgres_release | get $release_key | str trim
let base_tag = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
if $is_multigres { $"($base_tag)-multigres" } else { $base_tag }
')
echo "pg_version=supabase/postgres:$pg_version" >> $GITHUB_OUTPUT
else
pg_version=$(nix run nixpkgs#nushell -- -c '
let version = "${{ matrix.postgres.version }}"
let release_key = if ($version | str contains "orioledb") {
let is_multigres = ($version | str starts-with "multigres-")
let base_version = if $is_multigres { $version | str replace "multigres-" "" } else { $version }
let release_key = if ($base_version | str contains "orioledb") {
$"postgresorioledb-17"
} else {
$"postgres($version)"
$"postgres($base_version)"
}
open ansible/vars.yml | get postgres_release | get $release_key | str trim
let base_tag = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
if $is_multigres { $"($base_tag)-multigres" } else { $base_tag }
')
echo "pg_version=supabase/postgres:$pg_version" >> $GITHUB_OUTPUT
fi
Expand Down Expand Up @@ -147,12 +170,15 @@ jobs:
run: |
nix run nixpkgs#nushell -- -c '
let version = "${{ matrix.version }}"
let release_key = if ($version | str contains "orioledb") {
let is_multigres = ($version | str starts-with "multigres-")
let base_version = if $is_multigres { $version | str replace "multigres-" "" } else { $version }
let release_key = if ($base_version | str contains "orioledb") {
$"postgresorioledb-17"
} else {
$"postgres($version)"
$"postgres($base_version)"
}
let pg_version = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
let base_tag = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
let pg_version = if $is_multigres { $"($base_tag)-multigres" } else { $base_tag }
$"pg_version=supabase/postgres:($pg_version)" | save --append $env.GITHUB_OUTPUT
'
- name: Output version
Expand Down
54 changes: 39 additions & 15 deletions .github/workflows/manual-docker-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
id: set-matrix
run: |
nix run nixpkgs#nushell -- -c 'let versions = (open ansible/vars.yml | get postgres_major)
let matrix = ($versions | each { |ver|
let base_matrix = ($versions | each { |ver|
let version = ($ver | str trim)
let dockerfile = $"Dockerfile-($version)"
if ($dockerfile | path exists) {
Expand All @@ -37,6 +37,23 @@ jobs:
}
} | compact)

# Also discover multigres variants for each base version
let multigres_matrix = ($versions | each { |ver|
let version = ($ver | str trim)
let mg_version = $"multigres-($version)"
let mg_dockerfile = $"Dockerfile-($mg_version)"
if ($mg_dockerfile | path exists) {
{
version: $mg_version,
dockerfile: $mg_dockerfile
}
} else {
null
}
} | compact)

let matrix = ($base_matrix | append $multigres_matrix)

let matrix_config = {
include: $matrix
}
Expand Down Expand Up @@ -92,35 +109,39 @@ jobs:
if [[ "${{ matrix.arch }}" == "arm64" ]]; then
pg_version=$(nix run nixpkgs#nushell -- -c '
let version = "${{ matrix.postgres.version }}"
let release_key = if ($version | str contains "orioledb") {
let is_multigres = ($version | str starts-with "multigres-")
let base_version = if $is_multigres { $version | str replace "multigres-" "" } else { $version }
let release_key = if ($base_version | str contains "orioledb") {
$"postgresorioledb-17"
} else {
$"postgres($version)"
$"postgres($base_version)"
}
let base_version = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
let base_tag = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
let final_version = if "${{ inputs.postgresVersion }}" != "" {
"${{ inputs.postgresVersion }}"
} else {
$base_version
$base_tag
}
$final_version | str trim
if $is_multigres { $"($final_version)-multigres" | str trim } else { $final_version | str trim }
')
echo "pg_version=supabase/postgres:$pg_version" >> $GITHUB_OUTPUT
else
pg_version=$(nix run nixpkgs#nushell -- -c '
let version = "${{ matrix.postgres.version }}"
let release_key = if ($version | str contains "orioledb") {
let is_multigres = ($version | str starts-with "multigres-")
let base_version = if $is_multigres { $version | str replace "multigres-" "" } else { $version }
let release_key = if ($base_version | str contains "orioledb") {
$"postgresorioledb-17"
} else {
$"postgres($version)"
$"postgres($base_version)"
}
let base_version = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
let base_tag = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
let final_version = if "${{ inputs.postgresVersion }}" != "" {
"${{ inputs.postgresVersion }}"
} else {
$base_version
$base_tag
}
$final_version | str trim
if $is_multigres { $"($final_version)-multigres" | str trim } else { $final_version | str trim }
')
echo "pg_version=supabase/postgres:$pg_version" >> $GITHUB_OUTPUT
fi
Expand Down Expand Up @@ -156,12 +177,15 @@ jobs:
run: |
nix run nixpkgs#nushell -- -c '
let version = "${{ matrix.version }}"
let release_key = if ($version | str contains "orioledb") {
let is_multigres = ($version | str starts-with "multigres-")
let base_version = if $is_multigres { $version | str replace "multigres-" "" } else { $version }
let release_key = if ($base_version | str contains "orioledb") {
$"postgresorioledb-17"
} else {
$"postgres($version)"
$"postgres($base_version)"
}
let pg_version = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
let base_tag = (open ansible/vars.yml | get postgres_release | get $release_key | str trim)
let pg_version = if $is_multigres { $"($base_tag)-multigres" } else { $base_tag }
$"pg_version=supabase/postgres:($pg_version)" | save --append $env.GITHUB_OUTPUT
'
- name: Output version
Expand Down Expand Up @@ -258,5 +282,5 @@ jobs:
matrix: ${{ fromJson(needs.combine_results.outputs.matrix) }}
uses: ./.github/workflows/mirror.yml
with:
version: ${{ inputs.postgresVersion != '' && inputs.postgresVersion || matrix.version }}
version: ${{ inputs.postgresVersion != '' && (contains(matrix.version, '-multigres') && format('{0}-multigres', inputs.postgresVersion) || inputs.postgresVersion) || matrix.version }}
secrets: inherit
Loading
Loading