From cdea343cc9b8c3547791028ae1c228d3fdaaed10 Mon Sep 17 00:00:00 2001
From: Lakshmi Narayanan Sreethar <lakshmi@timescale.com>
Date: Thu, 6 Jul 2023 21:49:23 +0530
Subject: [PATCH] Remove PG12 support from github workflows

---
 .github/ci_settings.py                        |  6 +--
 .github/gh_matrix_builder.py                  | 45 +++++--------------
 .github/workflows/abi.yaml                    | 14 +-----
 .github/workflows/apt-arm-packages.yaml       |  2 +-
 .github/workflows/apt-packages.yaml           |  2 +-
 .../workflows/linux-32bit-build-and-test.yaml |  2 +-
 .github/workflows/memory-tests.yaml           |  2 +-
 .github/workflows/rpm-packages.yaml           |  2 +-
 .../windows-build-and-test-ignored.yaml       |  2 +-
 .github/workflows/windows-build-and-test.yaml | 17 ++-----
 .github/workflows/windows-packages.yaml       | 10 +----
 coccinelle/ereport_pg12.cocci                 | 24 ----------
 12 files changed, 24 insertions(+), 104 deletions(-)
 delete mode 100644 coccinelle/ereport_pg12.cocci

diff --git a/.github/ci_settings.py b/.github/ci_settings.py
index 4051846d4..c06f38f74 100644
--- a/.github/ci_settings.py
+++ b/.github/ci_settings.py
@@ -10,10 +10,6 @@
 # LATEST is the maximum postgres version that is supported
 # ABI_MIN is the minimum postgres version required when the extension was build against LATEST
 
-PG12_EARLIEST = "12.0"
-PG12_LATEST = "12.15"
-PG12_ABI_MIN = "12.8"
-
 PG13_EARLIEST = "13.2"
 PG13_LATEST = "13.11"
 PG13_ABI_MIN = "13.5"
@@ -26,4 +22,4 @@ PG15_EARLIEST = "15.0"
 PG15_LATEST = "15.3"
 PG15_ABI_MIN = "15.0"
 
-PG_LATEST = [PG12_LATEST, PG13_LATEST, PG14_LATEST, PG15_LATEST]
+PG_LATEST = [PG13_LATEST, PG14_LATEST, PG15_LATEST]
diff --git a/.github/gh_matrix_builder.py b/.github/gh_matrix_builder.py
index 0ef68c679..ab71fd578 100755
--- a/.github/gh_matrix_builder.py
+++ b/.github/gh_matrix_builder.py
@@ -26,8 +26,6 @@ import json
 import os
 import subprocess
 from ci_settings import (
-    PG12_EARLIEST,
-    PG12_LATEST,
     PG13_EARLIEST,
     PG13_LATEST,
     PG14_EARLIEST,
@@ -144,7 +142,6 @@ def macos_config(overrides):
                 "compressed_collation",
             },
             "os": "macos-11",
-            "pg": PG12_LATEST,
             "pg_extra_args": "--with-libraries=/usr/local/opt/openssl/lib --with-includes=/usr/local/opt/openssl/include",
             "pginstallcheck": True,
             "tsdb_build_args": "-DASSERTIONS=ON -DREQUIRE_ALL_TESTS=ON -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl",
@@ -172,10 +169,6 @@ if event_type == "pull_request":
     }
 
 # always test debug build on latest of all supported pg versions
-m["include"].append(
-    build_debug_config({"pg": PG12_LATEST, "ignored_tests": ignored_tests})
-)
-
 m["include"].append(
     build_debug_config(
         {
@@ -195,7 +188,7 @@ m["include"].append(
     build_debug_config({"pg": PG15_LATEST, "ignored_tests": ignored_tests})
 )
 
-# test latest postgres release in MacOS
+# test timescaledb with release config on latest postgres release in MacOS
 m["include"].append(
     build_release_config(
         macos_config({"pg": PG15_LATEST, "ignored_tests": ignored_tests})
@@ -210,24 +203,6 @@ m["include"].append(
 # to a specific branch like prerelease_test we add additional
 # entries to the matrix
 if event_type != "pull_request":
-    # add debug test for first supported PG12 version
-    # most of the IGNORES are the isolation tests because the output format has changed between versions
-    # chunk_utils, telemetry and tablespace are skipped because of use after free bugs in postgres 12.0 which those tests hit
-    pg12_debug_earliest = {
-        "pg": PG12_EARLIEST,
-        # The early releases don't build with llvm 14.
-        "pg_extra_args": "--enable-debug --enable-cassert --without-llvm",
-        "skipped_tests": {"chunk_utils", "tablespace", "telemetry"},
-        "ignored_tests": {
-            "cluster-12",
-            "cagg_policy",
-            "debug_notice",
-            "dist_gapfill_pushdown-12",
-        },
-        "tsdb_build_args": "-DWARNINGS_AS_ERRORS=ON -DASSERTIONS=ON -DPG_ISOLATION_REGRESS=OFF",
-    }
-    m["include"].append(build_debug_config(pg12_debug_earliest))
-
     # add debug test for first supported PG13 version
     pg13_debug_earliest = {
         "pg": PG13_EARLIEST,
@@ -259,26 +234,26 @@ if event_type != "pull_request":
         build_debug_config({"pg": PG15_EARLIEST, "ignored_tests": ignored_tests})
     )
 
-    # add debug test for MacOS
-    m["include"].append(build_debug_config(macos_config({})))
+    # add debug tests for timescaledb on latest postgres release in MacOS
+    m["include"].append(
+        build_debug_config(
+            macos_config({"pg": PG15_LATEST, "ignored_tests": ignored_tests})
+        )
+    )
 
     # add release test for latest pg releases
-    m["include"].append(build_release_config({"pg": PG12_LATEST}))
     m["include"].append(build_release_config({"pg": PG13_LATEST}))
     m["include"].append(build_release_config({"pg": PG14_LATEST}))
     m["include"].append(
         build_release_config({"pg": PG15_LATEST, "ignored_tests": ignored_tests})
     )
 
-    # add apache only test for latest pg
-    m["include"].append(build_apache_config({"pg": PG12_LATEST}))
-    m["include"].append(build_apache_config({"pg": PG13_LATEST}))
-    m["include"].append(build_apache_config({"pg": PG14_LATEST}))
-    m["include"].append(build_apache_config({"pg": PG15_LATEST}))
+    # add apache only test for latest pg versions
+    for PG_LATEST_VER in PG_LATEST:
+        m["include"].append(build_apache_config({"pg": PG_LATEST_VER}))
 
     # to discover issues with upcoming releases we run CI against
     # the stable branches of supported PG releases
-    m["include"].append(build_debug_config({"pg": 12, "snapshot": "snapshot"}))
     m["include"].append(build_debug_config({"pg": 13, "snapshot": "snapshot"}))
     m["include"].append(
         build_debug_config(
diff --git a/.github/workflows/abi.yaml b/.github/workflows/abi.yaml
index 8e783174e..a91848167 100644
--- a/.github/workflows/abi.yaml
+++ b/.github/workflows/abi.yaml
@@ -18,11 +18,9 @@ jobs:
   config:
     runs-on: ubuntu-latest
     outputs:
-      pg12_abi_min: ${{ steps.config.outputs.pg12_abi_min }}
       pg13_abi_min: ${{ steps.config.outputs.pg13_abi_min }}
       pg14_abi_min: ${{ steps.config.outputs.pg14_abi_min }}
       pg15_abi_min: ${{ steps.config.outputs.pg15_abi_min }}
-      pg12_latest: ${{ steps.config.outputs.pg12_latest }}
       pg13_latest: ${{ steps.config.outputs.pg13_latest }}
       pg14_latest: ${{ steps.config.outputs.pg14_latest }}
       pg15_latest: ${{ steps.config.outputs.pg15_latest }}
@@ -41,18 +39,10 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        test: [ "12backward", "12forward", "13backward", "13forward",
-          "14backward", "14forward", "15backward", "15forward" ]
+        test: [ "13backward", "13forward", "14backward", "14forward",
+          "15backward", "15forward" ]
         os: [ windows-2019 ]
         include:
-          - test: 12backward
-            pg: 12
-            builder: ${{ fromJson(needs.config.outputs.pg12_latest) }}
-            tester: ${{ fromJson(needs.config.outputs.pg12_abi_min ) }}
-          - test: 12forward
-            pg: 12
-            builder: ${{ fromJson(needs.config.outputs.pg12_abi_min ) }}
-            tester: ${{ fromJson(needs.config.outputs.pg12_latest) }}
           - test: 13backward
             pg: 13
             builder: ${{ fromJson(needs.config.outputs.pg13_latest) }}
diff --git a/.github/workflows/apt-arm-packages.yaml b/.github/workflows/apt-arm-packages.yaml
index 4bdfea29d..c13cb2a54 100644
--- a/.github/workflows/apt-arm-packages.yaml
+++ b/.github/workflows/apt-arm-packages.yaml
@@ -19,7 +19,7 @@ jobs:
         # Debian images:  10 (buster), 11 (bullseye)
         # Ubuntu images:  20.04 LTS (focal), 22.04 (jammy)
         image: [ "debian:10-slim","debian:11-slim","ubuntu:focal", "ubuntu:jammy"]
-        pg: [ 12, 13, 14, 15 ]
+        pg: [ 13, 14, 15 ]
 
     steps:
     - name: Setup emulation
diff --git a/.github/workflows/apt-packages.yaml b/.github/workflows/apt-packages.yaml
index 05a0b36ea..76ed5be3e 100644
--- a/.github/workflows/apt-packages.yaml
+++ b/.github/workflows/apt-packages.yaml
@@ -23,7 +23,7 @@ jobs:
         # Debian images:  10 (buster), 11 (bullseye)
         # Ubuntu images:  18.04 LTS (bionic), 20.04 LTS (focal), 21.10 (impish), 22.04 (jammy), 22.10 (kinetic)
         image: [ "debian:10-slim", "debian:11-slim", "ubuntu:focal", "ubuntu:jammy", "ubuntu:kinetic"]
-        pg: [ 12, 13, 14, 15 ]
+        pg: [ 13, 14, 15 ]
         license: [ "TSL", "Apache"]
         include:
           - license: Apache
diff --git a/.github/workflows/linux-32bit-build-and-test.yaml b/.github/workflows/linux-32bit-build-and-test.yaml
index 9115a2f61..fc74c349e 100644
--- a/.github/workflows/linux-32bit-build-and-test.yaml
+++ b/.github/workflows/linux-32bit-build-and-test.yaml
@@ -36,7 +36,7 @@ jobs:
       env:
         DEBIAN_FRONTEND: noninteractive
         IGNORES: "append-* debug_notice transparent_decompression-*
-          transparent_decompress_chunk-* plan_skip_scan-12 pg_dump 
+          transparent_decompress_chunk-* pg_dump
           dist_move_chunk dist_param dist_insert remote_txn telemetry"
         SKIPS: chunk_adaptive histogram_test
     strategy:
diff --git a/.github/workflows/memory-tests.yaml b/.github/workflows/memory-tests.yaml
index 1b715b8de..a4c5f0fcd 100644
--- a/.github/workflows/memory-tests.yaml
+++ b/.github/workflows/memory-tests.yaml
@@ -11,7 +11,7 @@ jobs:
     runs-on: ubuntu-20.04
     strategy:
       matrix:
-        pg: [12, 13, 14, 15]
+        pg: [13, 14, 15]
       fail-fast: false
 
     steps:
diff --git a/.github/workflows/rpm-packages.yaml b/.github/workflows/rpm-packages.yaml
index 93dc5a43e..b02725281 100644
--- a/.github/workflows/rpm-packages.yaml
+++ b/.github/workflows/rpm-packages.yaml
@@ -20,7 +20,7 @@ jobs:
       fail-fast: false
       matrix:
         image: [ "centos:centos7", "rockylinux:8", "rockylinux:9" ]
-        pg: [ 12, 13, 14, 15 ]
+        pg: [ 13, 14, 15 ]
         license: [ "TSL", "Apache"]
         include:
           - license: Apache
diff --git a/.github/workflows/windows-build-and-test-ignored.yaml b/.github/workflows/windows-build-and-test-ignored.yaml
index 75881643c..7dbe17f0a 100644
--- a/.github/workflows/windows-build-and-test-ignored.yaml
+++ b/.github/workflows/windows-build-and-test-ignored.yaml
@@ -43,7 +43,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        pg: [ 12, 13, 14, 15 ]
+        pg: [ 13, 14, 15 ]
         os: [ windows-2022 ]
         build_type: ${{ fromJson(needs.config.outputs.build_type) }}
     steps:
diff --git a/.github/workflows/windows-build-and-test.yaml b/.github/workflows/windows-build-and-test.yaml
index 65dfea44a..0a04a074e 100644
--- a/.github/workflows/windows-build-and-test.yaml
+++ b/.github/workflows/windows-build-and-test.yaml
@@ -21,7 +21,6 @@ jobs:
     runs-on: ubuntu-latest
     outputs:
       build_type: ${{ steps.build_type.outputs.build_type }}
-      pg12_latest: ${{ steps.config.outputs.pg12_latest }}
       pg13_latest: ${{ steps.config.outputs.pg13_latest }}
       pg14_latest: ${{ steps.config.outputs.pg14_latest }}
       pg15_latest: ${{ steps.config.outputs.pg15_latest }}
@@ -49,7 +48,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        pg: [ 12, 13, 14, 15 ]
+        pg: [ 13, 14, 15 ]
         os: [ windows-2022 ]
         build_type: ${{ fromJson(needs.config.outputs.build_type) }}
         ignores: ["chunk_adaptive metadata telemetry"]
@@ -58,9 +57,6 @@ jobs:
           data_fetcher dist_compression dist_remote_error remote_txn"]
         pg_config: ["-cfsync=off -cstatement_timeout=60s"]
         include:
-          - pg: 12
-            pkg_version: ${{ fromJson(needs.config.outputs.pg12_latest) }}
-            tsl_skips_version: dist_partial_agg-12
           - pg: 13
             pkg_version: ${{ fromJson(needs.config.outputs.pg13_latest) }}
             tsl_skips_version: dist_grant-13 dist_partial_agg-13
@@ -148,7 +144,6 @@ jobs:
       run: cmake --install build_win --config ${{ matrix.build_type }}
 
     - name: Setup postgres cluster
-      if: matrix.pg != '12'
       run: |
         ~/PostgreSQL/${{ matrix.pg }}/bin/initdb -U postgres -A trust --locale=us --encoding=UTF8
         mkdir -p ${{ env.TABLESPACE1 }}\_default
@@ -172,14 +167,12 @@ jobs:
         ~/PostgreSQL/${{ matrix.pg }}/bin/psql -U postgres -d postgres -c 'SHOW data_directory;'
 
     - name: Install postgres for test runner
-      if: matrix.pg != '12'
       shell: wsl-bash {0}
       run: |
         yes | /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh || true
         apt-get install -y --force-yes postgresql-server-dev-${{ matrix.pg }}
 
     - name: Run tests
-      if: matrix.pg != '12'
       shell: wsl-bash {0}
       run: |
         export TEST_TABLESPACE1_PREFIX='${{ env.TABLESPACE1 }}'
@@ -195,7 +188,6 @@ jobs:
         make -C build_wsl regresschecklocal IGNORES="${{ matrix.ignores }}" | tee -a installcheck.log
 
     - name: Setup postgres cluster for TSL tests
-      if: matrix.pg != '12'
       run: |
         ~/PostgreSQL/${{ matrix.pg }}/bin/pg_ctl stop
         timeout 10
@@ -208,7 +200,6 @@ jobs:
         ~/PostgreSQL/${{ matrix.pg }}/bin/psql -U postgres -d postgres -c 'CREATE USER root SUPERUSER LOGIN;'
 
     - name: Run TSL tests
-      if: matrix.pg != '12'
       shell: wsl-bash {0}
       run: |
         export TEST_TABLESPACE1_PREFIX='${{ env.TABLESPACE1 }}'
@@ -226,7 +217,7 @@ jobs:
 
     - name: Show regression diffs
       id: collectlogs
-      if: always() && matrix.pg != '12'
+      if: always()
       env:
         WSLENV: GITHUB_OUTPUT/p
       shell: wsl-bash {0}
@@ -237,7 +228,7 @@ jobs:
         cat regression.log
 
     - name: Save regression diffs
-      if: always() && matrix.pg != '12' && steps.collectlogs.outputs.regression_diff == 'true'
+      if: always() && steps.collectlogs.outputs.regression_diff == 'true'
       uses: actions/upload-artifact@v3
       with:
         name: Regression diff ${{ matrix.os }} ${{ matrix.name }} ${{ matrix.pg }}
@@ -253,7 +244,7 @@ jobs:
         path: postgres.log
 
     - name: Upload test results to the database
-      if: always() && matrix.pg != '12'
+      if: always()
       shell: wsl-bash {0}
       env:
         # Update when adding new variables.
diff --git a/.github/workflows/windows-packages.yaml b/.github/workflows/windows-packages.yaml
index e1cacd273..9a18c64f6 100644
--- a/.github/workflows/windows-packages.yaml
+++ b/.github/workflows/windows-packages.yaml
@@ -14,11 +14,9 @@ jobs:
   config:
     runs-on: ubuntu-latest
     outputs:
-      pg12_earliest: ${{ steps.config.outputs.pg12_abi_min }}
       pg13_earliest: ${{ steps.config.outputs.pg13_abi_min }}
       pg14_earliest: ${{ steps.config.outputs.pg14_abi_min }}
       pg15_earliest: ${{ steps.config.outputs.pg15_abi_min }}
-      pg12_latest: ${{ steps.config.outputs.pg12_latest }}
       pg13_latest: ${{ steps.config.outputs.pg13_latest }}
       pg14_latest: ${{ steps.config.outputs.pg14_latest }}
       pg15_latest: ${{ steps.config.outputs.pg15_latest }}
@@ -38,14 +36,8 @@ jobs:
       fail-fast: false
       matrix:
         os: [ windows-2019 ]
-        test: [ "12min", "12max", "13min", "13max", "14min", "14max", "15min", "15max" ]
+        test: [ "13min", "13max", "14min", "14max", "15min", "15max" ]
         include:
-          - test: 12min
-            pg: 12
-            pkg_version: ${{ fromJson(needs.config.outputs.pg12_earliest) }}.1
-          - test: 12max
-            pg: 12
-            pkg_version: ${{ fromJson(needs.config.outputs.pg12_latest) }}
           - test: 13min
             pg: 13
             pkg_version: ${{ fromJson(needs.config.outputs.pg13_earliest) }}.1
diff --git a/coccinelle/ereport_pg12.cocci b/coccinelle/ereport_pg12.cocci
deleted file mode 100644
index 69c790136..000000000
--- a/coccinelle/ereport_pg12.cocci
+++ /dev/null
@@ -1,24 +0,0 @@
-// Since PG 12.3 the ereport syntax changed. This coccinelle patch checks that the used 
-// ereport calls work with PG < 12.3. 
-//
-// See postgres/postgres@a86715451653c730d637847b403b0420923956f7
-//
-
-@rule_1@
-constant K1;
-expression E1, E2;
-@@
-
-// We pass two or more expressions to ereport
-
-+ /*
-+  * Please enclose the auxiliary ereport arguments into parentheses for
-+  * compatibility with PG 12. Example:
-+  *
-+  * ereport(ERROR, ( errmsg(...), errdetail(...) ) );
-+  *                ^-----------add these---------^
-+  *
-+  * See https://github.com/postgres/postgres/commit/a86715451653c730d637847b403b0420923956f7
-+  */
-ereport(K1, E1, E2, ...);
-