name: NocoBase Backend Test on: push: branches: - main - develop paths: - 'package.json' - 'packages/core/acl/**' - 'packages/core/actions/**' - 'packages/core/database/**' - 'packages/core/server/**' - 'packages/plugins/**/src/server/**' - '.github/workflows/nocobase-test-backend.yml' pull_request: paths: - 'package.json' - 'packages/core/acl/**' - 'packages/core/actions/**' - 'packages/core/database/**' - 'packages/core/server/**' - 'packages/plugins/**/src/server/**' - '.github/workflows/nocobase-test-backend.yml' jobs: sqlite-test: strategy: matrix: node_version: ['18'] underscored: [true, false] runs-on: ubuntu-latest container: node:${{ matrix.node_version }} steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node_version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node_version }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - name: Install project dependencies run: yarn --prefer-offline - name: Test with Sqlite run: yarn test --server --single-thread=false env: LOGGER_LEVEL: error DB_DIALECT: sqlite DB_STORAGE: /tmp/db.sqlite DB_TEST_PREFIX: test_ DB_UNDERSCORED: ${{ matrix.underscored }} timeout-minutes: 40 postgres-test: strategy: matrix: node_version: ['18'] underscored: [true, false] schema: [public, nocobase] collection_schema: [public, user_schema] runs-on: ubuntu-latest container: node:${{ matrix.node_version }} services: # Label used to access the service container postgres: # Docker Hub image image: postgres:11 # Provide the password for postgres env: POSTGRES_USER: nocobase POSTGRES_PASSWORD: password # Set health checks to wait until postgres has started options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node_version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node_version }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - name: Install project dependencies run: yarn --prefer-offline - name: Test with postgres run: | ./node_modules/.bin/tsx packages/core/test/src/scripts/test-db-creator.ts & sleep 1 yarn test --server --single-thread=false env: LOGGER_LEVEL: error DB_DIALECT: postgres DB_HOST: postgres DB_PORT: 5432 DB_USER: nocobase DB_PASSWORD: password DB_DATABASE: nocobase DB_UNDERSCORED: ${{ matrix.underscored }} DB_SCHEMA: ${{ matrix.schema }} COLLECTION_MANAGER_SCHEMA: ${{ matrix.collection_schema }} DB_TEST_DISTRIBUTOR_PORT: 23450 DB_TEST_PREFIX: test_ timeout-minutes: 40 mysql-test: strategy: matrix: node_version: ['18'] underscored: [true, false] runs-on: ubuntu-latest container: node:${{ matrix.node_version }} services: mysql: image: mysql:8 env: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: nocobase options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node_version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node_version }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - name: Install project dependencies run: yarn --prefer-offline - name: Test with MySQL run: | ./node_modules/.bin/tsx packages/core/test/src/scripts/test-db-creator.ts & sleep 1 yarn test --server --single-thread=false env: LOGGER_LEVEL: error DB_DIALECT: mysql DB_HOST: mysql DB_PORT: 3306 DB_USER: root DB_PASSWORD: password DB_DATABASE: nocobase DB_UNDERSCORED: ${{ matrix.underscored }} DB_TEST_DISTRIBUTOR_PORT: 23450 DB_TEST_PREFIX: test_ timeout-minutes: 40 mariadb-test: strategy: matrix: node_version: ['18'] underscored: [true, false] runs-on: ubuntu-latest container: node:${{ matrix.node_version }} services: mariadb: image: mariadb:10.9 env: MARIADB_ROOT_PASSWORD: password MARIADB_DATABASE: nocobase options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node_version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node_version }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - name: Install project dependencies run: yarn --prefer-offline - name: Test with MariaDB run: | ./node_modules/.bin/tsx packages/core/test/src/scripts/test-db-creator.ts & sleep 1 yarn test --server --single-thread=false env: LOGGER_LEVEL: error DB_DIALECT: mariadb DB_HOST: mariadb DB_PORT: 3306 DB_USER: root DB_PASSWORD: password DB_DATABASE: nocobase DB_UNDERSCORED: ${{ matrix.underscored }} DB_TEST_DISTRIBUTOR_PORT: 23450 DB_TEST_PREFIX: test_ timeout-minutes: 40