-
Notifications
You must be signed in to change notification settings - Fork 1
134 lines (128 loc) · 4.7 KB
/
playwright.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
name: Playwright Tests
on:
push:
paths-ignore:
- 'README.md'
branches: main
pull_request:
paths-ignore:
- 'README.md'
branches: main
permissions:
contents: 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=()
# 遍历所有以 '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 }}
- name: List test-results directory
run: |
echo "Listing contents of ${{ matrix.folder }}/test-results/"
ls -R ${{ matrix.folder }}/test-results/
- name: Collect zip files
run: |
mkdir -p zip-files/${{ matrix.folder }}
find ${{ matrix.folder }}/test-results/ -name '*.zip' -type f -exec cp {} zip-files/${{ matrix.folder }}/ \;
- name: List collected zip files
run: |
echo "Listing collected zip files in zip-files/${{ matrix.folder }}/"
ls -R zip-files/${{ 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: List downloaded artifacts
run: |
echo "Listing contents of all-zip-files/"
ls -R all-zip-files/
- name: Collect all zip files
run: |
mkdir -p deploy-zip-files
find all-zip-files/ -name '*.zip' -type f -exec cp {} deploy-zip-files/ \;
- 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></head><body><h1>Playwright Traces</h1><ul>" > deploy-zip-files/index.html
for file in deploy-zip-files/*.zip; do
filename=$(basename "$file")
url="https://${{ github.repository_owner }}.github.io/${{ github.repository }}/$filename"
trace_url="https://trace.playwright.dev/?trace=$url"
echo "<li><a href='$trace_url'>$filename</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@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: deploy-zip-files/