From c6767a187f94a4bb3d3a48be91f250dba2798ea0 Mon Sep 17 00:00:00 2001 From: Andreas Scherbaum Date: Mon, 26 Apr 2021 23:37:35 +0200 Subject: [PATCH 1/2] Add GitHub Action tests for upgrades --- .github/workflows/test.yml | 192 +++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..771ef90 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,192 @@ +name: Test extension + +# Run this workflow every time a new commit pushed to your repository +on: + push: + branches: ['*'] + #branches-ignore: 'master' + + pull_request: + branches: ['*'] + #branches-ignore: 'master' + + workflow_dispatch: + + +defaults: + run: + shell: bash + + +jobs: + pr-test: + name: Test the extension + runs-on: ${{ matrix.os }} + env: + EXTENSION_NAME: pg_lock_pool + EXTENSION_DB: ajtest + EXTENSION_BRANCH: master + EXTENSION_SUBDIRECTORY: "" + EXTENSION_TEST_QUERY: "" + strategy: + matrix: + # also test 'latest', eventually this will be upgraded to a newer version and might fail early + #os: [ubuntu-18.04, ubuntu-20.04, ubuntu-latest] + os: [ubuntu-latest] + #postgresql: [9.6, 10, 11, 12, 13] + postgresql: [12] + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Versions + run: echo "${{ matrix.os }} - ${{ matrix.postgresql }}" + + - name: Calculate working directory + run: echo "::set-output name=PWD::$(realpath ./$EXTENSION_SUBDIRECTORY)" + id: pwd + + - name: Working directory + run: echo "${{ steps.pwd.outputs.PWD }}" + + + # GitHub does only checkout the current branch + # in case this is a PR the check also needs $EXTENSION_BRANCH for the .control file + - name: get branch + run: git fetch --depth=5 origin $EXTENSION_BRANCH + + - name: See the .control file + run: git show origin/$EXTENSION_BRANCH:$EXTENSION_SUBDIRECTORY$EXTENSION_NAME.control + + + # there might be PostgreSQL packages pre-installed, remove them + - name: Installed PostgreSQL packages + run: dpkg --list | grep postgresql + + - name: Get list of PostgreSQL packages + run: echo "::set-output name=Packages::$(dpkg-query -f '${Package}\n' -W | grep ^postgresql | xargs)" + id: preinstalled_packages + + - name: Remove preinstalled PostgreSQL packages + run: sudo dpkg --purge ${{ steps.preinstalled_packages.outputs.Packages }} + + + # verify result + - name: Installed PostgreSQL packages + run: dpkg --list | grep postgresql + + + # install build tools + - name: Install build-essential and other tools + run: sudo apt-get install -y build-essential ruby curl ca-certificates gnupg + + + # enable PostgreSQL APT repository + - name: Install GPG Key for PostgreSQL repository + run: curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - + + - name: Install repository + 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' + + - name: Update repository + run: sudo apt-get update + + # install the requested version + - name: Install PostgreSQL + run: sudo apt-get install -y postgresql-${{ matrix.postgresql }} postgresql-server-dev-${{ matrix.postgresql }} postgresql-client-${{ matrix.postgresql }} + + # debug output + - name: Path of pg_config + run: which pg_config + + - name: pg_config output + run: pg_config + + - name: Update pg_hba.conf + run: sudo bash -c "echo 'local all all trust' > /etc/postgresql/${{ matrix.postgresql }}/main/pg_hba.conf" + + - name: Update pg_hba.conf + run: sudo bash -c "echo 'host all all 0/0 trust' >> /etc/postgresql/${{ matrix.postgresql }}/main/pg_hba.conf" + + - name: Restart PostgreSQL + run: sudo service postgresql reload + + + # do the actual compilation + - name: Compile the extension + run: cd ${{ steps.pwd.outputs.PWD }} && make + + - name: Test the extension + run: cd ${{ steps.pwd.outputs.PWD }} && make check + + # install extension + - name: Install the extension + run: cd ${{ steps.pwd.outputs.PWD }} && sudo make install + + - name: Test the extension + run: cd ${{ steps.pwd.outputs.PWD }} && make PGUSER=postgres installcheck + + + # start testing + + - name: Get current branch name + run: echo "::set-output name=Packages::$(git branch --show-current)" + id: current_branch + + # in a PR this version might be different + - name: Get current extension version + run: echo "::set-output name=Version::$(cat $EXTENSION_SUBDIRECTORY$EXTENSION_NAME.control | grep default_version | sed 's/[^0-9\.]*//g')" + id: current_extension_version + + # the version from the branch in $EXTENSION_BRANCH + - name: Get installed extension version + run: echo "::set-output name=Version::$(git show origin/$EXTENSION_BRANCH:$EXTENSION_SUBDIRECTORY$EXTENSION_NAME.control | grep default_version | sed 's/[^0-9\.]*//g')" + id: installed_extension_version + + - name: Show versions + run: echo "${{ steps.installed_extension_version.outputs.Version }} - ${{ steps.current_extension_version.outputs.Version }}" + + - name: Test current version string + run: exit 1 + if: steps.current_extension_version.outputs.Version == '' + + - name: Test installed version string + run: exit 1 + if: steps.installed_extension_version.outputs.Version == '' + + - name: Create test database + run: createdb -U postgres $EXTENSION_DB + + # install the version from $EXTENSION_BRANCH + - name: Install extension in database + run: psql -U postgres -c "CREATE EXTENSION $EXTENSION_NAME VERSION '${{ steps.installed_extension_version.outputs.Version }}'" $EXTENSION_DB + + - name: Get extension version installed in the database - Step 1 + run: psql -U postgres -A -q -t -o /tmp/installed_version_step_1.txt -c "SELECT extversion FROM pg_catalog.pg_extension WHERE extname='$EXTENSION_NAME'" $EXTENSION_DB + + - name: Get extension version installed in the database - Step 2 + run: echo "::set-output name=Version::$(cat /tmp/installed_version_step_1.txt)" + id: installed_version_step_1 + + - name: Show installed version - after extension install + run: echo "${{ steps.installed_version_step_1.outputs.Version }}" + + # if this is a PR, the version might be different - try an extension upgrade in this case + - name: Upgrade extension in database + run: psql -U postgres -c "ALTER EXTENSION $EXTENSION_NAME UPDATE TO '${{ steps.current_extension_version.outputs.Version }}'" $EXTENSION_DB + if: steps.installed_extension_version.outputs.Version != steps.current_extension_version.outputs.Version + + - name: Get extension version installed in the database - Step 1 + run: psql -U postgres -A -q -t -o /tmp/installed_version_step_2.txt -c "SELECT extversion FROM pg_catalog.pg_extension WHERE extname='$EXTENSION_NAME'" $EXTENSION_DB + + - name: Get extension version installed in the database - Step 2 + run: echo "::set-output name=Version::$(cat /tmp/installed_version_step_2.txt)" + id: installed_version_step_2 + + - name: Show installed version - after extension update + run: echo "${{ steps.installed_version_step_2.outputs.Version }}" + + - name: Run test query + run: psql -U postgres -c "$EXTENSION_TEST_QUERY" $EXTENSION_DB + if: env.EXTENSION_TEST_QUERY != '' From 8bfdb2af084673e539843e910df686aa9ea57aad Mon Sep 17 00:00:00 2001 From: Andreas Scherbaum Date: Mon, 26 Apr 2021 23:53:53 +0200 Subject: [PATCH 2/2] Enable all PostgreSQL versions --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 771ef90..32ee114 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,8 +33,8 @@ jobs: # also test 'latest', eventually this will be upgraded to a newer version and might fail early #os: [ubuntu-18.04, ubuntu-20.04, ubuntu-latest] os: [ubuntu-latest] - #postgresql: [9.6, 10, 11, 12, 13] - postgresql: [12] + postgresql: [9.6, 10, 11, 12, 13] + #postgresql: [12] steps: - name: Checkout code