diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..b1a4338 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,193 @@ +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: hashtypes + 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, 14, 15] + postgresql: [12, 14, 15] + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Versions + run: echo "${{ matrix.os }} - ${{ matrix.postgresql }}" + + - name: Calculate working directory + run: echo "PWD=$(realpath ./$EXTENSION_SUBDIRECTORY)" >> $GITHUB_OUTPUT + 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 "Packages=$(dpkg-query -f '${Package}\n' -W | grep ^postgresql | xargs)" >> $GITHUB_OUTPUT + 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 + continue-on-error: true + + + # 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 "Packages=$(git branch --show-current)" >> $GITHUB_OUTPUT + id: current_branch + + # in a PR this version might be different + - name: Get current extension version + run: echo "Version=$(cat $EXTENSION_SUBDIRECTORY$EXTENSION_NAME.control | grep default_version | sed 's/[^0-9\.]*//g')" >> $GITHUB_OUTPUT + id: current_extension_version + + # the version from the branch in $EXTENSION_BRANCH + - name: Get installed extension version + run: echo "Version=$(git show origin/$EXTENSION_BRANCH:$EXTENSION_SUBDIRECTORY$EXTENSION_NAME.control | grep default_version | sed 's/[^0-9\.]*//g')" >> $GITHUB_OUTPUT + 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 "Version=$(cat /tmp/installed_version_step_1.txt)" >> $GITHUB_OUTPUT + 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 "Version=$(cat /tmp/installed_version_step_2.txt)" >> $GITHUB_OUTPUT + 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 != '' diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 34c1556..0000000 --- a/.travis.yml +++ /dev/null @@ -1,20 +0,0 @@ -sudo: required - -language: c - -services: docker - -install: - - docker build . -t tests --build-arg PG_VERSION=${PG_VERSION} - -script: - - docker run tests - -env: - - PG_VERSION=13 - - PG_VERSION=12 - - PG_VERSION=11 - - PG_VERSION=10 - - PG_VERSION=9.6 - - PG_VERSION=9.5 - - PG_VERSION=9.4