PG17 compatibility: Resolve compilation issues #6557
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build tests in packaging images | |
on: | |
pull_request: | |
types: [opened, reopened,synchronize] | |
merge_group: | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
get_postgres_versions_from_file: | |
runs-on: ubuntu-latest | |
outputs: | |
pg_versions: ${{ steps.get-postgres-versions.outputs.pg_versions }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
- name: Get Postgres Versions | |
id: get-postgres-versions | |
run: | | |
set -euxo pipefail | |
# Postgres versions are stored in .github/workflows/build_and_test.yml | |
# file in json strings with major and full keys. | |
# 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_array="[ ${pg_versions} ]" | |
echo "Supported PG Versions: ${pg_versions_array}" | |
# Below line is needed to set the output variable to be used in the next job | |
echo "pg_versions=${pg_versions_array}" >> $GITHUB_OUTPUT | |
shell: bash | |
rpm_build_tests: | |
name: rpm_build_tests | |
needs: get_postgres_versions_from_file | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
# While we use separate images for different Postgres versions in rpm | |
# based distros | |
# For this reason, we need to use a "matrix" to generate names of | |
# rpm images, e.g. citus/packaging:centos-7-pg12 | |
packaging_docker_image: | |
- oraclelinux-8 | |
- almalinux-8 | |
- almalinux-9 | |
POSTGRES_VERSION: ${{ fromJson(needs.get_postgres_versions_from_file.outputs.pg_versions) }} | |
container: | |
image: citus/packaging:${{ matrix.packaging_docker_image }}-pg${{ matrix.POSTGRES_VERSION }} | |
options: --user root | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set Postgres and python parameters for rpm based distros | |
run: | | |
echo "/usr/pgsql-${{ matrix.POSTGRES_VERSION }}/bin" >> $GITHUB_PATH | |
echo "/root/.pyenv/bin:$PATH" >> $GITHUB_PATH | |
echo "PACKAGING_PYTHON_VERSION=3.8.16" >> $GITHUB_ENV | |
- name: Configure | |
run: | | |
echo "Current Shell:$0" | |
echo "GCC Version: $(gcc --version)" | |
./configure 2>&1 | tee output.log | |
- name: Make clean | |
run: | | |
make clean | |
- name: Make | |
run: | | |
git config --global --add safe.directory ${GITHUB_WORKSPACE} | |
make CFLAGS="-Wno-missing-braces" -sj$(cat /proc/cpuinfo | grep "core id" | wc -l) 2>&1 | tee -a output.log | |
# Check the exit code of the make command | |
make_exit_code=${PIPESTATUS[0]} | |
# If the make command returned a non-zero exit code, exit with the same code | |
if [[ $make_exit_code -ne 0 ]]; then | |
echo "make command failed with exit code $make_exit_code" | |
exit $make_exit_code | |
fi | |
- name: Make install | |
run: | | |
make CFLAGS="-Wno-missing-braces" install 2>&1 | tee -a output.log | |
- name: Validate output | |
env: | |
POSTGRES_VERSION: ${{ matrix.POSTGRES_VERSION }} | |
PACKAGING_DOCKER_IMAGE: ${{ matrix.packaging_docker_image }} | |
run: | | |
echo "Postgres version: ${POSTGRES_VERSION}" | |
./.github/packaging/validate_build_output.sh "rpm" | |
deb_build_tests: | |
name: deb_build_tests | |
needs: get_postgres_versions_from_file | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
# On deb based distros, we use the same docker image for | |
# builds based on different Postgres versions because deb | |
# based images include all postgres installations. | |
# For this reason, we have multiple runs --which is 3 today-- | |
# for each deb based image and we use POSTGRES_VERSION to set | |
# PG_CONFIG variable in each of those runs. | |
packaging_docker_image: | |
- debian-buster-all | |
- debian-bookworm-all | |
- debian-bullseye-all | |
- ubuntu-focal-all | |
- ubuntu-jammy-all | |
POSTGRES_VERSION: ${{ fromJson(needs.get_postgres_versions_from_file.outputs.pg_versions) }} | |
container: | |
image: citus/packaging:${{ matrix.packaging_docker_image }} | |
options: --user root | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Set pg_config path and python parameters for deb based distros | |
run: | | |
echo "PG_CONFIG=/usr/lib/postgresql/${{ matrix.POSTGRES_VERSION }}/bin/pg_config" >> $GITHUB_ENV | |
echo "/root/.pyenv/bin:$PATH" >> $GITHUB_PATH | |
echo "PACKAGING_PYTHON_VERSION=3.8.16" >> $GITHUB_ENV | |
- name: Configure | |
run: | | |
echo "Current Shell:$0" | |
echo "GCC Version: $(gcc --version)" | |
./configure 2>&1 | tee output.log | |
- name: Make clean | |
run: | | |
make clean | |
- name: Make | |
shell: bash | |
run: | | |
set -e | |
git config --global --add safe.directory ${GITHUB_WORKSPACE} | |
make -sj$(cat /proc/cpuinfo | grep "core id" | wc -l) 2>&1 | tee -a output.log | |
# Check the exit code of the make command | |
make_exit_code=${PIPESTATUS[0]} | |
# If the make command returned a non-zero exit code, exit with the same code | |
if [[ $make_exit_code -ne 0 ]]; then | |
echo "make command failed with exit code $make_exit_code" | |
exit $make_exit_code | |
fi | |
- name: Make install | |
run: | | |
make install 2>&1 | tee -a output.log | |
- name: Validate output | |
env: | |
POSTGRES_VERSION: ${{ matrix.POSTGRES_VERSION }} | |
PACKAGING_DOCKER_IMAGE: ${{ matrix.packaging_docker_image }} | |
run: | | |
echo "Postgres version: ${POSTGRES_VERSION}" | |
./.github/packaging/validate_build_output.sh "deb" |