Update playwright.yml #67
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: Check test results and deploy traces | |
on: | |
push: | |
paths-ignore: | |
- 'README.md' | |
branches: main | |
pull_request: | |
paths-ignore: | |
- 'README.md' | |
branches: main | |
permissions: | |
contents: write | |
pull-requests: write | |
jobs: | |
generate-matrix: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- uses: actions/checkout@v4 | |
- id: set-matrix | |
run: | | |
folders=() | |
for dir in test*; do | |
if [ -d "$dir" ]; then | |
# check if the folder contains a playwright.config.ts file | |
if [ -f "$dir/playwright.config.ts" ]; then | |
echo "Adding $dir to matrix (contains Playwright)" | |
folders+=("$dir") | |
else | |
echo "Skipping $dir (playwright.config.ts not found)" | |
fi | |
fi | |
done | |
if [ ${#folders[@]} -eq 0 ]; then | |
echo "No valid folders found." | |
folders_json='[]' | |
else | |
folders_json=$(printf '%s\n' "${folders[@]}" | jq -R -s -c 'split("\n") | map(select(length > 0))') | |
fi | |
echo "Folders JSON: $folders_json" | |
echo "matrix={\"folder\": $folders_json}" >> $GITHUB_OUTPUT | |
test: | |
needs: generate-matrix | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} | |
fail-fast: false | |
max-parallel: 4 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: lts/* | |
- name: Install dependencies | |
run: npm ci | |
working-directory: ${{ matrix.folder }} | |
- name: Install Playwright Browsers | |
run: npx playwright install --with-deps | |
working-directory: ${{ matrix.folder }} | |
- name: Run Playwright tests | |
run: npx playwright test | |
working-directory: ${{ matrix.folder }} | |
- name: List test-results directory | |
run: | | |
echo "Listing contents of ${{ matrix.folder }}/test-results/" | |
ls -R ${{ matrix.folder }}/test-results/ | |
- name: Collect trace.zip files | |
run: | | |
mkdir -p zip-files/ | |
find ${{ matrix.folder }}/test-results/ -name 'trace.zip' -type f -exec cp --parents {} zip-files/ \; | |
- name: List collected trace.zip files | |
run: | | |
echo "Listing collected trace.zip files in zip-files/${{ matrix.folder }}/" | |
ls -R zip-files/${{ matrix.folder }}/ | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: ${{ matrix.folder }}-trace | |
path: zip-files/ | |
retention-days: 30 | |
# - uses: actions/upload-artifact@v4 | |
# if: always() | |
# with: | |
# name: playwright-report-${{ matrix.folder }} | |
# path: ${{ matrix.folder }}/playwright-report/ | |
# retention-days: 30 | |
deploy: | |
needs: test | |
runs-on: ubuntu-latest | |
if: needs.test.result == 'success' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download trace artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: all-trace-files/ | |
- name: List downloaded artifacts | |
run: | | |
echo "Listing contents of all-trace-files/" | |
ls -R all-trace-files/ | |
- name: Collect all trace.zip files | |
run: | | |
mkdir -p deploy-zip-files | |
find all-trace-files/ -name 'trace.zip' -type f -print0 | while IFS= read -r -d '' file; do | |
dir1=$(basename "$(dirname "$file")") | |
dir2=$(basename "$(dirname "$(dirname "$file")")") | |
dir3=$(basename "$(dirname "$(dirname "$(dirname "$file")")")") | |
relpath="$dir3/$dir1/$(basename "$file")" | |
mkdir -p "deploy-zip-files/$(dirname "$relpath")" | |
cp "$file" "deploy-zip-files/$relpath" | |
done | |
- name: List deploy-zip-files directory | |
run: | | |
echo "Listing contents of deploy-zip-files/" | |
ls -R deploy-zip-files/ | |
- name: Generate index.html | |
run: | | |
echo "<!DOCTYPE html><html><head><meta charset='UTF-8'><title>Playwright Traces</title><style> | |
body { | |
background-color: #2B313F; | |
color: #EAF4FC; | |
font-family: Arial, sans-serif; | |
} | |
h1 { | |
text-align: center; | |
margin-top: 50px; | |
} | |
ul { | |
list-style-type: none; | |
padding: 0; | |
} | |
li { | |
text-align: center; | |
font-size: 1.2em; | |
margin: 20px 0; | |
} | |
a { | |
color: #EAF4FC; | |
text-decoration: none; | |
padding: 10px 20px; | |
display: inline-block; | |
transition: all 0.3s ease; | |
} | |
a:hover { | |
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.3); | |
} | |
</style></head><body><h1>Playwright Traces</h1><ul>" > deploy-zip-files/index.html | |
find deploy-zip-files/ -name 'trace.zip' -type f | while read file; do | |
relpath=${file#deploy-zip-files/} | |
url="https://${{ github.repository_owner }}.github.io/LLM-Generated-web-and-Playwright-E2E-Testing/$relpath" | |
trace_url="https://trace.playwright.dev/?trace=$url" | |
echo "<li><a href='$trace_url'>$relpath</a></li>" >> deploy-zip-files/index.html | |
done | |
echo "</ul></body></html>" >> deploy-zip-files/index.html | |
- name: Deploy to GitHub Pages | |
uses: peaceiris/actions-gh-pages@v4 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: deploy-zip-files/ | |
keep_files: true |