File: create_test_report.yml

package info (click to toggle)
node-playwright 1.38.0%2Bds-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 32,720 kB
  • sloc: javascript: 114,018; sh: 899; java: 372; xml: 247; cs: 118; python: 29; makefile: 13
file content (135 lines) | stat: -rw-r--r-- 5,339 bytes parent folder | download | duplicates (2)
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
135
name: Publish Test Results
on:
  workflow_run:
    workflows: ["tests 1", "tests 2"]
    types:
      - completed
jobs:
  merge-reports:
    permissions:
      pull-requests: write
      checks: write
    if: ${{ github.event.workflow_run.event == 'pull_request' }}
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-node@v3
      with:
        node-version: 16

    - run: npm ci
      env:
        DEBUG: pw:install
        PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
    - run: npm run build

    - name: Download blob report artifact
      uses: ./.github/actions/download-artifact
      with:
        name: all-blob-reports
        path: all-blob-reports

    - name: Merge reports
      run: |
        npx playwright merge-reports --reporter markdown,html ./all-blob-reports
      env:
        NODE_OPTIONS: --max-old-space-size=4096

    - name: Upload HTML report to Azure
      run: |
        REPORT_DIR='run-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }}-${{ github.sha }}'
        azcopy cp --recursive "./playwright-report/*" "https://mspwblobreport.blob.core.windows.net/\$web/$REPORT_DIR"
        echo "Report url: https://mspwblobreport.z1.web.core.windows.net/$REPORT_DIR/index.html"
      env:
        AZCOPY_AUTO_LOGIN_TYPE: SPN
        AZCOPY_SPA_APPLICATION_ID: '${{ secrets.AZCOPY_SPA_APPLICATION_ID }}'
        AZCOPY_SPA_CLIENT_SECRET: '${{ secrets.AZCOPY_SPA_CLIENT_SECRET }}'
        AZCOPY_TENANT_ID: '${{ secrets.AZCOPY_TENANT_ID }}'

    - name: Read pull request number
      uses: ./.github/actions/download-artifact
      with:
        name: 'pull-request'
        path: './'

    - name: Comment on PR
      uses: actions/github-script@v6
      with:
        github-token: ${{ secrets.GITHUB_TOKEN }}
        script: |
          const fs = require('fs');
          let prNumber;
          if (context.payload.workflow_run.event === 'pull_request') {
            const prs = context.payload.workflow_run.pull_requests;
            if (prs.length) {
              prNumber = prs[0].number;
            } else {
              prNumber = parseInt(fs.readFileSync('pull_request_number.txt').toString());
              console.log('Read pull request number from file: ' + prNumber);
            }
          } else {
            core.error('Unsupported workflow trigger event: ' + context.payload.workflow_run.event);
            return;
          }
          if (!prNumber) {
            core.error('No pull request found for commit ' + context.sha + ' and workflow triggered by: ' + context.payload.workflow_run.event);
            return;
          }
          {
            // Mark previous comments as outdated by minimizing them.
            const { data: comments } = await github.rest.issues.listComments({
              ...context.repo,
              issue_number: prNumber,
            });
            for (const comment of comments) {
              if (comment.user.login === 'github-actions[bot]' && /\[Test results\]\(https:\/\/.+?\) for "${{ github.event.workflow_run.name }}"/.test(comment.body)) {
                await github.graphql(`
                  mutation {
                    minimizeComment(input: {subjectId: "${comment.node_id}", classifier: OUTDATED}) {
                      clientMutationId
                    }
                  }
                `);
              }
            }
          }
          const reportDir = 'run-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }}-${{ github.sha }}';
          const reportUrl = `https://mspwblobreport.z1.web.core.windows.net/${reportDir}/index.html#?q=s%3Afailed%20s%3Aflaky`;
          core.notice('Report url: ' + reportUrl);
          const mergeWorkflowUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
          const reportMd = await fs.promises.readFile('report.md', 'utf8');
          function formatComment(lines) {
            let body = lines.join('\n');
            if (body.length > 65535)
              body = body.substring(0, 65000) + `... ${body.length - 65000} more characters`;
            return body;
          }
          const { data: response } = await github.rest.issues.createComment({
            ...context.repo,
            issue_number: prNumber,
            body: formatComment([
              `### [Test results](${reportUrl}) for "${{ github.event.workflow_run.name }}"`,
              reportMd,
              '',
              `Merge [workflow run](${mergeWorkflowUrl}).`
            ]),
          });
          core.info('Posted comment: ' + response.html_url);

          const check = await github.rest.checks.create({
            ...context.repo,
            name: 'Merge report (${{ github.event.workflow_run.name }})',
            head_sha: '${{ github.event.workflow_run.head_sha }}',
            status: 'completed',
            conclusion: 'success',
            details_url: reportUrl,
            output: {
              title: 'Test results for "${{ github.event.workflow_run.name }}"',
              summary: [
                reportMd,
                '',
                '---',
                `Full [HTML report](${reportUrl}). Merge [workflow run](${mergeWorkflowUrl}).`
              ].join('\n'),
            }
          });