Skip to content
Merged
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
57 changes: 31 additions & 26 deletions .github/workflows/docker-image-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,18 +52,20 @@ jobs:
base_ref: ${{ github.base_ref }}

docker-image-test:
name: Test ${{ matrix.dockerfile }}
name: Test ${{ matrix.name }}
needs: check-changes
if: needs.check-changes.outputs.should_run == 'true'
runs-on: large-linux-arm
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
dockerfile:
- Dockerfile-15
- Dockerfile-17
- Dockerfile-orioledb-17
include:
- { dockerfile: Dockerfile-15, target: "", name: 15 }
- { dockerfile: Dockerfile-17, target: "", name: 17 }
- { dockerfile: Dockerfile-orioledb-17, target: "", name: orioledb-17 }
- { dockerfile: Dockerfile-multigres, target: variant-17, name: multigres-17 }
- { dockerfile: Dockerfile-multigres, target: variant-orioledb-17, name: multigres-orioledb-17 }
steps:
- name: Checkout Repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
Expand All @@ -86,31 +88,38 @@ jobs:

- name: Build Docker image
run: |
echo "Building ${{ matrix.dockerfile }}..."
VERSION="${{ matrix.dockerfile }}"
VERSION="${VERSION#Dockerfile-}"
# Build with tags expected by both tools
docker build -f ${{ matrix.dockerfile }} \
-t "pg-docker-test:${VERSION}" \
-t "supabase-postgres:${VERSION}-analyze" \
echo "Building ${{ matrix.name }}..."
TARGET_ARG=""
if [ -n "${{ matrix.target }}" ]; then
TARGET_ARG="--target ${{ matrix.target }}"
fi
docker build -f "${{ matrix.dockerfile }}" $TARGET_ARG \
-t "pg-docker-test:${{ matrix.name }}" \
-t "supabase-postgres:${{ matrix.name }}-analyze" \
.
- name: Run image size analysis
if: ${{ matrix.target == '' }}
run: |
echo "=== Image Size Analysis for ${{ matrix.dockerfile }} ==="
nix run --accept-flake-config .#image-size-analyzer -- --image ${{ matrix.dockerfile }} --no-build
echo "=== Image Size Analysis for ${{ matrix.name }} ==="
nix run --accept-flake-config .#image-size-analyzer -- --image Dockerfile-${{ matrix.name }} --no-build
- name: Run Docker image tests
if: ${{ matrix.target == '' }}
run: |
echo "=== Running tests for ${{ matrix.name }} ==="
nix run --accept-flake-config .#docker-image-test -- --no-build Dockerfile-${{ matrix.name }}
- name: Run multigres Docker image tests
if: ${{ matrix.target != '' }}
run: |
echo "=== Running tests for ${{ matrix.dockerfile }} ==="
nix run --accept-flake-config .#docker-image-test -- --no-build ${{ matrix.dockerfile }}
echo "=== Running tests for ${{ matrix.name }} ==="
nix run --accept-flake-config .#docker-image-test -- --no-build --target ${{ matrix.target }} ${{ matrix.dockerfile }}
- name: Show container logs on failure
if: failure()
run: |
VERSION="${{ matrix.dockerfile }}"
VERSION="${VERSION#Dockerfile-}"
CONTAINER_NAME=$(docker ps -a --filter "name=pg-test-${VERSION}" --format "{{.Names}}" | head -1)
CONTAINER_NAME=$(docker ps -a --filter "name=pg-test-${{ matrix.name }}" --format "{{.Names}}" | head -1)
if [[ -n "$CONTAINER_NAME" ]]; then
echo "=== Container logs for $CONTAINER_NAME ==="
docker logs "$CONTAINER_NAME" 2>&1 || true
Expand All @@ -119,13 +128,9 @@ jobs:
- name: Cleanup
if: always()
run: |
VERSION="${{ matrix.dockerfile }}"
VERSION="${VERSION#Dockerfile-}"
# Remove test containers
docker ps -a --filter "name=pg-test-${VERSION}" -q | xargs -r docker rm -f || true
# Remove test images
docker rmi "pg-docker-test:${VERSION}" || true
docker rmi "supabase-postgres:${VERSION}-analyze" || true
docker ps -a --filter "name=pg-test-${{ matrix.name }}" -q | xargs -r docker rm -f || true
docker rmi "pg-docker-test:${{ matrix.name }}" || true
docker rmi "supabase-postgres:${{ matrix.name }}-analyze" || true
skip-notification:
name: Docker Image Test (Skipped)
Expand Down
53 changes: 41 additions & 12 deletions .github/workflows/dockerhub-release-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,39 @@ 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) {
{
version: $version,
dockerfile: $dockerfile
dockerfile: $dockerfile,
target: "production"
}
} else {
null
}
} | compact)
# Discover multigres variants by checking for matching targets in Dockerfile-multigres
let multigres_matrix = ($versions | each { |ver|
let version = ($ver | str trim)
let mg_version = $"multigres-($version)"
let mg_dockerfile = "Dockerfile-multigres"
let mg_target = $"variant-($version)"
if ($mg_dockerfile | path exists) and (open --raw $mg_dockerfile | str contains $"AS ($mg_target)") {
{
version: $mg_version,
dockerfile: $mg_dockerfile,
target: $mg_target
}
} else {
null
}
} | compact)
let matrix = ($base_matrix | append $multigres_matrix)
let matrix_config = {
include: $matrix
}
Expand Down Expand Up @@ -95,23 +115,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 All @@ -121,7 +147,7 @@ jobs:
push: true
build-args: |
${{ needs.build.outputs.build_args }}
target: production
target: ${{ matrix.postgres.target }}
tags: ${{ steps.image.outputs.pg_version }}_${{ matrix.arch }}
platforms: linux/${{ matrix.arch }}
cache-from: type=gha,scope=${{ github.ref_name }}-latest-${{ matrix.arch }}
Expand All @@ -147,12 +173,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
61 changes: 44 additions & 17 deletions .github/workflows/manual-docker-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,39 @@ 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) {
{
version: $version,
dockerfile: $dockerfile
dockerfile: $dockerfile,
target: "production"
}
} else {
null
}
} | compact)
# Discover multigres variants by checking for matching targets in Dockerfile-multigres
let multigres_matrix = ($versions | each { |ver|
let version = ($ver | str trim)
let mg_version = $"multigres-($version)"
let mg_dockerfile = "Dockerfile-multigres"
let mg_target = $"variant-($version)"
if ($mg_dockerfile | path exists) and (open --raw $mg_dockerfile | str contains $"AS ($mg_target)") {
{
version: $mg_version,
dockerfile: $mg_dockerfile,
target: $mg_target
}
} else {
null
}
} | compact)
let matrix = ($base_matrix | append $multigres_matrix)
let matrix_config = {
include: $matrix
}
Expand Down Expand Up @@ -92,35 +112,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 All @@ -130,7 +154,7 @@ jobs:
push: true
build-args: |
${{ needs.build.outputs.build_args }}
target: production
target: ${{ matrix.postgres.target }}
tags: ${{ steps.image.outputs.pg_version }}_${{ matrix.arch }}
platforms: linux/${{ matrix.arch }}
cache-from: type=gha,scope=${{ github.ref_name }}-latest-${{ matrix.arch }}
Expand All @@ -156,12 +180,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 +285,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