Release 2.12.0 #14216
Workflow file for this run
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: Regression Linux i386 | |
"on": | |
push: | |
branches: | |
- main | |
- prerelease_test | |
paths-ignore: | |
- '**.md' | |
- 'LICENSE*' | |
- NOTICE | |
pull_request: | |
paths-ignore: | |
- '**.md' | |
- 'LICENSE*' | |
- NOTICE | |
jobs: | |
config: | |
runs-on: ubuntu-latest | |
outputs: | |
pg_latest: ${{ steps.setter.outputs.PG_LATEST }} | |
pg15_latest: ${{ steps.setter.outputs.PG15_LATEST }} | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
- name: Read configuration | |
id: setter | |
run: python .github/gh_config_reader.py | |
regress_linux_32bit: | |
name: PG${{ matrix.pg }} ${{ matrix.build_type }} linux-i386 | |
runs-on: ubuntu-latest | |
needs: config | |
container: | |
image: i386/debian:bookworm-slim | |
options: --privileged --ulimit core=-1 | |
env: | |
PG_SRC_DIR: pgbuild | |
PG_INSTALL_DIR: postgresql | |
MAKE_JOBS: 6 | |
CLANG: clang-14 | |
CC: clang-14 | |
CXX: clang++-14 | |
DEBIAN_FRONTEND: noninteractive | |
IGNORES: "append-* debug_notice transparent_decompression-* | |
transparent_decompress_chunk-* pg_dump | |
dist_move_chunk dist_param dist_insert remote_txn telemetry" | |
SKIPS: chunk_adaptive histogram_test | |
strategy: | |
fail-fast: false | |
matrix: | |
pg: ${{ fromJson(needs.config.outputs.pg_latest) }} | |
build_type: [ Debug ] | |
include: | |
- pg: ${{ fromJson(needs.config.outputs.pg15_latest) }} | |
ignores_version: partialize_finalize | |
steps: | |
# /__e/node16/bin/node (used by actions/checkout@v3) needs 64-bit libraries | |
- name: Install 64-bit libraries for GitHub actions | |
run: | | |
apt-get update | |
apt-get install -y lib64atomic1 lib64gcc-s1 lib64stdc++6 libc6-amd64 | |
- name: Install build dependencies | |
run: | | |
PG_MAJOR=$(echo "${{ matrix.pg }}" | sed -e 's![.].*!!') | |
echo '/tmp/core.%h.%e.%t' > /proc/sys/kernel/core_pattern | |
apt-get install -y gcc make cmake libssl-dev libkrb5-dev libipc-run-perl \ | |
libtest-most-perl sudo gdb git wget gawk lbzip2 flex bison lcov base-files \ | |
locales clang-14 llvm-14 llvm-14-dev llvm-14-tools postgresql-client | |
- name: Checkout TimescaleDB | |
uses: actions/checkout@v3 | |
# We are going to rebuild Postgres daily, so that it doesn't suddenly break | |
# ages after the original problem. | |
- name: Get date for build caching | |
id: get-date | |
run: | | |
echo "date=$(date +"%d")" >> $GITHUB_OUTPUT | |
# we cache the build directory instead of the install directory here | |
# because extension installation will write files to install directory | |
# leading to a tainted cache | |
- name: Cache PostgreSQL ${{ matrix.pg }} ${{ matrix.build_type }} | |
id: cache-postgresql | |
uses: actions/cache@v3 | |
with: | |
path: ~/${{ env.PG_SRC_DIR }} | |
key: "linux-32-bit-postgresql-${{ matrix.pg }}-${{ matrix.cc }}\ | |
-${{ steps.get-date.outputs.date }}-${{ hashFiles('.github/**') }}" | |
- name: Build PostgreSQL ${{ matrix.pg }} | |
if: steps.cache-postgresql.outputs.cache-hit != 'true' | |
run: | | |
wget -q -O postgresql.tar.bz2 \ | |
https://ftp.postgresql.org/pub/source/v${{ matrix.pg }}/postgresql-${{ matrix.pg }}.tar.bz2 | |
mkdir -p ~/$PG_SRC_DIR | |
tar --extract --file postgresql.tar.bz2 --directory ~/$PG_SRC_DIR --strip-components 1 | |
cd ~/$PG_SRC_DIR | |
# When building on i386 with the clang compiler, Postgres requires -msse2 to be used | |
./configure --prefix=$HOME/$PG_INSTALL_DIR --with-openssl \ | |
--without-readline --without-zlib --without-libxml --enable-cassert \ | |
--enable-debug --with-llvm LLVM_CONFIG=llvm-config-14 CFLAGS="-msse2" | |
make -j $MAKE_JOBS | |
make -j $MAKE_JOBS -C src/test/isolation | |
make -j $MAKE_JOBS -C contrib/postgres_fdw | |
- name: Install PostgreSQL ${{ matrix.pg }} | |
run: | | |
useradd postgres | |
make -C ~/$PG_SRC_DIR install | |
make -C ~/$PG_SRC_DIR/contrib/postgres_fdw install | |
chown -R postgres:postgres $HOME/$PG_INSTALL_DIR | |
sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen | |
locale-gen | |
- name: Build TimescaleDB | |
run: | | |
# The owner of the checkout directory and the files do not match. Add the directory to | |
# Git's "safe.directory" setting. Otherwise git would complain about | |
# 'detected dubious ownership in repository' | |
git config --global --add safe.directory $(pwd) | |
./bootstrap -DCMAKE_BUILD_TYPE="${{ matrix.build_type }}" -DPG_SOURCE_DIR=~/$PG_SRC_DIR \ | |
-DPG_PATH=~/$PG_INSTALL_DIR -DREQUIRE_ALL_TESTS=ON | |
make -j $MAKE_JOBS -C build | |
make -C build install | |
chown -R postgres:postgres . | |
- name: make installcheck | |
id: installcheck | |
shell: bash | |
run: | | |
set -o pipefail | |
export LANG=C.UTF-8 | |
# PostgreSQL cannot be run as root. So, switch to postgres user. | |
sudo -u postgres make -k -C build installcheck IGNORES="${IGNORES} \ | |
${{ matrix.ignores_version }}" SKIPS="${SKIPS}" | tee installcheck.log | |
- name: Show regression diffs | |
if: always() | |
id: collectlogs | |
shell: bash | |
run: | | |
find . -name regression.diffs -exec cat {} + > regression.log | |
find . -name postmaster.log -exec cat {} + > postgres.log | |
if [[ -s regression.log ]]; then echo "regression_diff=true" >>$GITHUB_OUTPUT; fi | |
grep -e 'FAILED' -e 'failed (ignored)' installcheck.log || true | |
cat regression.log | |
- name: Coredumps | |
if: always() | |
id: coredumps | |
shell: bash | |
run: | | |
# wait in case there are in-progress coredumps | |
sleep 10 | |
if compgen -G "/tmp/core*" > /dev/null; then | |
PG_MAJOR=$(echo "${{ matrix.pg }}" | sed -e 's![.].*!!') | |
apt-get install postgresql-${PG_MAJOR}-dbgsym >/dev/null | |
for file in /tmp/core* | |
do | |
gdb /usr/lib/postgresql/${PG_MAJOR}/bin/postgres -c $file <<<" | |
set verbose on | |
set trace-commands on | |
show debug-file-directory | |
printf "'"'"query = '%s'\n\n"'"'", debug_query_string | |
bt full | |
# We try to find ExceptionalCondition frame to print the failed condition | |
# for searching in logs. | |
frame function ExceptionalCondition | |
printf "'"'"condition = '%s'\n"'"'", conditionName | |
# Hopefully now we should be around the failed assertion, print where | |
# we are. | |
up 1 | |
list | |
info args | |
info locals | |
" | tee -a stacktrace.log | |
done | |
echo "coredumps=true" >>$GITHUB_OUTPUT | |
exit 1 | |
fi | |
- name: Save regression diffs | |
if: always() && steps.collectlogs.outputs.regression_diff == 'true' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Regression diff linux-i386 PG${{ matrix.pg }} | |
path: | | |
regression.log | |
installcheck.log | |
- name: Save stacktraces | |
if: always() && steps.coredumps.outputs.coredumps == 'true' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Stacktraces linux-i386 PG${{ matrix.pg }} | |
path: stacktrace.log | |
- name: Save PostgreSQL log | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: PostgreSQL log linux-i386 PG${{ matrix.pg }} | |
path: postgres.log | |
- name: Save TAP test logs | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: TAP test logs ${{ matrix.os }} ${{ matrix.name }} ${{ matrix.pg }} | |
path: | | |
build/test/tmp_check/log | |
build/tsl/test/tmp_check/log | |
- name: Upload test results to the database | |
if: always() | |
shell: bash | |
env: | |
# GitHub Actions allow you neither to use the env context for the job name, | |
# nor to access the job name from the step context, so we have to | |
# duplicate it to work around this nonsense. | |
JOB_NAME: PG${{ matrix.pg }} ${{ matrix.build_type }} linux-i386 | |
CI_STATS_DB: ${{ secrets.CI_STATS_DB }} | |
GITHUB_EVENT_NAME: ${{ github.event_name }} | |
GITHUB_REF_NAME: ${{ github.ref_name }} | |
GITHUB_REPOSITORY: ${{ github.repository }} | |
GITHUB_RUN_ATTEMPT: ${{ github.run_attempt }} | |
GITHUB_RUN_ID: ${{ github.run_id }} | |
GITHUB_RUN_NUMBER: ${{ github.run_number }} | |
JOB_STATUS: ${{ job.status }} | |
run: | | |
if [[ "${{ github.event_name }}" == "pull_request" ]] ; | |
then | |
GITHUB_PR_NUMBER="${{ github.event.number }}" | |
else | |
GITHUB_PR_NUMBER=0 | |
fi | |
export GITHUB_PR_NUMBER | |
scripts/upload_ci_stats.sh |