name: Run tests against PR on: pull_request: workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: e2e-tests-run: name: Runs E2E tests. runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 - uses: ./.github/actions/cache-deps with: workflow_name: pr-build-and-e2e-tests workflow_cache: ${{ secrets.WORKFLOW_CACHE }} - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '7.4' - name: Install and Build uses: ./.github/actions/install-build - name: Load docker images and start containers. working-directory: plugins/woocommerce run: pnpm exec wc-e2e docker:up - name: Run tests command. working-directory: plugins/woocommerce env: WC_E2E_SCREENSHOTS: 1 E2E_SLACK_TOKEN: ${{ secrets.E2E_SLACK_TOKEN }} E2E_SLACK_CHANNEL: ${{ secrets.E2E_SLACK_CHANNEL }} run: pnpm exec wc-e2e test:e2e - name: Archive E2E test screenshots uses: actions/upload-artifact@v3 if: always() with: name: E2E Screenshots path: plugins/woocommerce/tests/e2e/screenshots if-no-files-found: ignore retention-days: 5 api-tests-run: name: Runs API tests. runs-on: ubuntu-20.04 env: API_TEST_REPORT_DIR: ${{ github.workspace }}/api-test-report steps: - uses: actions/checkout@v3 - uses: ./.github/actions/cache-deps with: workflow_name: pr-build-and-e2e-tests workflow_cache: ${{ secrets.WORKFLOW_CACHE }} - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '7.4' - name: Install and Build uses: ./.github/actions/install-build - name: Load docker images and start containers. working-directory: plugins/woocommerce run: pnpm exec wc-e2e docker:up - name: Run tests command. working-directory: plugins/woocommerce env: BASE_URL: http://localhost:8086 USER_KEY: admin USER_SECRET: password run: pnpm exec wc-api-tests test api - name: Archive API test report if: always() uses: actions/upload-artifact@v3 with: name: api-test-report---pr-${{ github.event.number }} path: | ${{ env.API_TEST_REPORT_DIR }}/allure-results ${{ env.API_TEST_REPORT_DIR }}/allure-report retention-days: 7 k6-tests-run: name: Runs k6 Performance tests runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 - uses: ./.github/actions/cache-deps with: workflow_name: pr-build-and-e2e-tests workflow_cache: ${{ secrets.WORKFLOW_CACHE }} - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '7.4' - name: Install and Build uses: ./.github/actions/install-build - name: Workaround to use initialization file with prepopulated data. working-directory: plugins/woocommerce/tests/e2e/docker run: | cp init-sample-products.sh initialize.sh - name: Load docker images and start containers. working-directory: plugins/woocommerce run: pnpm exec wc-e2e docker:up - name: Install k6 run: | curl https://github.com/grafana/k6/releases/download/v0.33.0/k6-v0.33.0-linux-amd64.tar.gz -L | tar xvz --strip-components 1 - name: Run k6 tests run: | ./k6 run plugins/woocommerce/tests/performance/tests/gh-action-pr-requests.js publish-test-reports: name: Publish test reports if: always() && (contains( needs.*.result, 'success' ) || contains( needs.*.result, 'failure' )) runs-on: ubuntu-18.04 needs: [api-tests-run, e2e-tests-run, k6-tests-run] env: GITHUB_TOKEN: ${{ secrets.REPORTS_TOKEN }} PR_NUMBER: ${{ github.event.number }} RUN_ID: ${{ github.run_id }} COMMIT_SHA: ${{ github.event.pull_request.head.sha }} steps: - name: Publish API test report env: ARTIFACT_NAME: api-test-report---pr-${{ github.event.number }} run: | gh workflow run publish-report.yml \ -f test_workflow=pr \ -f test_type=api \ -f run_id=$RUN_ID \ -f artifact_name=$ARTIFACT_NAME \ -f pr_number=$PR_NUMBER \ -f commit_sha=$COMMIT_SHA \ --repo woocommerce/woocommerce-test-reports