name: postgresql-14-pgdg-package
on:
  pull_request:
  push:
    branches:
      - main
    tags:
      - '[0-9]+.[0-9]+.[0-9]+*'

permissions:
  contents: read

jobs:
  build:
    name: pg-14-pgdg-package-test
    runs-on: ubuntu-22.04
    timeout-minutes: 30
    steps:
      - name: Clone pg_stat_monitor repository
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
        with:
          path: 'src/pg_stat_monitor'

      - name: Delete old postgresql files
        run: |
          sudo apt-get update
          sudo apt purge postgresql-client-common postgresql-common \
            postgresql postgresql*
          sudo apt-get install -y libreadline6-dev systemtap-sdt-dev wget \
            zlib1g-dev libssl-dev libpam0g-dev bison flex libipc-run-perl
          sudo rm -rf /var/lib/postgresql /var/log/postgresql /etc/postgresql \
            /usr/lib/postgresql /usr/include/postgresql /usr/share/postgresql \
            /etc/postgresql
          sudo rm -f /usr/bin/pg_config
          sudo /usr/bin/perl -MCPAN -e 'install IPC::Run'
          sudo /usr/bin/perl -MCPAN -e 'install Text::Trim'

      - name: Install PG Distribution Postgresql 14
        run: |
          sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt \
            $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
          sudo wget --quiet -O - \
            https://www.postgresql.org/media/keys/ACCC4CF8.asc |
            sudo apt-key add -
          sudo apt update
          sudo apt -y install postgresql-14 postgresql-server-dev-14

      - name: Change src owner to postgres
        run: |
          sudo chmod o+rx ~
          sudo chown -R postgres:postgres src

      - name: Build pg_stat_monitor
        run: |
          sudo -u postgres bash -c 'make USE_PGXS=1'
          sudo make USE_PGXS=1 install
        working-directory: src/pg_stat_monitor

      - name: Start pg_stat_monitor_tests
        run: |
          sudo service postgresql stop
          echo "shared_preload_libraries = 'pg_stat_monitor'" | 
            sudo tee -a /etc/postgresql/14/main/postgresql.conf
          sudo service postgresql start
          sudo psql -V
          export PG_TEST_PORT_DIR=${GITHUB_WORKSPACE}/src/pg_stat_monitor
          echo $PG_TEST_PORT_DIR
          sudo -E -u postgres bash -c 'make installcheck USE_PGXS=1'
        working-directory: src/pg_stat_monitor

      - name: Change dir permissions on fail
        if: ${{ failure() }}
        run: |
          sudo chmod -R ugo+rwx t
          sudo chmod -R ugo+rwx tmp_check
          exit 2 # regenerate error so that we can upload files in next step
        working-directory: src/pg_stat_monitor

      - name: Upload logs on fail
        if: ${{ failure() }}
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
        with:
          name: Regressions diff and postgresql log
          path: |
            src/pg_stat_monitor/regression.diffs
            src/pg_stat_monitor/regression.out
            src/pg_stat_monitor/logfile
            src/pg_stat_monitor/t/results/
            src/pg_stat_monitor/tmp_check/log/
            !src/pg_stat_monitor/tmp_check/**/archives/*
            !src/pg_stat_monitor/tmp_check/**/backup/*
            !src/pg_stat_monitor/tmp_check/**/pgdata/*
            !src/pg_stat_monitor/tmp_check/**/archives/
            !src/pg_stat_monitor/tmp_check/**/backup/
            !src/pg_stat_monitor/tmp_check/**/pgdata/
          if-no-files-found: warn
          retention-days: 3
