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@v3 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) }} # POSTGRES_VERSION: # - 16 # # Postgres removed support for CentOS 7 in PG 16. Below block is needed to # # keep the build for CentOS 7 working for PG 14 and PG 15. # # Once dependent systems drop support for Centos 7, we can remove this block. # include: # - packaging_docker_image: centos-7 # POSTGRES_VERSION: 14 # - packaging_docker_image: centos-7 # POSTGRES_VERSION: 15 # - packaging_docker_image: oraclelinux-7 # POSTGRES_VERSION: 14 # - packaging_docker_image: oraclelinux-7 # POSTGRES_VERSION: 15 # container: # image: ghcr.io/citusdata/packaging-test:${{ matrix.packaging_docker_image }}-pg${{ matrix.POSTGRES_VERSION }} # options: --user root # steps: # - name: Checkout repository # uses: actions/checkout@v3 # - 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: ghcr.io/citusdata/packaging-test:${{ 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}" ## Install required packages to execute packaging tools for deb based distros apt-get purge -y python3-yaml ./.github/packaging/validate_build_output.sh "deb"