mirror of https://github.com/citusdata/citus.git
179 lines
6.1 KiB
YAML
179 lines
6.1 KiB
YAML
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"
|