-
Notifications
You must be signed in to change notification settings - Fork 896
134 lines (122 loc) · 5.37 KB
/
abi.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# Test minimum and maximum ABI compatible postgres version
#
# Build timescaledb against specific postgres version and then run our
# tests with that library loaded in a different postgres version.
# This is to detect changes in required minimum/maximum postgres versions
# for our built packages.
# This test is expected to fail when upstream does ABI incompatible changes
# in a new minor postgresql version.
name: ABI Test
"on":
schedule:
# run daily 20:00 on main branch
- cron: '0 20 * * *'
push:
branches:
- prerelease_test
- trigger/abi
pull_request:
paths: .github/workflows/abi.yaml
jobs:
config:
runs-on: ubuntu-latest
outputs:
pg14_abi_min: ${{ steps.config.outputs.pg14_abi_min }}
pg15_abi_min: ${{ steps.config.outputs.pg15_abi_min }}
pg16_abi_min: ${{ steps.config.outputs.pg16_abi_min }}
pg17_abi_min: ${{ steps.config.outputs.pg17_abi_min }}
pg14_latest: ${{ steps.config.outputs.pg14_latest }}
pg15_latest: ${{ steps.config.outputs.pg15_latest }}
pg16_latest: ${{ steps.config.outputs.pg16_latest }}
pg17_latest: ${{ steps.config.outputs.pg17_latest }}
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Read configuration
id: config
run: python .github/gh_config_reader.py
abi_test:
name: ABI Test ${{ matrix.dir }} PG${{ matrix.pg }}
runs-on: ubuntu-latest
needs: config
strategy:
fail-fast: false
matrix:
pg: [ 14, 15, 16, 17 ]
include:
- pg: 14
builder: ${{ fromJson(needs.config.outputs.pg14_abi_min) }}-alpine
tester: ${{ fromJson(needs.config.outputs.pg14_latest) }}-alpine3.19
- pg: 15
builder: ${{ fromJson(needs.config.outputs.pg15_abi_min) }}-alpine
tester: ${{ fromJson(needs.config.outputs.pg15_latest) }}-alpine3.19
- pg: 16
builder: ${{ fromJson(needs.config.outputs.pg16_abi_min) }}-alpine
tester: ${{ fromJson(needs.config.outputs.pg16_latest) }}-alpine3.19
- pg: 17
builder: ${{ fromJson(needs.config.outputs.pg17_abi_min) }}-alpine
tester: ${{ fromJson(needs.config.outputs.pg17_latest) }}-alpine3.19
steps:
- name: Checkout TimescaleDB
uses: actions/checkout@v4
- name: Build extension with ${{ matrix.builder }}
run: |
BUILDER_IMAGE="postgres:${{matrix.builder}}"
docker pull ${BUILDER_IMAGE}
docker buildx imagetools inspect ${BUILDER_IMAGE}
docker run -i --rm -v $(pwd):/mnt -e EXTRA_PKGS="${EXTRA_PKGS}" ${BUILDER_IMAGE} bash <<"EOF"
apk add cmake gcc make build-base krb5-dev git ${EXTRA_PKGS}
# We run the same extension on different docker images, old versions
# have OpenSSL 1.1 and the new versions have OpenSSL 3, so we try to
# pin the 1.1. Note that depending on PG version, both images might
# have 1.1 or 3, so we first try to install the versioned 1.1 package,
# and if it's not present, it means the unversioned package is 1.1, so
# we install it.
apk add openssl1.1-compat-dev || apk add openssl-dev
git config --global --add safe.directory /mnt
cd /mnt
BUILD_DIR=build_abi BUILD_FORCE_REMOVE=true ./bootstrap
make -C build_abi install
mkdir -p build_abi/install_ext build_abi/install_lib
cp `pg_config --sharedir`/extension/timescaledb*.{control,sql} build_abi/install_ext
cp `pg_config --pkglibdir`/timescaledb*.so build_abi/install_lib
EOF
- name: Run tests on server ${{ matrix.tester }}
run: |
TEST_IMAGE="postgres:${{ matrix.tester }}"
docker pull ${TEST_IMAGE}
docker buildx imagetools inspect ${TEST_IMAGE}
docker run -i --rm -v $(pwd):/mnt -e EXTRA_PKGS="${EXTRA_PKGS}" ${TEST_IMAGE} bash <<"EOF"
apk add cmake gcc make build-base krb5-dev sudo ${EXTRA_PKGS}
apk add openssl1.1-compat-dev || apk add openssl-dev
cd /mnt
cp build_abi/install_ext/* `pg_config --sharedir`/extension/
cp build_abi/install_lib/* `pg_config --pkglibdir`
chown -R postgres /mnt
set -o pipefail
[ -f /usr/bin/gmake ] || ln -s /usr/bin/make /usr/bin/gmake
sudo -u postgres make -C build_abi -k regresscheck regresscheck-t \
regresscheck-shared IGNORES="${{matrix.ignores}}" | tee installcheck.log
EOF
- name: Show regression diffs
if: always()
id: collectlogs
run: |
sudo chmod a+rw .
sudo find build_abi -name regression.diffs -exec cat {} + > regression.log
sudo find build_abi -name postmaster.log -exec cat {} + > postmaster.log
if [[ -s regression.log ]]; then echo "regression_diff=true" >>$GITHUB_OUTPUT; fi
grep -e 'FAILED' -e 'failed (ignored)' -e 'not ok' installcheck.log || true
cat regression.log
- name: Save regression diffs
if: always() && steps.collectlogs.outputs.regression_diff == 'true'
uses: actions/upload-artifact@v4
with:
name: Regression diff ABI Breakage ${{ matrix.dir }} PG${{ matrix.pg }}
path: regression.log
- name: Save postmaster.log
if: always()
uses: actions/upload-artifact@v4
with:
name: PostgreSQL log ABI Breakage ${{ matrix.dir }} PG${{ matrix.pg }}
path: postmaster.log