name: Run tests against PR in an environment with HPOS disabled on: pull_request: paths-ignore: - '**.md' - '**/changelog/**' - '**/.wireit/**' - 'docs/**' - 'plugins/woo-ai/**' - 'plugins/woocommerce/.wordpress-org/**' - 'plugins/woocommerce/i18n/**' - 'plugins/woocommerce-beta-tester/**' - 'tools/**' workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: {} jobs: non-hpos-e2e-tests-run: name: Runs E2E tests with HPOS disabled. runs-on: ubuntu-20.04 timeout-minutes: 60 strategy: fail-fast: false matrix: shard: [ { number: 1, name: 1/5 }, { number: 2, name: 2/5 }, { number: 3, name: 3/5 }, { number: 4, name: 4/5 }, { number: 5, name: 5/5 }, ] permissions: contents: read env: ALLURE_RESULTS_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/allure-results ALLURE_REPORT_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/allure-report steps: - uses: actions/checkout@v3 - name: Setup WooCommerce Monorepo uses: ./.github/actions/setup-woocommerce-monorepo with: install: '@woocommerce/plugin-woocommerce...' build: '@woocommerce/plugin-woocommerce' - name: Load docker images and start containers working-directory: plugins/woocommerce run: pnpm env:test - name: Download and install Chromium browser. working-directory: plugins/woocommerce run: pnpm exec playwright install chromium - name: Run Playwright E2E tests. timeout-minutes: 60 id: run_playwright_e2e_tests env: USE_WP_ENV: 1 ENABLE_HPOS: 0 FORCE_COLOR: 1 working-directory: plugins/woocommerce run: pnpm exec playwright test --config=tests/e2e-pw/playwright.config.js --shard ${{ matrix.shard.name }} - name: Upload reports to GitHub Actions Artifacts if: always() uses: actions/upload-artifact@v4 with: name: all-blob-reports-${{ matrix.shard.number }} path: ${{ env.ALLURE_RESULTS_DIR }} retention-days: 1 compression-level: 9 e2e-tests-success: name: Evaluate e2e tests results runs-on: ubuntu-latest needs: non-hpos-e2e-tests-run if: ${{ always() }} steps: - run: | result="${{ needs.non-hpos-e2e-tests-run.result }}" if [[ $result != "success" && $result != "skipped" ]]; then echo "One or more e2e tests have failed!" exit 1 fi echo "e2e tests have completed successfully." merge-reports: name: Merge e2e test reports # Merge reports after playwright-tests, even if some shards have failed if: always() needs: [e2e-tests-success] runs-on: ubuntu-latest env: ALLURE_RESULTS_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/allure-results ALLURE_REPORT_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/allure-report steps: - uses: actions/checkout@v3 - name: Setup WooCommerce Monorepo uses: ./.github/actions/setup-woocommerce-monorepo with: install: '@woocommerce/plugin-woocommerce...' build: '@woocommerce/plugin-woocommerce' - name: Download blob reports from GitHub Actions Artifacts uses: actions/download-artifact@v4 with: path: ${{ env.ALLURE_RESULTS_DIR }} pattern: all-blob-reports-* run-id: e2e-tests-run merge-multiple: true - name: Generate Playwright E2E Test report. id: generate_e2e_report working-directory: plugins/woocommerce run: pnpm exec allure generate --clean ${{ env.ALLURE_RESULTS_DIR }} --output ${{ env.ALLURE_REPORT_DIR }} - name: Archive Playwright E2E test report if: | always() && steps.generate_e2e_report.conclusion == 'success' uses: actions/upload-artifact@v4 with: name: e2e-test-report---pr-${{ github.event.number }} path: | ${{ env.ALLURE_RESULTS_DIR }} ${{ env.ALLURE_REPORT_DIR }} if-no-files-found: ignore retention-days: 5 non-hpos-api-tests-run: name: Runs API tests with HPOS disabled. runs-on: ubuntu-20.04 permissions: contents: read env: ALLURE_RESULTS_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/api-core-tests/api-test-report/allure-results ALLURE_REPORT_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/api-core-tests/api-test-report/allure-report steps: - uses: actions/checkout@v3 - name: Setup WooCommerce Monorepo uses: ./.github/actions/setup-woocommerce-monorepo with: install: '@woocommerce/plugin-woocommerce...' build: '@woocommerce/plugin-woocommerce' - name: Load docker images and start containers working-directory: plugins/woocommerce run: pnpm --filter='@woocommerce/plugin-woocommerce' env:test - name: Run Playwright API tests. id: run_playwright_api_tests working-directory: plugins/woocommerce env: BASE_URL: http://localhost:8086 USER_KEY: admin USER_SECRET: password ENABLE_HPOS: 0 run: pnpm exec playwright test --config=tests/api-core-tests/playwright.config.js - name: Generate Playwright API Test report. id: generate_api_report if: | always() && ( steps.run_playwright_api_tests.conclusion != 'cancelled' || steps.run_playwright_api_tests.conclusion != 'skipped' ) working-directory: plugins/woocommerce run: pnpm exec allure generate --clean ${{ env.ALLURE_RESULTS_DIR }} --output ${{ env.ALLURE_REPORT_DIR }} - name: Archive Playwright API test report if: | always() && steps.generate_api_report.conclusion == 'success' uses: actions/upload-artifact@v3 with: name: api-test-report---pr-${{ github.event.number }} path: | ${{ env.ALLURE_RESULTS_DIR }} ${{ env.ALLURE_REPORT_DIR }} if-no-files-found: ignore retention-days: 5