diff --git a/.github/workflows/backend-and-models.yml b/.github/workflows/backend-and-models.yml index 897567fa..8a3b886d 100644 --- a/.github/workflows/backend-and-models.yml +++ b/.github/workflows/backend-and-models.yml @@ -14,8 +14,9 @@ jobs: matrix: os: - ubuntu-22.04 + - ubuntu-24.04 raku-version: - - '2025.01' + - '2025.11' runs-on: ${{ matrix.os }} services: @@ -26,7 +27,7 @@ jobs: POSTGRES_PASSWORD: postgres POSTGRES_DB: agrammon_test ports: - - 5432:5432 + - 55432:5432 options: --health-cmd pg_isready --health-interval 10s @@ -34,13 +35,55 @@ jobs: --health-retries 5 steps: - - name: Install LaTeX + # Checkout repository first as we need dev/pgpass for PostgreSQL access + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Load test database + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + PGPASSFILE: ./dev/pgpass + POSTGRES_DB: postgres + AGRAMMON_DB: agrammon_test + AGRAMMON_OWNER: agrammon + AGRAMMON_GROUP: agrammon_user + AGRAMMON_SCHEMA: ./t/test-data/agrammon.schema.sql + AGRAMMON_TEST_DATA: ./t/test-data/agrammon.test.sql + run: | + chmod 0600 $PGPASSFILE + psql -U $POSTGRES_USER -h localhost --port 55432 -c "CREATE USER $AGRAMMON_OWNER PASSWORD 'agrammon'" > /dev/null + psql -U $POSTGRES_USER -h localhost --port 55432 -c "CREATE GROUP $AGRAMMON_GROUP USER $AGRAMMON_OWNER" > /dev/null + psql -U $POSTGRES_USER -h localhost --port 55432 -c "ALTER DATABASE $AGRAMMON_DB OWNER TO $AGRAMMON_OWNER" > /dev/null + psql -U $AGRAMMON_OWNER -h localhost --port 55432 --file=$AGRAMMON_SCHEMA $AGRAMMON_DB > /dev/null + psql -U $AGRAMMON_OWNER -h localhost --port 55432 --file=$AGRAMMON_TEST_DATA $AGRAMMON_DB > /dev/null + + - name: Setup apt cache + uses: actions/cache@v4 + id: aptCache + with: + path: | + /var/cache/apt/archives + /var/lib/apt/lists + key: ${{ matrix.os }}-apt-${{ hashFiles('.github/workflows/backend-and-models.yml') }} + + - name: Install system dependencies run: | sudo apt update - sudo apt-get install texlive texlive-luatex texlive-latex-recommended texlive-latex-extra texlive-science + sudo apt-get install -y libperl-dev texlive texlive-luatex texlive-latex-recommended texlive-science texlive-latex-extra - - name: Checkout repo - uses: actions/checkout@v2 + - name: Setup Perl modules cache + uses: actions/cache@v4 + id: perlCache + with: + path: Inline/perl5 + key: ${{ matrix.os }}-perl-${{ hashFiles('**/cpanfile', '**/cpanfile.snapshot') }}-excel-writer-xlsx-v1 + + - name: Install Perl modules + if: steps.perlCache.outputs.cache-hit != 'true' + run: | + sudo apt-get install -y cpanminus + cpanm --notest --local-lib=Inline/perl5 Excel::Writer::XLSX - name: Setup raku uses: Raku/setup-raku@v1 @@ -52,7 +95,7 @@ jobs: id: rakuCache with: path: .raku - key: ${{ runner.os }}-${{ matrix.raku-version }}-${{ hashFiles('./dev/META6.json') }} + key: ${{ matrix.os }}-${{ matrix.raku-version }}-${{ hashFiles('./dev/META6.json') }} - name: Install Raku modules if: steps.rakuCache.outputs.cache-hit != 'true' @@ -65,6 +108,7 @@ jobs: find t/test-data/Models/hr-inclNOx* -type f -print0 | sort -z | xargs -0 shasum > ./MODEL_MD5 cat ./MODEL_MD5 mkdir -p $HOME/.agrammon + touch $HOME/.agrammon/.gitkeep - name: Setup model cache uses: actions/cache@v4 @@ -73,21 +117,7 @@ jobs: path: $HOME/.agrammon key: AgrammonModels-${{ hashFiles('./MODEL_MD5') }} - - name: Load test database - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: agrammon_test - PGPASSFILE: ./dev/pgpass - AGRAMMON_DUMP: ./t/test-data/agrammon_test.dump.sql - run: | - chmod 0600 $PGPASSFILE - psql -U postgres -h localhost -c "CREATE USER agrammon PASSWORD 'agrammonATwork'" > /dev/null - psql -U postgres -h localhost -c "CREATE GROUP agrammon_user USER agrammon" > /dev/null - psql -U postgres -h localhost -c "GRANT ALL ON SCHEMA public TO agrammon_user" > /dev/null - psql -U postgres -h localhost -c "CREATE EXTENSION pgcrypto" agrammon_test > /dev/null - psql -U postgres -h localhost --file=$AGRAMMON_DUMP $POSTGRES_DB > /dev/null - - name: Run backend tests run: | - RAKULIB=inst#$GITHUB_WORKSPACE/.raku $GITHUB_WORKSPACE/.raku/bin/prove6 -l -v t + PERL5LIB=Inline/perl5/lib/perl5 RAKULIB=inst#$GITHUB_WORKSPACE/.raku $GITHUB_WORKSPACE/.raku/bin/prove6 -l -v t + # PERL5LIB=Inline/perl5/lib/perl5 RAKULIB=inst#$GITHUB_WORKSPACE/.raku $GITHUB_WORKSPACE/.raku/bin/prove6 -l -v t/datasource-db.rakutest diff --git a/dev/pgpass b/dev/pgpass index c9b1791e..29afd157 100644 --- a/dev/pgpass +++ b/dev/pgpass @@ -1 +1,2 @@ +*:*:*:agrammon:agrammon *:*:*:postgres:postgres diff --git a/t/datasource-db.rakutest b/t/datasource-db.rakutest index d07ef4a2..c9ab2205 100644 --- a/t/datasource-db.rakutest +++ b/t/datasource-db.rakutest @@ -208,7 +208,7 @@ transactionally { sub prepare-test-db-single-data($user, $dataset, %variant) { my $db = $*AGRAMMON-DB-HANDLE; - prepare-test-db-schema($db, $user); +# prepare-test-db-schema($db); my $userId = $db.query(q:to/STATEMENT/, $user).value; SELECT pers_email2id($1) @@ -239,7 +239,7 @@ sub prepare-test-db-single-data($user, $dataset, %variant) { sub prepare-test-db-flattened-data($user, $dataset, %variant) { my $db = $*AGRAMMON-DB-HANDLE; - prepare-test-db-schema($db, $user); +# prepare-test-db-schema($db); my $userId = $db.query(q:to/STATEMENT/, $user).value; SELECT pers_email2id($1) @@ -284,7 +284,7 @@ sub prepare-test-db-flattened-data($user, $dataset, %variant) { sub prepare-test-db-branched-data($user, $dataset, %variant) { my $db = $*AGRAMMON-DB-HANDLE; - prepare-test-db-schema($db, $user); +# prepare-test-db-schema($db); my $userId = $db.query(q:to/STATEMENT/, $user).value; SELECT pers_email2id($1) @@ -333,7 +333,7 @@ sub prepare-test-db-branched-data($user, $dataset, %variant) { $sth-data.execute($datasetId, 'Instance B', 'Test::Base[]::AnotherSubA::simple', 101); } -sub prepare-test-db-schema($db, $user) { +sub prepare-test-db-schema($db) { $db.query(q:to/STATEMENT/); CREATE TABLE IF NOT EXISTS pers ( pers_id SERIAL NOT NULL PRIMARY KEY, -- Unique ID @@ -384,11 +384,6 @@ sub prepare-test-db-schema($db, $user) { CREATE OR REPLACE FUNCTION dataset_name2id(USERNAME text, NAME text) returns int4 AS 'SELECT dataset_id FROM dataset WHERE dataset_name = $2 AND dataset_pers = pers_email2id($1)' STABLE LANGUAGE 'sql' STATEMENT - - $db.query(q:to/STATEMENT/, $user); - INSERT INTO pers (pers_email, pers_first, pers_last, pers_password) - VALUES ($1, 'X', 'X', 'X') - STATEMENT } done-testing;