Utiliser pgTAP avec GitHub Actions

pgTAP est une système de tests de base de données PostgreSQL. J’ai eu l’occasion de l’utiliser pour indoor= et Ça reste ouvert.

L’utiliser avec GitHub Actions n’est pas forcément aisé et voici un exemple simple d’utilisation.

Fichier my_function.sql:

--- my_function.sql
CREATE OR REPLACE FUNCTION my_function() RETURNS INTEGER AS $$
BEGIN
    RETURN 1;
END;
$$ LANGUAGE plpgsql;

Fichier my_function_test.sql:

--- my_function_test.sql
BEGIN;
SELECT plan();

SELECT is(
    my_function(),
    1
);

SELECT * FROM finish();
ROLLBACK;

Fichier .github/workflows/pgtest.yml:

# .github/workflows/pgtest.yml
name: Postgres tests

on: push

jobs:
  pgtap:

    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres:11
        env:
          POSTGRES_PASSWORD: postgres
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432

    steps:
      - uses: actions/checkout@v2

      - name: install pg_prove
        run: sudo cpan TAP::Parser::SourceHandler::pgTAP
        env:
          SHELL: /bin/bash

      - name: install postgres dev
        run: sudo apt-get install -y --no-install-recommends postgresql-server-dev-all

      - name: Checkout pgtap
        uses: actions/checkout@v2
        with:
          repository: theory/pgtap
          path: pgtap
          tag: v1.1.0

      - name: install pgtap
        working-directory: pgtap
        run: make && psql --host localhost --username postgres --dbname postgres --file sql/pgtap.sql
        env:
          PGPASSWORD: postgres

      - name: load sql
        run: >-
          psql --host localhost --username postgres --dbname postgres \
               --file my_function.sql
        env:
          PGPASSWORD: postgres

      - name: run tests
        run: pg_prove --host localhost --dbname postgres --username postgres *_test.sql
        env:
          PGPASSWORD: postgres

Et voici un dépot avec le code qui tourne: github.com/francois2metz/pgtap-github-actions