From a4196a2fc37a38f7c79f7bfca3f3edf1ef198c81 Mon Sep 17 00:00:00 2001 From: Leslie H <142967379+SleepyLeslie@users.noreply.github.com> Date: Sun, 15 Dec 2024 03:21:11 +0000 Subject: [PATCH] CI: Run gen-server tests with Postgres (#1336) Some server tests succeeded when using SQLite but failed with Postgres. This PR runs the all gen-server tests using a Postgres database to ensure both database types are supported well. --------- Co-authored-by: fflorent Co-authored-by: George Gevoian <85144792+georgegevoian@users.noreply.github.com> --- .github/workflows/main.yml | 62 ++++++++++++++++++++++++++++++++++++-- package.json | 3 +- 2 files changed, 62 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1b33b002f1..bbe56552e8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,6 +23,7 @@ jobs: - ':lint:python:client:common:smoke:stubs:' - ':server-1-of-2:' - ':server-2-of-2:' + - ':gen-server:' - ':nbrowser-^[A-D]:' - ':nbrowser-^[E-L]:' - ':nbrowser-^[M-N]:' @@ -63,7 +64,7 @@ jobs: run: yarn run lint:ci - name: Make sure bucket is versioned - if: contains(matrix.tests, ':server-') + if: contains(matrix.tests, ':server-') || contains(matrix.tests, ':gen-server:') env: AWS_ACCESS_KEY_ID: administrator AWS_SECRET_ACCESS_KEY: administrator @@ -96,12 +97,51 @@ jobs: if: contains(matrix.tests, ':stubs:') run: MOCHA_WEBDRIVER_HEADLESS=1 yarn run test:stubs + - name: Run gen-server tests with sqlite, minio and redis + if: contains(matrix.tests, ':gen-server:') + run: | + yarn run test:gen-server + # Anchors should be used once available. Not supported yet as of December 2024. + # https://github.com/actions/runner/issues/1182 + env: + MOCHA_WEBDRIVER_HEADLESS: 1 + TESTS: ${{ matrix.tests }} + GRIST_DOCS_MINIO_ACCESS_KEY: administrator + GRIST_DOCS_MINIO_SECRET_KEY: administrator + TEST_REDIS_URL: "redis://localhost/11" + GRIST_DOCS_MINIO_USE_SSL: 0 + GRIST_DOCS_MINIO_ENDPOINT: localhost + GRIST_DOCS_MINIO_PORT: 9000 + GRIST_DOCS_MINIO_BUCKET: grist-docs-test + + - name: Run gen-server tests with postgres, minio and redis + if: contains(matrix.tests, ':gen-server:') + run: | + PGPASSWORD=$TYPEORM_PASSWORD psql -h $TYPEORM_HOST -U $TYPEORM_USERNAME -w $TYPEORM_DATABASE -c "SHOW ALL;" | grep ' jit ' + yarn run test:gen-server + env: + MOCHA_WEBDRIVER_HEADLESS: 1 + TESTS: ${{ matrix.tests }} + GRIST_DOCS_MINIO_ACCESS_KEY: administrator + GRIST_DOCS_MINIO_SECRET_KEY: administrator + TEST_REDIS_URL: "redis://localhost/11" + GRIST_DOCS_MINIO_USE_SSL: 0 + GRIST_DOCS_MINIO_ENDPOINT: localhost + GRIST_DOCS_MINIO_PORT: 9000 + GRIST_DOCS_MINIO_BUCKET: grist-docs-test + TYPEORM_TYPE: postgres + TYPEORM_HOST: localhost + TYPEORM_DATABASE: db_name + TYPEORM_USERNAME: db_user + TYPEORM_PASSWORD: db_password + - name: Run server tests with minio and redis if: contains(matrix.tests, ':server-') run: | export TEST_SPLITS=$(echo $TESTS | sed "s/.*:server-\([^:]*\).*/\1/") - MOCHA_WEBDRIVER_HEADLESS=1 yarn run test:server + yarn run test:server env: + MOCHA_WEBDRIVER_HEADLESS: 1 TESTS: ${{ matrix.tests }} GRIST_DOCS_MINIO_ACCESS_KEY: administrator GRIST_DOCS_MINIO_SECRET_KEY: administrator @@ -167,6 +207,24 @@ jobs: --health-timeout 5s --health-retries 5 + postgresql: + image: postgres:latest + env: + POSTGRES_USER: db_user + POSTGRES_PASSWORD: db_password + POSTGRES_DB: db_name + # JIT is enabled by default since Postgres 17 and has a huge negative impact on performance, + # making many tests timeout. + # https://support.getgrist.com/self-managed/#what-is-a-home-database + POSTGRES_INITDB_ARGS: "-c jit=off" + ports: + - 5432:5432 + options: >- + --health-cmd "pg_isready -U db_user" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + candidate: needs: build_and_test if: ${{ success() && github.event_name == 'push' }} diff --git a/package.json b/package.json index ab53c61ebf..86d25f5e89 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "test:stubs": "GRIST_TEST_LOGIN=1 ./test/test_env.sh mocha ${DEBUG:+-b --no-exit} $([ -z $DEBUG ] && echo --forbid-only) -g \"${GREP_TESTS}\" --slow 8000 -R test/xunit-file '_build/test/nbrowser_with_stubs/**/*.js'", "test:client": "./test/test_env.sh mocha ${DEBUG:+'-b'} '_build/test/client/**/*.js'", "test:common": "./test/test_env.sh mocha ${DEBUG:+'-b'} '_build/test/common/**/*.js'", - "test:server": "TEST_SUITE=server TEST_SUITE_FOR_TIMINGS=server TIMINGS_FILE=test/timings/server.txt ./test/test_env.sh mocha ${DEBUG:+'-b'} -g \"${GREP_TESTS}\" -R test/xunit-file '_build/test/server/**/*.js' '_build/test/gen-server/**/*.js'", + "test:server": "TEST_SUITE=server TEST_SUITE_FOR_TIMINGS=server TIMINGS_FILE=test/timings/server.txt ./test/test_env.sh mocha ${DEBUG:+'-b'} -g \"${GREP_TESTS}\" -R test/xunit-file '_build/test/server/**/*.js'", + "test:gen-server": "TEST_SUITE=gen-server TEST_SUITE_FOR_TIMINGS=gen-server TIMINGS_FILE=test/timings/gen-server.txt ./test/test_env.sh mocha ${DEBUG:+'-b'} -g \"${GREP_TESTS}\" -R test/xunit-file '_build/test/gen-server/**/*.js'", "test:smoke": "./test/test_env.sh mocha _build/test/nbrowser/Smoke.js", "test:docker": "./test/test_under_docker.sh", "test:python": "sandbox_venv3/bin/python sandbox/grist/runtests.py ${GREP_TESTS:+discover -p \"test*${GREP_TESTS}*.py\"}",