Skip to content

Merge pull request #23 from Yuankai619/develop/test2-p2 #63

Merge pull request #23 from Yuankai619/develop/test2-p2

Merge pull request #23 from Yuankai619/develop/test2-p2 #63

Workflow file for this run

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/${{ github.event.repository.name }}/$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