Apply jsonb/hstore transforms in nested contexts (triggers, composite… #31
This file contains hidden or 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: CI | |
| on: | |
| push: | |
| branches: [master] | |
| pull_request: | |
| jobs: | |
| test: | |
| name: PG ${{ matrix.pg }} / PHP ${{ matrix.php }} | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # Every supported PostgreSQL against the distro PHP... | |
| pg: [11, 12, 13, 14, 15, 16, 17, 18] | |
| php: ["8.3"] | |
| # ...plus the other supported PHP versions against the newest PG. | |
| include: | |
| - { pg: 18, php: "8.1" } | |
| - { pg: 18, php: "8.2" } | |
| - { pg: 18, php: "8.4" } | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Add the PGDG apt repository | |
| run: | | |
| sudo install -d /usr/share/postgresql-common/pgdg | |
| sudo curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc \ | |
| -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc | |
| echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \ | |
| | sudo tee /etc/apt/sources.list.d/pgdg.list | |
| - name: Add the ondrej/php PPA (non-distro PHP versions) | |
| if: matrix.php != '8.3' | |
| run: sudo add-apt-repository -y ppa:ondrej/php | |
| - name: Install PostgreSQL ${{ matrix.pg }} and PHP ${{ matrix.php }} | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| postgresql-${{ matrix.pg }} postgresql-server-dev-${{ matrix.pg }} \ | |
| php${{ matrix.php }}-dev libphp${{ matrix.php }}-embed php${{ matrix.php }}-xml | |
| php-config${{ matrix.php }} --php-sapis | grep -q embed | |
| - name: Build and install PL/php | |
| run: | | |
| make PG_CONFIG=/usr/lib/postgresql/${{ matrix.pg }}/bin/pg_config \ | |
| PHP_CONFIG=php-config${{ matrix.php }} | |
| sudo make PG_CONFIG=/usr/lib/postgresql/${{ matrix.pg }}/bin/pg_config \ | |
| PHP_CONFIG=php-config${{ matrix.php }} install | |
| - name: Build and install jsonb_plphp | |
| run: | | |
| make -C jsonb_plphp \ | |
| PG_CONFIG=/usr/lib/postgresql/${{ matrix.pg }}/bin/pg_config \ | |
| PHP_CONFIG=php-config${{ matrix.php }} | |
| sudo make -C jsonb_plphp \ | |
| PG_CONFIG=/usr/lib/postgresql/${{ matrix.pg }}/bin/pg_config \ | |
| PHP_CONFIG=php-config${{ matrix.php }} install | |
| - name: Start the cluster | |
| run: | | |
| # the runner image disables automatic cluster creation | |
| sudo pg_createcluster ${{ matrix.pg }} main 2>/dev/null || true | |
| sudo pg_ctlcluster ${{ matrix.pg }} main start | |
| pg_lsclusters | |
| - name: Run the regression tests | |
| run: | | |
| port=$(pg_lsclusters | awk '$1 == "${{ matrix.pg }}" && $2 == "main" { print $3 }') | |
| # let the postgres user reach and write the workspace | |
| sudo chmod a+x /home/runner /home/runner/work /home/runner/work/PL-php | |
| chmod -R a+rwX . | |
| sudo -u postgres env PGPORT=$port \ | |
| make PG_CONFIG=/usr/lib/postgresql/${{ matrix.pg }}/bin/pg_config installcheck | |
| - name: Run the jsonb_plphp regression tests | |
| run: | | |
| port=$(pg_lsclusters | awk '$1 == "${{ matrix.pg }}" && $2 == "main" { print $3 }') | |
| sudo -u postgres env PGPORT=$port \ | |
| make -C jsonb_plphp \ | |
| PG_CONFIG=/usr/lib/postgresql/${{ matrix.pg }}/bin/pg_config installcheck | |
| - name: Show regression diffs on failure | |
| if: failure() | |
| run: | | |
| cat regression.diffs 2>/dev/null || true | |
| cat jsonb_plphp/regression.diffs 2>/dev/null || true | |
| asan: | |
| name: ASAN (PG 18 / PHP 8.3) | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Add the PGDG apt repository | |
| run: | | |
| sudo install -d /usr/share/postgresql-common/pgdg | |
| sudo curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc \ | |
| -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc | |
| echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \ | |
| | sudo tee /etc/apt/sources.list.d/pgdg.list | |
| - name: Install PostgreSQL 18 and PHP 8.3 | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y postgresql-18 postgresql-server-dev-18 \ | |
| php8.3-dev libphp8.3-embed | |
| - name: Build and install with AddressSanitizer | |
| run: | | |
| make PG_CONFIG=/usr/lib/postgresql/18/bin/pg_config PHP_CONFIG=php-config8.3 \ | |
| ASAN_FLAGS="-fsanitize=address -fno-omit-frame-pointer" | |
| sudo make PG_CONFIG=/usr/lib/postgresql/18/bin/pg_config PHP_CONFIG=php-config8.3 \ | |
| ASAN_FLAGS="-fsanitize=address -fno-omit-frame-pointer" install | |
| make -C jsonb_plphp PG_CONFIG=/usr/lib/postgresql/18/bin/pg_config PHP_CONFIG=php-config8.3 \ | |
| ASAN_FLAGS="-fsanitize=address -fno-omit-frame-pointer" | |
| sudo make -C jsonb_plphp PG_CONFIG=/usr/lib/postgresql/18/bin/pg_config PHP_CONFIG=php-config8.3 \ | |
| ASAN_FLAGS="-fsanitize=address -fno-omit-frame-pointer" install | |
| - name: Start the cluster with libasan preloaded | |
| run: | | |
| sudo pg_createcluster 18 main 2>/dev/null || true | |
| libasan=$(gcc -print-file-name=libasan.so) | |
| # PHP_INI_SCAN_DIR= : PHP dlopens shared extensions with | |
| # RTLD_DEEPBIND, which the sanitizer runtime rejects | |
| sudo -u postgres env LD_PRELOAD=$libasan PHP_INI_SCAN_DIR= \ | |
| ASAN_OPTIONS=detect_leaks=0:abort_on_error=1:log_path=/tmp/asan \ | |
| /usr/lib/postgresql/18/bin/pg_ctl -w -t 120 \ | |
| -D /var/lib/postgresql/18/main \ | |
| -o "-c config_file=/etc/postgresql/18/main/postgresql.conf" \ | |
| -l /tmp/pg-asan.log start | |
| - name: Run the regression tests under ASAN | |
| run: | | |
| port=$(pg_lsclusters | awk '$1 == 18 && $2 == "main" { print $3 }') | |
| sudo chmod a+x /home/runner /home/runner/work /home/runner/work/PL-php | |
| chmod -R a+rwX . | |
| # the cookbook test needs SimpleXML, unavailable with extensions off | |
| tests=$(grep '^REGRESS' Makefile | sed 's/REGRESS = //; s/ cookbook//') | |
| sudo -u postgres env PGPORT=$port \ | |
| make PG_CONFIG=/usr/lib/postgresql/18/bin/pg_config \ | |
| REGRESS="$tests" installcheck | |
| sudo -u postgres env PGPORT=$port \ | |
| make -C jsonb_plphp \ | |
| PG_CONFIG=/usr/lib/postgresql/18/bin/pg_config installcheck | |
| - name: Show ASAN reports and diffs on failure | |
| if: failure() | |
| run: | | |
| sudo cat /tmp/asan.* 2>/dev/null || true | |
| sudo tail -50 /tmp/pg-asan.log 2>/dev/null || true | |
| cat regression.diffs 2>/dev/null || true | |
| cat jsonb_plphp/regression.diffs 2>/dev/null || true |