name: Build & Test on: push: branches: - master - major - minor - parallel-e2e pull_request: branches: - master - major - minor env: CI: true jobs: build: name: build runs-on: ubuntu-latest strategy: matrix: node: [ 18.x, 20.x, 22.x ] steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} - name: npm install run: | npm install npm install --os=linux --cpu=x64 sharp - name: Build run: npm run build unit-tests: name: unit tests runs-on: ubuntu-latest strategy: matrix: node: [ 18.x, 20.x, 22.x ] steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} - name: npm install run: | npm install npm install --os=linux --cpu=x64 sharp - name: Build run: npx lerna run ci - name: Unit tests run: npm run test e2e-tests: name: e2e tests runs-on: ubuntu-latest services: mariadb: image: bitnami/mariadb:10.3 env: MARIADB_ROOT_USER: vendure MARIADB_ROOT_PASSWORD: password ports: - 3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 mysql: image: bitnami/mysql:8.0 env: MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password MYSQL_ROOT_USER: vendure MYSQL_ROOT_PASSWORD: password ports: - 3306 options: --health-cmd="mysqladmin ping --silent" --health-interval=10s --health-timeout=20s --health-retries=10 postgres: image: postgres:16 env: POSTGRES_USER: vendure POSTGRES_PASSWORD: password 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: node: [ 18.x, 20.x, 22.x ] db: [ sqljs, mariadb, mysql, postgres ] steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} - name: npm install run: | npm install npm install --os=linux --cpu=x64 sharp - name: Build run: npx lerna run ci - 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: npm run e2e