Skip to content

Commit bb95bbb

Browse files
committed
better reporter
1 parent 3636158 commit bb95bbb

File tree

2 files changed

+59
-38
lines changed

2 files changed

+59
-38
lines changed

.github/workflows/tests_primary.yml

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,19 @@ jobs:
4141
contents: read # This is required for actions/checkout to succeed
4242
steps:
4343
- uses: actions/checkout@v4
44-
- name: Upload blob report
45-
# We only merge reports for PRs as per .github/workflows/create_test_report.yml.
46-
if: ${{ !cancelled() && github.event_name == 'pull_request' }}
47-
uses: ./.github/actions/upload-blob-report
44+
- uses: ./.github/actions/run-test
4845
with:
49-
report_dir: test-blob-report
50-
job_name: ${{ inputs.bot-name }}
46+
node-version: ${{ matrix.node-version }}
47+
browsers-to-install: ${{ matrix.browser }} chromium
48+
command: npm run test -- --project=${{ matrix.browser }}-* page-check:20
49+
bot-name: "${{ matrix.browser }}-${{ matrix.os }}-node${{ matrix.node-version }}"
50+
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
51+
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
52+
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
53+
# - name: Upload blob report
54+
# # We only merge reports for PRs as per .github/workflows/create_test_report.yml.
55+
# if: ${{ !cancelled() && github.event_name == 'pull_request' }}
56+
# uses: ./.github/actions/upload-blob-report
57+
# with:
58+
# report_dir: test-blob-report
59+
# job_name: ${{ inputs.bot-name }}

tests/config/ghaMarkdownReporter.ts

Lines changed: 44 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -15,70 +15,82 @@
1515
*/
1616

1717
import { MarkdownReporter } from 'playwright/lib/internalsForTest';
18-
import * as github from '@actions/github';
18+
import { context, getOctokit } from '@actions/github';
1919
import * as core from '@actions/core';
2020

2121
import type { MetadataWithCommitInfo } from 'playwright/src/isomorphic/types';
2222

23+
function getGithubToken() {
24+
const token = process.env.GITHUB_TOKEN || core.getInput('github-token');
25+
if (!token) {
26+
core.setFailed('Missing "github-token" input');
27+
throw new Error('Missing "github-token" input');
28+
}
29+
return token;
30+
}
31+
32+
const octokit = getOctokit(getGithubToken());
33+
2334
const magicComment = '<!-- Generated by Playwright markdown reporter -->';
35+
2436
class GHAMarkdownReporter extends MarkdownReporter {
2537
// declare config: FullConfig;
2638

2739
async publishReport(report: string) {
2840
core.info('Publishing report to PR.');
29-
const metadata = this.config.metadata as MetadataWithCommitInfo;
30-
const prHref = metadata.ci?.prHref;
31-
const prNumber = parseInt(prHref?.split('/').pop(), 10);
41+
const { prNumber, prHref } = this.pullRequestFromMetadata();
3242
if (!prNumber) {
33-
core.info(`No PR number found, skipping GHA comment. prHref: ${prHref}`);
43+
core.info(`No PR number found, skipping GHA comment. PR href: ${prHref}`);
3444
return;
3545
}
3646
core.info(`Posting comment to PR ${prHref}`);
3747

38-
const token = process.env.GITHUB_TOKEN || core.getInput('github-token');
39-
if (!token) {
40-
core.setFailed('Missing "github-token" input');
41-
return;
42-
}
43-
const octokit = github.getOctokit(token);
44-
const context = github.context;
45-
46-
const reportUrl = process.env.HTML_REPORT_URL;
47-
const mergeWorkflowUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
48+
await this.collapsePreviousComments(prNumber);
49+
await this.addNewReportComment(prNumber, report);
50+
}
4851

49-
{
50-
// Mark previous comments as outdated by minimizing them.
51-
const { data: comments } = await octokit.rest.issues.listComments({
52-
...context.repo,
53-
issue_number: prNumber,
54-
});
55-
for (const comment of comments) {
56-
if (comment.user.login === 'github-actions[bot]' && comment.body.includes(magicComment)) {
57-
core.info(`Minimizing comment: ${comment.html_url}`);
58-
await octokit.graphql(`
59-
mutation {
60-
minimizeComment(input: {subjectId: "${comment.node_id}", classifier: OUTDATED}) {
61-
clientMutationId
62-
}
52+
private async collapsePreviousComments(prNumber: number) {
53+
const { data: comments } = await octokit.rest.issues.listComments({
54+
...context.repo,
55+
issue_number: prNumber,
56+
});
57+
for (const comment of comments) {
58+
if (comment.user.login === 'github-actions[bot]' && comment.body.includes(magicComment)) {
59+
core.info(`Minimizing comment: ${comment.html_url}`);
60+
await octokit.graphql(`
61+
mutation {
62+
minimizeComment(input: {subjectId: "${comment.node_id}", classifier: OUTDATED}) {
63+
clientMutationId
6364
}
64-
`);
65-
}
65+
}
66+
`);
6667
}
6768
}
69+
}
70+
71+
private async addNewReportComment(prNumber: number, report: string) {
72+
const reportUrl = process.env.HTML_REPORT_URL;
73+
const mergeWorkflowUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
6874

6975
const { data: response } = await octokit.rest.issues.createComment({
7076
...context.repo,
7177
issue_number: prNumber,
7278
body: formatComment([
7379
magicComment,
74-
`### [Test results](${reportUrl}) for "${github.context.payload.workflow_run?.name}"`,
80+
`### [Test results](${reportUrl}) for "${context.payload.workflow_run?.name}"`,
7581
report,
7682
'',
7783
`Merge [workflow run](${mergeWorkflowUrl}).`
7884
]),
7985
});
8086
core.info(`Posted comment: ${response.html_url}`);
8187
}
88+
89+
private pullRequestFromMetadata() {
90+
const metadata = this.config.metadata as MetadataWithCommitInfo;
91+
const prHref = metadata.ci?.prHref;
92+
return { prNumber: parseInt(prHref?.split('/').pop(), 10), prHref };
93+
}
8294
}
8395

8496
function formatComment(lines) {

0 commit comments

Comments
 (0)