Run daily tests in an environment with COT enabled #248
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Run daily tests in an environment with COT enabled | |
on: | |
schedule: | |
- cron: '30 2 * * *' | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
cot-e2e-tests-run: | |
name: Runs E2E tests with COT enabled. | |
runs-on: ubuntu-20.04 | |
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 | |
- name: Load docker images and start containers with COT enabled. | |
working-directory: plugins/woocommerce | |
env: | |
ENABLE_HPOS: 1 | |
run: pnpm env:test:cot --filter=woocommerce | |
- 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 | |
working-directory: plugins/woocommerce | |
run: pnpm exec playwright test --config=tests/e2e-pw/playwright.config.js | |
- name: Generate Playwright E2E Test report. | |
id: generate_e2e_report | |
if: | | |
always() && | |
( | |
steps.run_playwright_e2e_tests.conclusion != 'cancelled' || | |
steps.run_playwright_e2e_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 E2E test report | |
if: | | |
always() && | |
steps.generate_e2e_report.conclusion == 'success' | |
uses: actions/upload-artifact@v3 | |
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 | |
cot-api-tests-run: | |
name: Runs API tests with COT enabled. | |
runs-on: ubuntu-20.04 | |
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 | |
- name: Load docker images and start containers with COT enabled. | |
working-directory: plugins/woocommerce | |
env: | |
ENABLE_HPOS: 1 | |
run: pnpm env:test:cot --filter=woocommerce | |
- 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 | |
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 | |
test-summary: | |
name: Post test results | |
if: | | |
always() && | |
! github.event.pull_request.head.repo.fork && | |
( | |
contains( needs.*.result, 'success' ) || | |
contains( needs.*.result, 'failure' ) | |
) | |
runs-on: ubuntu-20.04 | |
needs: [cot-api-tests-run, cot-e2e-tests-run] | |
steps: | |
- name: Create dirs | |
run: | | |
mkdir -p repo | |
mkdir -p artifacts/api | |
mkdir -p artifacts/e2e | |
mkdir -p output | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
path: repo | |
- name: Download API test report artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: api-test-report---pr-${{ github.event.number }} | |
path: artifacts/api | |
- name: Download Playwright E2E test report artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: e2e-test-report---pr-${{ github.event.number }} | |
path: artifacts/e2e | |
- name: Prepare test summary | |
id: prepare-test-summary | |
uses: actions/github-script@v6 | |
env: | |
API_SUMMARY_PATH: ${{ github.workspace }}/artifacts/api/allure-report/widgets/summary.json | |
E2E_PW_SUMMARY_PATH: ${{ github.workspace }}/artifacts/e2e/allure-report/widgets/summary.json | |
PR_NUMBER: ${{ github.event.number }} | |
SHA: ${{ github.event.pull_request.head.sha }} | |
with: | |
result-encoding: string | |
script: | | |
const script = require( './repo/.github/workflows/scripts/prepare-test-summary.js' ) | |
return await script( { core } ) | |
- name: Find PR comment by github-actions[bot] | |
uses: peter-evans/find-comment@v2 | |
id: find-comment | |
with: | |
issue-number: ${{ github.event.pull_request.number }} | |
comment-author: 'github-actions[bot]' | |
body-includes: Test Results Summary | |
- name: Create or update PR comment | |
uses: peter-evans/create-or-update-comment@v2 | |
with: | |
comment-id: ${{ steps.find-comment.outputs.comment-id }} | |
issue-number: ${{ github.event.pull_request.number }} | |
body: ${{ steps.prepare-test-summary.outputs.result }} | |
edit-mode: replace | |
publish-test-reports: | |
name: Publish test reports | |
if: | | |
always() && | |
! github.event.pull_request.head.repo.fork && | |
( | |
contains( needs.*.result, 'success' ) || | |
contains( needs.*.result, 'failure' ) | |
) | |
runs-on: ubuntu-20.04 | |
needs: [cot-api-tests-run, cot-e2e-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 test reports | |
env: | |
API_ARTIFACT: api-test-report---pr-${{ github.event.number }} | |
E2E_ARTIFACT: e2e-test-report---pr-${{ github.event.number }} | |
run: | | |
gh workflow run publish-test-reports-pr.yml \ | |
-f run_id=$RUN_ID \ | |
-f api_artifact=$API_ARTIFACT \ | |
-f e2e_artifact=$E2E_ARTIFACT \ | |
-f pr_number=$PR_NUMBER \ | |
-f commit_sha=$COMMIT_SHA \ | |
-f s3_root=public \ | |
--repo woocommerce/woocommerce-test-reports |