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
38 changes: 33 additions & 5 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,19 @@ jobs:
test: { from: 15, to: 17, name: "15 to 17 (multi-step)" }
- platform: linux/amd64
test: { from: 14, to: 17, name: "14 to 17 (full upgrade)" }
# ARM64 test - just one to verify it works
- platform: linux/amd64
test: { from: 17, to: 18, name: "17 to 18" }
- platform: linux/amd64
test: { from: 16, to: 18, name: "16 to 18 (multi-step)" }
- platform: linux/amd64
test: { from: 15, to: 18, name: "15 to 18 (multi-step)" }
- platform: linux/amd64
test: { from: 14, to: 18, name: "14 to 18 (full upgrade)" }
# ARM64 tests - verify latest versions work
- platform: linux/arm64
test: { from: 14, to: 17, name: "14 to 17 (full upgrade)" }
- platform: linux/arm64
test: { from: 14, to: 18, name: "14 to 18 (full upgrade)" }
name: Test ${{ matrix.platform }} - ${{ matrix.test.name }}
steps:
- name: Checkout repository
Expand Down Expand Up @@ -191,10 +201,28 @@ jobs:
# Stop streaming logs
kill $LOGS_PID 2>/dev/null || true

# Stop and remove container
docker stop -t 10 $CONTAINER_ID 2>/dev/null || true
docker rm $CONTAINER_ID 2>/dev/null || true
exit 0
# Check if container exited during the sleep period
CONTAINER_STATE=$(docker inspect $CONTAINER_ID --format='{{.State.Status}}')
if [ "$CONTAINER_STATE" = "exited" ]; then
# Container has exited, check exit code
ACTUAL_EXIT_CODE=$(docker inspect $CONTAINER_ID --format='{{.State.ExitCode}}')

# Clean up container
docker rm $CONTAINER_ID 2>/dev/null || true

# Fail if container exited with non-zero code
if [ "$ACTUAL_EXIT_CODE" -ne 0 ]; then
echo "Container exited with code $ACTUAL_EXIT_CODE"
exit $ACTUAL_EXIT_CODE
fi

echo "Container completed successfully"
else
# Container is still running, stop and remove it
echo "Container still running, stopping gracefully"
docker stop -t 10 $CONTAINER_ID 2>/dev/null || true
docker rm $CONTAINER_ID 2>/dev/null || true
fi

- name: Verify upgraded data
run: |
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/build-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,10 @@ jobs:
docker tag ${REGISTRY}/${IMAGE_BASE}:to-15-${IMAGE_TAG} ${REGISTRY}/${IMAGE_BASE}:to-15-latest
docker tag ${REGISTRY}/${IMAGE_BASE}:to-16-${IMAGE_TAG} ${REGISTRY}/${IMAGE_BASE}:to-16-latest
docker tag ${REGISTRY}/${IMAGE_BASE}:to-17-${IMAGE_TAG} ${REGISTRY}/${IMAGE_BASE}:to-17-latest

docker tag ${REGISTRY}/${IMAGE_BASE}:to-18-${IMAGE_TAG} ${REGISTRY}/${IMAGE_BASE}:to-18-latest

docker push ${REGISTRY}/${IMAGE_BASE}:to-15-latest
docker push ${REGISTRY}/${IMAGE_BASE}:to-16-latest
docker push ${REGISTRY}/${IMAGE_BASE}:to-17-latest
docker push ${REGISTRY}/${IMAGE_BASE}:to-18-latest
fi
6 changes: 5 additions & 1 deletion .github/workflows/feature-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ on:
env:
GO_VERSION: '1.21'
IMAGE_NAME: 'postgres-enhanced-test'
POSTGRES_VERSION: '17'
POSTGRES_VERSION: '18'

jobs:
build-test-image:
Expand Down Expand Up @@ -339,6 +339,10 @@ jobs:
- { from: "14", to: "17", extensions: "pgvector,pgaudit,pg_cron" }
- { from: "15", to: "17", extensions: "pgvector,pgsodium,pgjwt" }
- { from: "16", to: "17", extensions: "pgvector,pg_stat_monitor,pg_net" }
- { from: "14", to: "18", extensions: "pgvector,pgaudit,pg_cron" }
- { from: "15", to: "18", extensions: "pgvector,pgsodium,pgjwt" }
- { from: "16", to: "18", extensions: "pgvector,pg_stat_monitor,pg_net" }
- { from: "17", to: "18", extensions: "pgvector,pgaudit,pg_cron" }
name: Upgrade Tests - PostgreSQL ${{ matrix.upgrade-path.from }} to ${{ matrix.upgrade-path.to }} with extensions

steps:
Expand Down
4 changes: 1 addition & 3 deletions .github/workflows/helm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,12 @@ on:
push:
branches:
- main
- master
paths:
- 'chart/**'
- '.github/workflows/helm.yml'
pull_request:
branches:
- main
- master
paths:
- 'chart/**'
- '.github/workflows/helm.yml'
Expand Down Expand Up @@ -147,4 +145,4 @@ jobs:
uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: checkov-results.sarif
sarif_file: checkov-results.sarif
87 changes: 69 additions & 18 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,21 @@ jobs:
exit 0
fi

# Otherwise, determine next patch version using svu
# Otherwise, determine next patch version using svu (only for branch pushes)
CURRENT_VERSION=$(svu current || echo "v0.0.0")
NEXT_VERSION=$(svu patch)

echo "Current version: $CURRENT_VERSION"
echo "Next version: $NEXT_VERSION"

# Validate version is proper semver
if [[ ! "$NEXT_VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Warning: Generated version '$NEXT_VERSION' is not valid semver, stopping workflow"
echo "version=" >> $GITHUB_OUTPUT
echo "is_new_version=false" >> $GITHUB_OUTPUT
exit 0
fi

echo "version=$NEXT_VERSION" >> $GITHUB_OUTPUT
echo "is_new_version=true" >> $GITHUB_OUTPUT

Expand All @@ -81,7 +89,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
pg_version: [16, 17]
pg_version: [16, 17, 18]
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand Down Expand Up @@ -119,6 +127,7 @@ jobs:
outputs:
pg16_version: ${{ steps.versions.outputs.pg16_version }}
pg17_version: ${{ steps.versions.outputs.pg17_version }}
pg18_version: ${{ steps.versions.outputs.pg18_version }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand All @@ -133,10 +142,16 @@ jobs:
with:
name: postgres-17

- name: Download PostgreSQL 18 image
uses: actions/download-artifact@v4
with:
name: postgres-18

- name: Load Docker images
run: |
docker load < postgres-16.tar
docker load < postgres-17.tar
docker load < postgres-18.tar

- name: Get PostgreSQL versions from built images
id: versions
Expand Down Expand Up @@ -207,6 +222,15 @@ jobs:
arch: arm64
platform: linux/arm64
pg_version: 17
# PostgreSQL 18 builds
- runner: ubuntu-latest
arch: amd64
platform: linux/amd64
pg_version: 18
- runner: ubuntu-24.04-arm
arch: arm64
platform: linux/arm64
pg_version: 18
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand All @@ -226,8 +250,10 @@ jobs:
run: |
if [ "${{ matrix.pg_version }}" = "16" ]; then
echo "minor_version=${{ needs.get-postgres-versions.outputs.pg16_version }}" >> $GITHUB_OUTPUT
else
elif [ "${{ matrix.pg_version }}" = "17" ]; then
echo "minor_version=${{ needs.get-postgres-versions.outputs.pg17_version }}" >> $GITHUB_OUTPUT
else
echo "minor_version=${{ needs.get-postgres-versions.outputs.pg18_version }}" >> $GITHUB_OUTPUT
fi

# Extract git tag (remove 'v' prefix if present)
Expand Down Expand Up @@ -263,7 +289,7 @@ jobs:
packages: write
strategy:
matrix:
pg_version: [16, 17]
pg_version: [16, 17, 18]
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand All @@ -283,8 +309,10 @@ jobs:
run: |
if [ "${{ matrix.pg_version }}" = "16" ]; then
echo "minor_version=${{ needs.get-postgres-versions.outputs.pg16_version }}" >> $GITHUB_OUTPUT
else
elif [ "${{ matrix.pg_version }}" = "17" ]; then
echo "minor_version=${{ needs.get-postgres-versions.outputs.pg17_version }}" >> $GITHUB_OUTPUT
else
echo "minor_version=${{ needs.get-postgres-versions.outputs.pg18_version }}" >> $GITHUB_OUTPUT
fi

# Extract git tag (remove 'v' prefix if present)
Expand Down Expand Up @@ -317,13 +345,13 @@ jobs:
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.versions.outputs.minor_version }}-${{ steps.versions.outputs.sha_short }}-amd64 \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.versions.outputs.minor_version }}-${{ steps.versions.outputs.sha_short }}-arm64

- name: Create and push latest tag for PostgreSQL 17
if: matrix.pg_version == '17'
- name: Create and push latest tag for PostgreSQL 18
if: matrix.pg_version == '18'
run: |
docker buildx imagetools create -t \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:17-amd64 \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:17-arm64
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:18-amd64 \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:18-arm64

create-release:
needs: [determine-version, build-postgres-cli, merge-manifests, get-postgres-versions]
Expand All @@ -345,6 +373,18 @@ jobs:
run: |
# Use version from determine-version job
VERSION="${{ needs.determine-version.outputs.version }}"

# Validate version is not empty and is proper semver
if [[ -z "$VERSION" ]]; then
echo "Error: VERSION is empty, skipping release creation"
exit 1
fi

if [[ ! "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Error: VERSION '$VERSION' is not valid semver"
exit 1
fi

# Remove 'v' prefix if present
TAG="${VERSION#v}"
echo "release_tag=$TAG" >> $GITHUB_OUTPUT
Expand All @@ -370,15 +410,20 @@ jobs:
- \`${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:17\` - Latest PostgreSQL 17 major version
- \`${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.get-postgres-versions.outputs.pg17_version }}\` - Specific minor version
- \`${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.get-postgres-versions.outputs.pg17_version }}-${{ steps.versions.outputs.sha_short }}\` - Version with commit SHA
- \`${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest\` - Points to PostgreSQL 17

### PostgreSQL 18 (Current: ${{ needs.get-postgres-versions.outputs.pg18_version }})
- \`${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:18\` - Latest PostgreSQL 18 major version
- \`${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.get-postgres-versions.outputs.pg18_version }}\` - Specific minor version
- \`${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.get-postgres-versions.outputs.pg18_version }}-${{ steps.versions.outputs.sha_short }}\` - Version with commit SHA
- \`${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest\` - Points to PostgreSQL 18

## Usage

### Basic Upgrade
\`\`\`bash
docker run --rm \\
-v /path/to/pgdata:/var/lib/postgresql/data \\
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:17
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:18
\`\`\`

### Upgrade and Start PostgreSQL
Expand All @@ -387,20 +432,21 @@ jobs:
-v /path/to/pgdata:/var/lib/postgresql/data \\
-e START_POSTGRES=true \\
-p 5432:5432 \\
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:17
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:18
\`\`\`

## Supported Upgrade Paths

- PostgreSQL 14 → 15, 16, 17
- PostgreSQL 15 → 16, 17
- PostgreSQL 16 → 17
- PostgreSQL 14 → 15, 16, 17, 18
- PostgreSQL 15 → 16, 17, 18
- PostgreSQL 16 → 17, 18
- PostgreSQL 17 → 18

Sequential upgrades are performed automatically (e.g., 14→15→16→17).
Sequential upgrades are performed automatically (e.g., 14→15→16→17→18).

## Environment Variables

- \`PG_VERSION\`: Target PostgreSQL version (16 or 17)
- \`PG_VERSION\`: Target PostgreSQL version (16, 17, or 18)
- \`START_POSTGRES\`: Start PostgreSQL after upgrade (default: false)
- \`AUTO_UPGRADE\`: Enable auto-upgrade (default: true)
- \`RESET_PASSWORD\`: Reset password on startup (default: false)
Expand Down Expand Up @@ -470,8 +516,13 @@ jobs:
PG17_TAG="pg17-${{ needs.get-postgres-versions.outputs.pg17_version }}-${SHA_SHORT}"
git tag -a "$PG17_TAG" -m "PostgreSQL 17.${{ needs.get-postgres-versions.outputs.pg17_version }} release"

# PostgreSQL 18 tags
PG18_TAG="pg18-${{ needs.get-postgres-versions.outputs.pg18_version }}-${SHA_SHORT}"
git tag -a "$PG18_TAG" -m "PostgreSQL 18.${{ needs.get-postgres-versions.outputs.pg18_version }} release"

# Push tags
git push origin "$PG16_TAG"
git push origin "$PG17_TAG"
git push origin "$PG18_TAG"

echo "Created tags: $PG16_TAG, $PG17_TAG"
echo "Created tags: $PG16_TAG, $PG17_TAG, $PG18_TAG"
11 changes: 9 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
target_version: ['15', '16', '17']
target_version: ['15', '16', '17', '18']
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand Down Expand Up @@ -51,6 +51,13 @@ jobs:
# Test all paths to 17
make test
;;
18)
# Test all paths to 18
make test-14-to-18
make test-15-to-18
make test-16-to-18
make test-17-to-18
;;
esac

test-complete-suite:
Expand Down Expand Up @@ -84,4 +91,4 @@ jobs:
# Run basic feature verification
task test:verify-extensions || echo "Extensions verification not available"
task test:verify-services || echo "Services verification not available"
fi
fi
Loading
Loading