Update PostgreSQL version compatibility check to include version 18

Add support for PostgreSQL version 18 in build and test workflow

pipeline isn’t picking up the 18 line because your regex for the full field only allows digits and dots ([0-9.]+), so it skips the "full": "18beta1" entry.

Fix image suffix formatting in build parameters
m3hm3t/pg18_support
Mehmet Yilmaz 2025-05-08 15:46:04 +00:00
parent 5deaf9a616
commit dfe5ae1e7a
5 changed files with 40 additions and 11 deletions

View File

@ -31,12 +31,13 @@ jobs:
pgupgrade_image_name: "ghcr.io/citusdata/pgupgradetester" pgupgrade_image_name: "ghcr.io/citusdata/pgupgradetester"
style_checker_image_name: "ghcr.io/citusdata/stylechecker" style_checker_image_name: "ghcr.io/citusdata/stylechecker"
style_checker_tools_version: "0.8.18" style_checker_tools_version: "0.8.18"
sql_snapshot_pg_version: "17.5" sql_snapshot_pg_version: "17.4"
image_suffix: "-dev-d28f316" image_suffix: "-dev-3bae8b2"
pg15_version: '{ "major": "15", "full": "15.13" }' pg15_version: '{ "major": "15", "full": "15.12" }'
pg16_version: '{ "major": "16", "full": "16.9" }' pg16_version: '{ "major": "16", "full": "16.8" }'
pg17_version: '{ "major": "17", "full": "17.5" }' pg17_version: '{ "major": "17", "full": "17.4" }'
upgrade_pg_versions: "15.13-16.9-17.5" pg18_version: '{ "major": "18", "full": "18beta1" }'
upgrade_pg_versions: "15.12-16.8-17.4-18beta1"
steps: steps:
# Since GHA jobs need at least one step we use a noop step here. # Since GHA jobs need at least one step we use a noop step here.
- name: Set up parameters - name: Set up parameters
@ -113,6 +114,7 @@ jobs:
- ${{ needs.params.outputs.pg15_version }} - ${{ needs.params.outputs.pg15_version }}
- ${{ needs.params.outputs.pg16_version }} - ${{ needs.params.outputs.pg16_version }}
- ${{ needs.params.outputs.pg17_version }} - ${{ needs.params.outputs.pg17_version }}
- ${{ needs.params.outputs.pg18_version }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: container:
image: "${{ matrix.image_name }}:${{ fromJson(matrix.pg_version).full }}${{ matrix.image_suffix }}" image: "${{ matrix.image_name }}:${{ fromJson(matrix.pg_version).full }}${{ matrix.image_suffix }}"
@ -144,6 +146,7 @@ jobs:
- ${{ needs.params.outputs.pg15_version }} - ${{ needs.params.outputs.pg15_version }}
- ${{ needs.params.outputs.pg16_version }} - ${{ needs.params.outputs.pg16_version }}
- ${{ needs.params.outputs.pg17_version }} - ${{ needs.params.outputs.pg17_version }}
- ${{ needs.params.outputs.pg18_version }}
make: make:
- check-split - check-split
- check-multi - check-multi
@ -173,6 +176,10 @@ jobs:
pg_version: ${{ needs.params.outputs.pg17_version }} pg_version: ${{ needs.params.outputs.pg17_version }}
suite: regress suite: regress
image_name: ${{ needs.params.outputs.fail_test_image_name }} image_name: ${{ needs.params.outputs.fail_test_image_name }}
- make: check-failure
pg_version: ${{ needs.params.outputs.pg18_version }}
suite: regress
image_name: ${{ needs.params.outputs.fail_test_image_name }}
- make: check-enterprise-failure - make: check-enterprise-failure
pg_version: ${{ needs.params.outputs.pg15_version }} pg_version: ${{ needs.params.outputs.pg15_version }}
suite: regress suite: regress
@ -185,6 +192,10 @@ jobs:
pg_version: ${{ needs.params.outputs.pg17_version }} pg_version: ${{ needs.params.outputs.pg17_version }}
suite: regress suite: regress
image_name: ${{ needs.params.outputs.fail_test_image_name }} image_name: ${{ needs.params.outputs.fail_test_image_name }}
- make: check-enterprise-failure
pg_version: ${{ needs.params.outputs.pg18_version }}
suite: regress
image_name: ${{ needs.params.outputs.fail_test_image_name }}
- make: check-pytest - make: check-pytest
pg_version: ${{ needs.params.outputs.pg15_version }} pg_version: ${{ needs.params.outputs.pg15_version }}
suite: regress suite: regress
@ -197,6 +208,10 @@ jobs:
pg_version: ${{ needs.params.outputs.pg17_version }} pg_version: ${{ needs.params.outputs.pg17_version }}
suite: regress suite: regress
image_name: ${{ needs.params.outputs.fail_test_image_name }} image_name: ${{ needs.params.outputs.fail_test_image_name }}
- make: check-pytest
pg_version: ${{ needs.params.outputs.pg18_version }}
suite: regress
image_name: ${{ needs.params.outputs.fail_test_image_name }}
- make: installcheck - make: installcheck
suite: cdc suite: cdc
image_name: ${{ needs.params.outputs.test_image_name }} image_name: ${{ needs.params.outputs.test_image_name }}
@ -209,6 +224,10 @@ jobs:
suite: cdc suite: cdc
image_name: ${{ needs.params.outputs.test_image_name }} image_name: ${{ needs.params.outputs.test_image_name }}
pg_version: ${{ needs.params.outputs.pg17_version }} pg_version: ${{ needs.params.outputs.pg17_version }}
- make: installcheck
suite: cdc
image_name: ${{ needs.params.outputs.test_image_name }}
pg_version: ${{ needs.params.outputs.pg18_version }}
- make: check-query-generator - make: check-query-generator
pg_version: ${{ needs.params.outputs.pg15_version }} pg_version: ${{ needs.params.outputs.pg15_version }}
suite: regress suite: regress
@ -221,6 +240,10 @@ jobs:
pg_version: ${{ needs.params.outputs.pg17_version }} pg_version: ${{ needs.params.outputs.pg17_version }}
suite: regress suite: regress
image_name: ${{ needs.params.outputs.fail_test_image_name }} image_name: ${{ needs.params.outputs.fail_test_image_name }}
- make: check-query-generator
pg_version: ${{ needs.params.outputs.pg18_version }}
suite: regress
image_name: ${{ needs.params.outputs.fail_test_image_name }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: container:
image: "${{ matrix.image_name }}:${{ fromJson(matrix.pg_version).full }}${{ needs.params.outputs.image_suffix }}" image: "${{ matrix.image_name }}:${{ fromJson(matrix.pg_version).full }}${{ needs.params.outputs.image_suffix }}"
@ -264,6 +287,7 @@ jobs:
- ${{ needs.params.outputs.pg15_version }} - ${{ needs.params.outputs.pg15_version }}
- ${{ needs.params.outputs.pg16_version }} - ${{ needs.params.outputs.pg16_version }}
- ${{ needs.params.outputs.pg17_version }} - ${{ needs.params.outputs.pg17_version }}
- ${{ needs.params.outputs.pg18_version }}
parallel: [0,1,2,3,4,5] # workaround for running 6 parallel jobs parallel: [0,1,2,3,4,5] # workaround for running 6 parallel jobs
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@ -314,6 +338,10 @@ jobs:
new_pg_major: 17 new_pg_major: 17
- old_pg_major: 15 - old_pg_major: 15
new_pg_major: 17 new_pg_major: 17
- old_pg_major: 17
new_pg_major: 18
- old_pg_major: 16
new_pg_major: 18
env: env:
old_pg_major: ${{ matrix.old_pg_major }} old_pg_major: ${{ matrix.old_pg_major }}
new_pg_major: ${{ matrix.new_pg_major }} new_pg_major: ${{ matrix.new_pg_major }}
@ -402,7 +430,7 @@ jobs:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }} CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: container:
image: ${{ needs.params.outputs.test_image_name }}:${{ fromJson(needs.params.outputs.pg17_version).full }}${{ needs.params.outputs.image_suffix }} image: ${{ needs.params.outputs.test_image_name }}:${{ fromJson(needs.params.outputs.pg18_version).full }}${{ needs.params.outputs.image_suffix }}
needs: needs:
- params - params
- test-citus - test-citus
@ -514,7 +542,7 @@ jobs:
name: Test flakyness name: Test flakyness
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: container:
image: ${{ needs.params.outputs.fail_test_image_name }}:${{ fromJson(needs.params.outputs.pg17_version).full }}${{ needs.params.outputs.image_suffix }} image: ${{ needs.params.outputs.fail_test_image_name }}:${{ fromJson(needs.params.outputs.pg18_version).full }}${{ needs.params.outputs.image_suffix }}
options: --user root options: --user root
env: env:
runs: 8 runs: 8

View File

@ -29,7 +29,7 @@ jobs:
# Postgres versions are stored in .github/workflows/build_and_test.yml # Postgres versions are stored in .github/workflows/build_and_test.yml
# file in json strings with major and full keys. # file in json strings with major and full keys.
# Below command extracts the versions and get the unique values. # Below command extracts the versions and get the unique values.
pg_versions=$(cat .github/workflows/build_and_test.yml | grep -oE '"major": "[0-9]+", "full": "[0-9.]+"' | sed -E 's/"major": "([0-9]+)", "full": "([0-9.]+)"/\1/g' | sort | uniq | tr '\n', ',') pg_versions=$(cat .github/workflows/build_and_test.yml | grep -oE '"major": "[0-9]+", "full": "[^"]+"' | sed -E 's/.*"major": "([0-9]+)".*/\1/' | sort -n | uniq | tr '\n' ',')
pg_versions_array="[ ${pg_versions} ]" pg_versions_array="[ ${pg_versions} ]"
echo "Supported PG Versions: ${pg_versions_array}" echo "Supported PG Versions: ${pg_versions_array}"
# Below line is needed to set the output variable to be used in the next job # Below line is needed to set the output variable to be used in the next job

1
citus-tools Submodule

@ -0,0 +1 @@
Subproject commit 3376bd6845f0614908ed304f5033bd644c82d3bf

2
configure vendored
View File

@ -2588,7 +2588,7 @@ fi
if test "$with_pg_version_check" = no; then if test "$with_pg_version_check" = no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: building against PostgreSQL $version_num (skipped compatibility check)" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: building against PostgreSQL $version_num (skipped compatibility check)" >&5
$as_echo "$as_me: building against PostgreSQL $version_num (skipped compatibility check)" >&6;} $as_echo "$as_me: building against PostgreSQL $version_num (skipped compatibility check)" >&6;}
elif test "$version_num" != '15' -a "$version_num" != '16' -a "$version_num" != '17'; then elif test "$version_num" != '15' -a "$version_num" != '16' -a "$version_num" != '17' -a "$version_num" != '18'; then
as_fn_error $? "Citus is not compatible with the detected PostgreSQL version ${version_num}." "$LINENO" 5 as_fn_error $? "Citus is not compatible with the detected PostgreSQL version ${version_num}." "$LINENO" 5
else else
{ $as_echo "$as_me:${as_lineno-$LINENO}: building against PostgreSQL $version_num" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: building against PostgreSQL $version_num" >&5

View File

@ -80,7 +80,7 @@ AC_SUBST(with_pg_version_check)
if test "$with_pg_version_check" = no; then if test "$with_pg_version_check" = no; then
AC_MSG_NOTICE([building against PostgreSQL $version_num (skipped compatibility check)]) AC_MSG_NOTICE([building against PostgreSQL $version_num (skipped compatibility check)])
elif test "$version_num" != '15' -a "$version_num" != '16' -a "$version_num" != '17'; then elif test "$version_num" != '15' -a "$version_num" != '16' -a "$version_num" != '17' -a "$version_num" != '18'; then
AC_MSG_ERROR([Citus is not compatible with the detected PostgreSQL version ${version_num}.]) AC_MSG_ERROR([Citus is not compatible with the detected PostgreSQL version ${version_num}.])
else else
AC_MSG_NOTICE([building against PostgreSQL $version_num]) AC_MSG_NOTICE([building against PostgreSQL $version_num])