Skip to content

Commit 7302a4a

Browse files
astandrikAnton Standrik
andauthored
chore: move e2e to separate yaml (#1675)
Co-authored-by: Anton Standrik <astandrik@Antons-MacBook-Air.local>
1 parent 09b6784 commit 7302a4a

File tree

2 files changed

+345
-337
lines changed

2 files changed

+345
-337
lines changed

.github/workflows/ci.yml

Lines changed: 0 additions & 337 deletions
Original file line numberDiff line numberDiff line change
@@ -36,340 +36,3 @@ jobs:
3636
node-version: 18
3737
- run: npm ci
3838
- run: npm test
39-
40-
e2e_tests:
41-
name: Playwright Tests
42-
runs-on: ubuntu-latest
43-
permissions:
44-
contents: read
45-
46-
services:
47-
backend:
48-
image: ghcr.io/ydb-platform/local-ydb:nightly
49-
ports:
50-
- 2135:2135
51-
- 8765:8765
52-
options: --hostname localhost -e YDB_ALLOW_ORIGIN="http://localhost:3000"
53-
54-
steps:
55-
- uses: actions/checkout@v4
56-
with:
57-
fetch-depth: 0
58-
59-
- name: Setup Node.js
60-
uses: actions/setup-node@v4
61-
with:
62-
node-version: 18
63-
cache: npm
64-
65-
- name: Install dependencies
66-
run: npm ci
67-
68-
- name: Install Playwright deps
69-
run: npm run test:e2e:install
70-
71-
- name: Run Playwright tests
72-
id: run_tests
73-
run: npm run test:e2e
74-
env:
75-
CI: true
76-
PLAYWRIGHT_VIDEO: 'on'
77-
78-
- name: Upload Playwright artifacts
79-
if: always()
80-
uses: actions/upload-artifact@v3
81-
with:
82-
name: playwright-artifacts
83-
path: playwright-artifacts
84-
retention-days: 5
85-
86-
- name: Get test results
87-
if: always()
88-
id: test-results
89-
run: |
90-
echo "Current directory: $(pwd)"
91-
echo "Listing playwright-artifacts directory:"
92-
ls -R playwright-artifacts
93-
94-
if [ -f "playwright-artifacts/test-results.json" ]; then
95-
echo "Parsing JSON file:"
96-
total=$(jq '.stats.expected + .stats.unexpected + .stats.flaky + .stats.skipped' playwright-artifacts/test-results.json)
97-
passed=$(jq '.stats.expected' playwright-artifacts/test-results.json)
98-
failed=$(jq '.stats.unexpected' playwright-artifacts/test-results.json)
99-
flaky=$(jq '.stats.flaky' playwright-artifacts/test-results.json)
100-
skipped=$(jq '.stats.skipped' playwright-artifacts/test-results.json)
101-
102-
echo "Parsed values:"
103-
echo "Total: $total"
104-
echo "Passed: $passed"
105-
echo "Failed: $failed"
106-
echo "Flaky: $flaky"
107-
echo "Skipped: $skipped"
108-
else
109-
echo "test-results.json file not found"
110-
total=0
111-
passed=0
112-
failed=0
113-
flaky=0
114-
skipped=0
115-
fi
116-
117-
echo "total=$total" >> $GITHUB_OUTPUT
118-
echo "passed=$passed" >> $GITHUB_OUTPUT
119-
echo "failed=$failed" >> $GITHUB_OUTPUT
120-
echo "flaky=$flaky" >> $GITHUB_OUTPUT
121-
echo "skipped=$skipped" >> $GITHUB_OUTPUT
122-
123-
bundle_size:
124-
name: Check Bundle Size
125-
runs-on: ubuntu-latest
126-
if: ${{github.event.action != 'checks_requested'}}
127-
outputs:
128-
current_size: ${{ steps.current_size.outputs.size }}
129-
main_size: ${{ steps.main_size.outputs.size }}
130-
diff: ${{ steps.size_diff.outputs.diff }}
131-
percent: ${{ steps.size_diff.outputs.percent }}
132-
steps:
133-
- uses: actions/checkout@v4
134-
with:
135-
fetch-depth: 0
136-
137-
- name: Setup Node.js
138-
uses: actions/setup-node@v4
139-
with:
140-
node-version: 18
141-
cache: npm
142-
143-
- name: Install dependencies
144-
run: npm ci
145-
146-
- name: Build bundle (current branch)
147-
run: npm run build
148-
149-
- name: Get current bundle size
150-
id: current_size
151-
run: |
152-
size=$(du -sb build | cut -f1)
153-
echo "size=$size" >> $GITHUB_OUTPUT
154-
155-
- name: Checkout main branch
156-
uses: actions/checkout@v4
157-
with:
158-
ref: main
159-
160-
- name: Install dependencies (main)
161-
run: npm ci
162-
163-
- name: Build bundle (main branch)
164-
run: npm run build
165-
166-
- name: Get main bundle size
167-
id: main_size
168-
run: |
169-
size=$(du -sb build | cut -f1)
170-
echo "size=$size" >> $GITHUB_OUTPUT
171-
172-
- name: Calculate size difference
173-
id: size_diff
174-
run: |
175-
current=${{ steps.current_size.outputs.size }}
176-
main=${{ steps.main_size.outputs.size }}
177-
diff=$((current - main))
178-
if [ "$main" -ne "0" ]; then
179-
percent=$(awk "BEGIN {printf \"%.2f\", ($diff/$main) * 100}")
180-
else
181-
percent="N/A"
182-
fi
183-
echo "diff=$diff" >> $GITHUB_OUTPUT
184-
echo "percent=$percent" >> $GITHUB_OUTPUT
185-
186-
deploy_report:
187-
name: Deploy Test Report
188-
needs: [e2e_tests]
189-
if: ${{always() && (github.ref == 'refs/heads/main' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository))}}
190-
runs-on: ubuntu-latest
191-
permissions:
192-
contents: write
193-
pages: write
194-
195-
steps:
196-
- uses: actions/checkout@v4
197-
with:
198-
fetch-depth: 0
199-
200-
- name: Fetch gh-pages branch
201-
run: |
202-
git fetch origin gh-pages:gh-pages
203-
mkdir gh-pages
204-
git --work-tree=gh-pages checkout gh-pages -- .
205-
206-
- name: Download Playwright artifacts
207-
uses: actions/download-artifact@v3
208-
with:
209-
name: playwright-artifacts
210-
path: playwright-artifacts
211-
212-
- name: Copy new report
213-
run: |
214-
if [ "${{ github.event_name }}" = "pull_request" ]; then
215-
REPORT_DIR="${{ github.event.pull_request.number }}"
216-
else
217-
REPORT_DIR="main"
218-
fi
219-
rm -rf gh-pages/$REPORT_DIR
220-
mkdir -p gh-pages/$REPORT_DIR
221-
cp -r playwright-artifacts/playwright-report/* gh-pages/$REPORT_DIR/
222-
223-
- name: Deploy report to GitHub Pages
224-
uses: peaceiris/actions-gh-pages@v3
225-
with:
226-
github_token: ${{ secrets.GITHUB_TOKEN }}
227-
publish_dir: gh-pages
228-
destination_dir: .
229-
force_orphan: true
230-
231-
update_pr:
232-
name: Update PR Description
233-
needs: [e2e_tests, bundle_size]
234-
if: ${{always() && github.event_name == 'pull_request'}}
235-
runs-on: ubuntu-latest
236-
permissions:
237-
pull-requests: write
238-
239-
steps:
240-
- uses: actions/checkout@v4
241-
with:
242-
fetch-depth: 0
243-
244-
- name: Download Playwright artifacts
245-
uses: actions/download-artifact@v3
246-
with:
247-
name: playwright-artifacts
248-
path: playwright-artifacts
249-
250-
- name: Count new tests
251-
id: count_tests
252-
run: |
253-
git fetch origin main:main
254-
new_tests=0
255-
256-
# Get list of changed test files
257-
for file in $(git diff --name-only main...HEAD | grep -E '^tests/suites/.*\.(spec|test)\.(ts|tsx|js|jsx)$'); do
258-
# Count tests in current version
259-
if git show HEAD:"$file" > /dev/null 2>&1; then
260-
current_tests=$(git show HEAD:"$file" | grep -E "test\([\'\"]" | wc -l)
261-
else
262-
current_tests=0
263-
fi
264-
265-
# Count tests in main version
266-
if git show main:"$file" > /dev/null 2>&1; then
267-
base_tests=$(git show main:"$file" | grep -E "test\([\'\"]" | wc -l)
268-
else
269-
base_tests=0
270-
fi
271-
272-
# Add difference to total
273-
((new_tests += current_tests - base_tests))
274-
done
275-
276-
echo "new_tests=$new_tests" >> $GITHUB_OUTPUT
277-
278-
- name: Update PR description
279-
uses: actions/github-script@v6
280-
with:
281-
github-token: ${{secrets.GITHUB_TOKEN}}
282-
script: |
283-
const fs = require('fs');
284-
const testResultsPath = 'playwright-artifacts/test-results.json';
285-
let testResults;
286-
287-
if (fs.existsSync(testResultsPath)) {
288-
const rawData = fs.readFileSync(testResultsPath);
289-
const data = JSON.parse(rawData);
290-
testResults = {
291-
total: data.stats.expected + data.stats.unexpected + data.stats.flaky + data.stats.skipped,
292-
passed: data.stats.expected,
293-
failed: data.stats.unexpected,
294-
flaky: data.stats.flaky,
295-
skipped: data.stats.skipped
296-
};
297-
} else {
298-
console.log('Test results file not found');
299-
testResults = { total: 0, passed: 0, failed: 0, flaky: 0, skipped: 0 };
300-
}
301-
302-
const reportUrl = `https://${context.repo.owner}.github.io/${context.repo.repo}/${context.issue.number}/`;
303-
const status = testResults.failed > 0 ? '❌ FAILED' : (testResults.flaky > 0 ? '⚠️ FLAKY' : '✅ PASSED');
304-
const statusColor = testResults.failed > 0 ? 'red' : (testResults.flaky > 0 ? 'orange' : 'green');
305-
306-
const currentSize = parseInt('${{ needs.bundle_size.outputs.current_size }}');
307-
const mainSize = parseInt('${{ needs.bundle_size.outputs.main_size }}');
308-
const diff = parseInt('${{ needs.bundle_size.outputs.diff }}');
309-
const percent = '${{ needs.bundle_size.outputs.percent }}';
310-
311-
const formatSize = (size) => {
312-
if (size >= 1024) {
313-
return `${(size / (1024 * 1024)).toFixed(2)} MB`;
314-
}
315-
return `${(size / 1024).toFixed(2)} KB`;
316-
};
317-
318-
const bundleStatus = percent === 'N/A' ? '⚠️' :
319-
parseFloat(percent) > 0 ? '🔺' :
320-
parseFloat(percent) < 0 ? '🔽' : '✅';
321-
322-
const newTests = parseInt('${{ steps.count_tests.outputs.new_tests }}');
323-
const testsStatus = newTests > 0 ? '✨' : '➖';
324-
325-
const ciSection = `## CI Results
326-
327-
### Test Status: <span style="color: ${statusColor};">${status}</span>
328-
📊 [Full Report](${reportUrl})
329-
330-
| Total | Passed | Failed | Flaky | Skipped | New Tests |
331-
|:-----:|:------:|:------:|:-----:|:-------:|:---------:|
332-
| ${testResults.total} | ${testResults.passed} | ${testResults.failed} | ${testResults.flaky} | ${testResults.skipped} | ${testsStatus} ${newTests} |
333-
334-
### Bundle Size: ${bundleStatus}
335-
Current: ${formatSize(currentSize)} | Main: ${formatSize(mainSize)}
336-
Diff: ${diff > 0 ? '+' : ''}${formatSize(Math.abs(diff))} (${percent === 'N/A' ? 'N/A' : `${percent}%`})
337-
338-
${
339-
percent === 'N/A' ? '⚠️ Unable to calculate change.' :
340-
parseFloat(percent) > 0 ? '⚠️ Bundle size increased. Please review.' :
341-
parseFloat(percent) < 0 ? '✅ Bundle size decreased.' : '✅ Bundle size unchanged.'
342-
}
343-
344-
<details>
345-
<summary>ℹ️ CI Information</summary>
346-
347-
- Test recordings for failed tests are available in the full report.
348-
- Bundle size is measured for the entire 'dist' directory.
349-
- 📊 indicates links to detailed reports.
350-
- 🔺 indicates increase, 🔽 decrease, and ✅ no change in bundle size.
351-
- ${testsStatus} indicates ${newTests} new test cases added in this PR.
352-
</details>`;
353-
354-
const { data: pullRequest } = await github.rest.pulls.get({
355-
owner: context.repo.owner,
356-
repo: context.repo.repo,
357-
pull_number: context.issue.number,
358-
});
359-
360-
const currentBody = pullRequest.body || '';
361-
const ciSectionRegex = /## CI Results[\s\S]*?(?=\n## (?!CI Results)|$)/;
362-
363-
let newBody = currentBody;
364-
if (ciSectionRegex.test(newBody)) {
365-
newBody = newBody.replace(ciSectionRegex, ciSection);
366-
} else {
367-
newBody += '\n\n' + ciSection;
368-
}
369-
370-
await github.rest.pulls.update({
371-
owner: context.repo.owner,
372-
repo: context.repo.repo,
373-
pull_number: context.issue.number,
374-
body: newBody,
375-
});

0 commit comments

Comments
 (0)