Update playwright.yml #11
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: Playwright Tests | |
on: | |
push: | |
branches: [ main, master ] | |
pull_request: | |
branches: [ main, master ] | |
jobs: | |
generate-matrix: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- uses: actions/checkout@v4 | |
- id: set-matrix | |
run: | | |
# 初始化一个空的数组来存储符合条件的文件夹 | |
folders=() | |
# 遍历所有以 'test' 开头的子目录 | |
for dir in test*; do | |
if [ -d "$dir" ]; then | |
# 检查子目录中是否存在 package.json 文件 | |
if [ -f "$dir/playwright.config.ts" ]; then | |
# 可选:检查 package.json 中是否包含 Playwright 依赖 | |
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 | |
# 将文件夹数组转换为 JSON 格式 | |
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 }} | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: zip-files-${{ matrix.folder }} | |
path: zip-files/${{ matrix.folder }} | |
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 | |
- uses: actions/download-artifact@v4 | |
with: | |
# 不指定名称,下载所有工件 | |
path: all-zip-files/ | |
- name: Collect all zip files | |
run: | | |
mkdir -p deploy-zip-files | |
find all-zip-files/ -name "*.zip" -exec cp {} deploy-zip-files/ \; | |
- name: Deploy to GitHub Pages | |
uses: peaceiris/actions-gh-pages@v3 | |
with: | |
personal_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: deploy-zip-files/ | |
destination_dir: ./ |