Nightly regression tests #91
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: Nightly regression tests | |
on: | |
schedule: | |
- cron: '0 0 * * *' | |
workflow_dispatch: | |
inputs: | |
test_command: | |
description: 'Custom test command' | |
required: true | |
default: '--grep-invert "@devRun"' | |
type: string | |
parallelism: | |
description: 'Number of machines to split tests' | |
required: false | |
default: 2 | |
type: number | |
jobs: | |
setup-matrix: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- id: set-matrix | |
run: | | |
count=${{ github.event.inputs.parallelism || 2 }} | |
matrix=$(seq -s ',' 1 $count) | |
echo "matrix=$(jq -cn --argjson groups "[$matrix]" '{group: $groups}')" >> $GITHUB_OUTPUT | |
nightly-test: | |
needs: setup-matrix | |
timeout-minutes: 15 | |
runs-on: ubuntu-latest | |
container: | |
image: mcr.microsoft.com/playwright:v1.48.2-jammy | |
env: | |
BASE_URL: ${{ vars.BASE_URL }} | |
strategy: | |
fail-fast: false | |
matrix: ${{ fromJson(needs.setup-matrix.outputs.matrix) }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: lts/* | |
- name: Cache node_modules | |
uses: actions/cache@v4 | |
id: cache-node-modules | |
with: | |
path: node_modules | |
key: modules-${{ hashFiles('package-lock.json') }} | |
- name: Install dependencies | |
if: steps.cache-node-modules.outputs.cache-hit != 'true' | |
run: npm ci | |
- name: Run Playwright tests | |
run: xvfb-run npx playwright test ${{ github.event.inputs.test_command || '--grep-invert "@devRun"' }} --shard=${{ matrix.group }}/${{ github.event.inputs.parallelism || 2 }} | |
- name: Upload test results and artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-results-${{ matrix.group }} | |
path: | | |
test-results/ | |
allure-results | |
retention-days: 7 | |
merge-reports: | |
needs: nightly-test | |
if: always() | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download all test results | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts | |
- name: Merge Allure Results | |
run: | | |
mkdir -p allure-results | |
for dir in artifacts/test-results-*/allure-results; do | |
cp -r $dir/* allure-results/ | |
done | |
- name: Link Git Information And Browser Version To Allure Report | |
working-directory: allure-results | |
if: always() | |
run: | | |
git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
{ | |
echo BUILD_URL=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
echo GIT_BRANCH=${{ github.head_ref || github.ref_name }} | |
echo GIT_COMMIT_ID=${{ github.sha }} | |
echo GIT_COMMIT_MESSAGE="$(git show -s --format=%s HEAD)" | |
echo GIT_COMMIT_AUTHOR_NAME="$(git show -s --format='%ae' HEAD)" | |
echo GIT_COMMIT_TIME="$(git show -s --format=%ci HEAD)" | |
} >> environment.properties | |
- name: Generate Allure Report | |
uses: simple-elf/allure-report-action@master | |
if: always() | |
id: allure-report | |
with: | |
allure_results: allure-results | |
allure_report: allure-report | |
gh_pages: gh-pages | |
allure_history: allure-history | |
- name: Deploy Report To Github Pages | |
if: always() | |
uses: peaceiris/actions-gh-pages@v4 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: allure-history |