name: Medusa Pipeline on: pull_request: jobs: setup: runs-on: ubuntu-latest env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} outputs: module-matrix: ${{ steps.set-module-matrix.outputs.matrix }} module-chunks: ${{ steps.set-module-chunks.outputs.chunks }} api-matrix: ${{ steps.set-api-matrix.outputs.matrix }} api-chunks: ${{ steps.set-api-chunks.outputs.chunks }} steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup Node.js environment uses: actions/setup-node@v3 with: node-version: "16.10.0" cache: "yarn" - name: Assert changed run: ./scripts/assert-changed-files-actions.sh "packages" - name: Install dependencies uses: ./.github/actions/cache-deps with: extension: pipeline - id: set-module-chunks name: Set Module Chunks working-directory: integration-tests/modules run: echo "chunks=$(yarn run jest --listTests --json | jq -cM '[_nwise(length / 3 | ceil)]')" >> $GITHUB_OUTPUT - id: set-module-matrix name: Set Module Matrix run: echo "matrix=$(echo $CHUNKS | jq -cM 'to_entries | map(.key)')" >> $GITHUB_OUTPUT env: CHUNKS: ${{ steps.set-module-chunks.outputs.chunks }} - id: set-api-chunks name: Set API Chunks working-directory: integration-tests/api run: echo "chunks=$(yarn run jest --listTests --json | jq -cM '[_nwise(length / 3 | ceil)]')" >> $GITHUB_OUTPUT - id: set-api-matrix name: Set API Matrix run: echo "matrix=$(echo $CHUNKS | jq -cM 'to_entries | map(.key)')" >> $GITHUB_OUTPUT env: CHUNKS: ${{ steps.set-api-chunks.outputs.chunks }} unit-tests: needs: 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@v3 with: fetch-depth: 0 - name: Setup Node.js environment uses: actions/setup-node@v3 with: node-version: "16.10.0" cache: "yarn" - name: Assert changed run: ./scripts/assert-changed-files-actions.sh "packages" - name: Install dependencies uses: ./.github/actions/cache-deps with: extension: pipeline - name: Build Packages run: yarn build - name: Run unit tests run: yarn test integration-tests-packages: needs: setup 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: Cancel Previous Runs uses: styfle/cancel-workflow-action@0.11.0 with: access_token: ${{ github.token }} - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup Node.js environment uses: actions/setup-node@v3 with: node-version: "16" cache: "yarn" - name: Install dependencies uses: ./.github/actions/cache-deps with: extension: pipeline - name: Build Packages run: yarn build - name: Run integration tests run: yarn test:integration:packages env: DB_PASSWORD: postgres DB_USERNAME: postgres integration-tests-api-matrix: needs: setup name: Shard (${{ matrix.chunk }}) API Integration Tests runs-on: ubuntu-latest strategy: fail-fast: false matrix: chunk: ${{ fromJSON(needs.setup.outputs.api-matrix) }} 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: Cancel Previous Runs uses: styfle/cancel-workflow-action@0.11.0 with: access_token: ${{ github.token }} - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup Node.js environment uses: actions/setup-node@v3 with: node-version: "16.10.0" cache: "yarn" - name: Install dependencies uses: ./.github/actions/cache-deps with: extension: pipeline - name: Build Packages run: yarn build - name: Run API integration tests run: yarn test:integration:api env: DB_USERNAME: postgres DB_PASSWORD: postgres NODE_OPTIONS: "--max_old_space_size=4096" CHUNK: ${{ matrix.chunk }} CHUNKS: ${{ needs.setup.outputs.api-chunks }} integration-tests-api: if: ${{ always() }} runs-on: ubuntu-latest needs: integration-tests-api-matrix steps: - run: exit 1 if: >- ${{ contains(needs.integration-tests-api-matrix.result, 'failure') || contains(needs.integration-tests-api-matrix.result, 'cancelled') || contains(needs.integration-tests-api-matrix.result, 'skipped') }} - run: exit 0 if: ${{ contains(needs.integration-tests-api-matrix.result, 'success') }} integration-tests-plugins: needs: setup runs-on: ubuntu-latest env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} services: 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: Cancel Previous Runs uses: styfle/cancel-workflow-action@0.11.0 with: access_token: ${{ github.token }} - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup Node.js environment uses: actions/setup-node@v3 with: node-version: "16.10.0" cache: "yarn" - name: Install dependencies uses: ./.github/actions/cache-deps with: extension: pipeline - name: Build Packages run: yarn build - name: Run plugin integration tests run: yarn test:integration:plugins env: DB_USERNAME: postgres DB_PASSWORD: postgres NODE_OPTIONS: "--max_old_space_size=4096" integration-tests-modules-matrix: needs: setup name: Shard (${{ matrix.chunk }}) Module Integration Tests strategy: matrix: chunk: ${{ fromJSON(needs.setup.outputs.module-matrix) }} runs-on: ubuntu-latest env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} services: 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: Cancel Previous Runs uses: styfle/cancel-workflow-action@0.11.0 with: access_token: ${{ github.token }} - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup Node.js environment uses: actions/setup-node@v3 with: node-version: "16.10.0" cache: "yarn" - name: Install dependencies uses: ./.github/actions/cache-deps with: extension: pipeline - name: Build Packages run: yarn build - name: Run Modules integration tests run: yarn test:integration:modules 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') }} integration-tests-repositories: needs: setup runs-on: ubuntu-latest env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} services: 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: Cancel Previous Runs uses: styfle/cancel-workflow-action@0.11.0 with: access_token: ${{ github.token }} - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup Node.js environment uses: actions/setup-node@v3 with: node-version: "16.10.0" cache: "yarn" - name: Install dependencies uses: ./.github/actions/cache-deps with: extension: pipeline - name: Run repository integration tests run: yarn test:integration:repositories env: DB_USERNAME: postgres DB_PASSWORD: postgres