name: Build & Test on: push: branches: - master - major - minor - parallel-e2e pull_request: branches: - master - major - minor env: CI: true node: 20.x jobs: build: name: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ env.node }} uses: actions/setup-node@v3 with: node-version: ${{ env.node }} - name: Yarn install run: yarn install - name: Build run: yarn build unit-tests: name: unit tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ env.node }} uses: actions/setup-node@v3 with: node-version: ${{ env.node }} - name: Yarn install run: yarn install --prefer-offline - name: Build run: yarn lerna run ci - name: Unit tests run: yarn test e2e-tests: name: e2e tests runs-on: ubuntu-latest services: mariadb: image: bitnami/mariadb:10.3 env: ALLOW_EMPTY_PASSWORD: yes ports: - 3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 mysql: image: bitnami/mysql:8.0 env: ALLOW_EMPTY_PASSWORD: yes MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password ports: - 3306 options: --health-cmd="mysqladmin ping --silent" --health-interval=10s --health-timeout=20s --health-retries=10 postgres: image: postgres:12 env: POSTGRES_USER: admin POSTGRES_PASSWORD: secret ports: - 5432 options: --health-cmd=pg_isready --health-interval=10s --health-timeout=5s --health-retries=3 elastic: image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1 env: discovery.type: single-node bootstrap.memory_lock: true ES_JAVA_OPTS: -Xms512m -Xmx512m # Elasticsearch will force read-only mode when total available disk space is less than 5%. Since we will # be running on a shared Azure instance with 84GB SSD, we easily go below 5% available even when there are still # > 3GB free. So we set this value to an absolute one rather than a percentage to prevent all the Elasticsearch # e2e tests from failing. cluster.routing.allocation.disk.watermark.low: 500mb cluster.routing.allocation.disk.watermark.high: 200mb cluster.routing.allocation.disk.watermark.flood_stage: 100mb ports: - 9200 options: --health-cmd="curl --silent --fail localhost:9200/_cluster/health" --health-interval=10s --health-timeout=5s --health-retries=3 strategy: fail-fast: false matrix: db: [sqljs, mariadb, mysql, postgres] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ env.node }} uses: actions/setup-node@v3 with: node-version: ${{ env.node }} - name: Yarn install run: yarn install --prefer-offline - name: Build run: yarn lerna run ci - name: df run: | df -h docker system df - name: e2e tests env: E2E_MYSQL_PORT: ${{ job.services.mysql.ports['3306'] }} E2E_MARIADB_PORT: ${{ job.services.mariadb.ports['3306'] }} E2E_POSTGRES_PORT: ${{ job.services.postgres.ports['5432'] }} E2E_ELASTIC_PORT: ${{ job.services.elastic.ports['9200'] }} DB: ${{ matrix.db }} run: yarn e2e