name: Medusa Pipeline on: push: branches: - develop - v1.x pull_request: branches: - "**" jobs: setup: runs-on: ubuntu-latest env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} steps: - name: Cancel Previous Runs uses: styfle/cancel-workflow-action@0.11.0 with: access_token: ${{ github.token }} - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js environment uses: actions/setup-node@v4 with: node-version: 20 - name: Assert changed run: ./scripts/assert-changed-files-actions.sh "packages" - name: Install dependencies uses: ./.github/actions/cache-deps with: extension: pipeline - name: Upload build artifacts uses: actions/upload-artifact@v4 with: name: build-artifacts path: | packages/**/dist integration-tests/**/dist !packages/**/node_modules retention-days: 1 unit-tests-matrix: needs: setup name: Unit Tests - Shard ${{ matrix.shard_index }} runs-on: ubuntu-latest strategy: fail-fast: true matrix: shard_index: [1, 2, 3, 4] env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 100 - name: Get number of CPU cores id: cpu-cores uses: SimenB/github-actions-cpu-cores@v2 - name: Install dependencies uses: ./.github/actions/cache-deps with: extension: pipeline skip-build: "true" - name: Download build artifacts uses: actions/download-artifact@v4 with: name: build-artifacts path: . - name: Run unit tests run: yarn test -- --shard=${{ matrix.shard_index }}/4 --maxWorkers=${{ steps.cpu-cores.outputs.count }} --passWithNoTests unit-tests: if: ${{ always() }} runs-on: ubuntu-latest needs: unit-tests-matrix steps: - run: exit 1 if: >- ${{ contains(needs.unit-tests-matrix.result, 'failure') || contains(needs.unit-tests-matrix.result, 'cancelled') || contains(needs.unit-tests-matrix.result, 'skipped') }} - run: exit 0 if: ${{ contains(needs.unit-tests-matrix.result, 'success') }} integration-tests-packages-matrix: needs: setup name: Package Integration Tests (${{ matrix.group }}) - Shard ${{ matrix.shard_index }} runs-on: ubuntu-latest strategy: fail-fast: true matrix: group: ["slow", "fast"] shard_index: [1, 2, 3] env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} services: redis: image: redis options: >- --health-cmd "redis-cli ping" --health-interval 1s --health-timeout 10s --health-retries 10 ports: - 6379:6379 postgres: image: postgres env: POSTGRES_PASSWORD: postgres POSTGRES_USER: postgres options: >- --health-cmd pg_isready --health-interval 1s --health-timeout 10s --health-retries 10 ports: - 5432:5432 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 100 - name: Get number of CPU cores id: cpu-cores uses: SimenB/github-actions-cpu-cores@v2 - name: Install dependencies uses: ./.github/actions/cache-deps with: extension: pipeline skip-build: "true" - name: Download build artifacts uses: actions/download-artifact@v4 with: name: build-artifacts path: . - name: Run package integration tests run: yarn test:integration:packages:${{ matrix.group }} -- --shard=${{ matrix.shard_index }}/3 --maxWorkers=${{ steps.cpu-cores.outputs.count }} env: DB_PASSWORD: postgres DB_USERNAME: postgres integration-tests-packages: if: ${{ always() }} runs-on: ubuntu-latest needs: integration-tests-packages-matrix steps: - run: exit 1 if: >- ${{ contains(needs.integration-tests-packages-matrix.result, 'failure') || contains(needs.integration-tests-packages-matrix.result, 'cancelled') || contains(needs.integration-tests-packages-matrix.result, 'skipped') }} - run: exit 0 if: ${{ contains(needs.integration-tests-packages-matrix.result, 'success') }} integration-tests-http-matrix: needs: setup name: HTTP Integration Tests - Shard ${{ matrix.shard_index }} runs-on: ubuntu-latest strategy: fail-fast: true matrix: shard_index: [1, 2, 3, 4] env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} services: redis: image: redis options: >- --health-cmd "redis-cli ping" --health-interval 1s --health-timeout 10s --health-retries 10 ports: - 6379:6379 postgres: image: postgres env: POSTGRES_PASSWORD: postgres POSTGRES_USER: postgres options: >- --health-cmd pg_isready --health-interval 1s --health-timeout 10s --health-retries 10 ports: - 5432:5432 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 100 - name: Get number of CPU cores id: cpu-cores uses: SimenB/github-actions-cpu-cores@v2 - name: Install dependencies uses: ./.github/actions/cache-deps with: extension: pipeline skip-build: "true" - name: Download build artifacts uses: actions/download-artifact@v4 with: name: build-artifacts path: . - name: Run HTTP integration tests run: yarn test:integration:http -- --shard=${{ matrix.shard_index }}/4 --maxWorkers=${{ steps.cpu-cores.outputs.count }} env: DB_USERNAME: postgres DB_PASSWORD: postgres NODE_OPTIONS: "--max_old_space_size=4096" integration-tests-http: if: ${{ always() }} runs-on: ubuntu-latest needs: integration-tests-http-matrix steps: - run: exit 1 if: >- ${{ contains(needs.integration-tests-http-matrix.result, 'failure') || contains(needs.integration-tests-http-matrix.result, 'cancelled') || contains(needs.integration-tests-http-matrix.result, 'skipped') }} - run: exit 0 if: ${{ contains(needs.integration-tests-http-matrix.result, 'success') }} integration-tests-modules-matrix: needs: setup name: Module Integration Tests - Shard ${{ matrix.shard_index }} strategy: matrix: shard_index: [1, 2, 3, 4] runs-on: ubuntu-latest env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} services: redis: image: redis options: >- --health-cmd "redis-cli ping" --health-interval 1s --health-timeout 10s --health-retries 10 ports: - 6379:6379 postgres: image: postgres env: POSTGRES_PASSWORD: postgres POSTGRES_USER: postgres options: >- --health-cmd pg_isready --health-interval 1s --health-timeout 10s --health-retries 10 ports: - 5432:5432 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 100 - name: Get number of CPU cores id: cpu-cores uses: SimenB/github-actions-cpu-cores@v2 - name: Install dependencies uses: ./.github/actions/cache-deps with: extension: pipeline skip-build: "true" - name: Download build artifacts uses: actions/download-artifact@v4 with: name: build-artifacts path: . - name: Run Modules integration tests run: yarn test:integration:modules -- --shard=${{ matrix.shard_index }}/4 --maxWorkers=${{ steps.cpu-cores.outputs.count }} env: DB_USERNAME: postgres DB_PASSWORD: postgres NODE_OPTIONS: "--max_old_space_size=4096" CHUNK: ${{ matrix.chunk }} CHUNKS: ${{ needs.setup.outputs.module-chunks }} integration-tests-modules: if: ${{ always() }} runs-on: ubuntu-latest needs: integration-tests-modules-matrix steps: - run: exit 1 if: >- ${{ contains(needs.integration-tests-modules-matrix.result, 'failure') || contains(needs.integration-tests-modules-matrix.result, 'cancelled') || contains(needs.integration-tests-modules-matrix.result, 'skipped') }} - run: exit 0 if: ${{ contains(needs.integration-tests-modules-matrix.result, 'success') }}