mirror of https://github.com/citusdata/citus.git
198 lines
6.8 KiB
YAML
198 lines
6.8 KiB
YAML
name: Build tests in packaging images
|
|
|
|
on:
|
|
pull_request:
|
|
types: [opened, reopened,synchronize]
|
|
|
|
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: |
|
|
# Postgres versions are stored in .circleci/config.yml file in "build-[pg-version] format. Below command
|
|
# extracts the versions and get the unique values.
|
|
pg_versions=`grep -Eo 'build-[[:digit:]]{2}' .circleci/config.yml|sed -e "s/^build-//"|sort|uniq|tr '\n' ','| head -c -1`
|
|
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
|
|
|
|
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 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: citus/packaging:${{ 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}"
|
|
|
|
## Install required packages to execute packaging tools for rpm based distros
|
|
yum install python3-pip python3-devel postgresql-devel -y
|
|
python3 -m pip install wheel
|
|
|
|
./.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}"
|
|
|
|
apt-get update -y
|
|
## Install required packages to execute packaging tools for deb based distros
|
|
apt-get install python3-dev python3-pip -y
|
|
apt-get purge -y python3-yaml
|
|
./.github/packaging/validate_build_output.sh "deb"
|