Skip to content

Commit 276aa79

Browse files
committed
Still post report comment on failure if data available
1 parent fe8dd37 commit 276aa79

File tree

5 files changed

+231
-159
lines changed

5 files changed

+231
-159
lines changed

.github/workflows/ci.yml

Lines changed: 55 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,29 @@ jobs:
6161
npx playwright install --with-deps
6262
npx puppeteer browsers install chrome
6363
- name: Run tests
64+
id: tests
6465
run: npm run test:all
65-
- name: Generate coverage report info
66-
if: github.actor != 'dependabot[bot]'
67-
id: coverage-info
66+
- name: Generate coverage info
67+
if: >
68+
!cancelled() && github.actor != 'dependabot[bot]' && (
69+
steps.tests.conclusion == 'failure' ||
70+
steps.tests.outcome == 'success'
71+
)
72+
id: coverage
6873
run: |
74+
SOURCE='./coverage/lcov-report/'
75+
if [ ! -f "$SOURCE/index.html" ]; then
76+
echo "No coverage report found."
77+
exit 1
78+
fi
6979
COMMON_PATH="$GITHUB_REPOSITORY/$GITHUB_RUN_ID/$GITHUB_RUN_ATTEMPT/$GITHUB_JOB"
7080
DESTINATION="s3://test-reporting-coverage/$COMMON_PATH/"
71-
SOURCE='./coverage/lcov-report/'
7281
URL="https://test-reporting.d2l.dev/coverage/$COMMON_PATH/"
7382
echo "destination=$DESTINATION" >> $GITHUB_OUTPUT
7483
echo "source=$SOURCE" >> $GITHUB_OUTPUT
7584
echo "url=$URL" >> $GITHUB_OUTPUT
7685
- name: Assume role
77-
if: github.actor != 'dependabot[bot]'
86+
if: (!cancelled()) && steps.coverage.outputs.source != ''
7887
uses: Brightspace/third-party-actions@aws-actions/configure-aws-credentials
7988
with:
8089
aws-access-key-id: ${{secrets.AWS_ACCESS_KEY_ID}}
@@ -83,51 +92,64 @@ jobs:
8392
aws-region: us-east-1
8493
role-to-assume: arn:aws:iam::427469055187:role/github+Brightspace+test-reporting-node
8594
role-duration-seconds: 3600
86-
- name: Upload code coverage
87-
if: github.actor != 'dependabot[bot]'
95+
- name: Upload coverage
96+
if: (!cancelled()) && steps.coverage.outputs.source != ''
8897
uses: BrightspaceUI/actions/publish-to-s3@main
8998
with:
90-
bucket-path: ${{steps.coverage-info.outputs.destination}}
91-
publish-directory: ${{steps.coverage-info.outputs.source}}
99+
bucket-path: ${{steps.coverage.outputs.destination}}
100+
publish-directory: ${{steps.coverage.outputs.source}}
92101
- name: Generate test summary
93-
id: test-summary
102+
id: summary
103+
if: >
104+
!cancelled() && (
105+
steps.tests.conclusion == 'failure' ||
106+
steps.tests.outcome == 'success'
107+
)
94108
uses: Brightspace/third-party-actions@actions/github-script
95109
with:
96110
script: |
97111
const { env } = await import('node:process');
98-
const { COVERAGE_REPORT_URL: coverageReportUrl } = env;
112+
const {
113+
COVERAGE_REPORT_URL: coverageReportUrl,
114+
REPORT_VALIDATION_RESULTS: reportValidationResultsPath
115+
} = env;
99116
const { summary } = core;
100117
summary.clear();
118+
summary.addHeading('Coverage Report', 3);
101119
if (coverageReportUrl) {
102-
summary.addHeading('Coverage report', 3);
103120
summary.addLink('Report', coverageReportUrl);
121+
} else {
122+
summary.addRaw('No coverage report generated.', true);
123+
summary.addEOL();
104124
}
105-
summary.addHeading('Generated reports', 3);
106-
const reporters = [{
107-
name: 'mocha',
108-
path: './d2l-test-report-mocha.json'
109-
}, {
110-
name: 'playwright',
111-
path: './d2l-test-report-playwright.json'
112-
}, {
113-
name: '@web/test-runner',
114-
path: './d2l-test-report-web-test-runner.json'
115-
}, {
116-
name: 'webdriverio',
117-
path: './d2l-test-report-webdriverio.json'
118-
}];
119-
for (const { name, path } of reporters) {
120-
let report = require(path);
121-
report = JSON.stringify(report, null, 2);
122-
report = `\n\n\`\`\`json\n${report}\n\`\`\`\n\n`;
123-
summary.addDetails(name, report);
125+
summary.addHeading('Report Validation', 3);
126+
const validationResults = require(reportValidationResultsPath);
127+
for (const [framework, result] of Object.entries(validationResults)) {
128+
const { path, exists, schema, contents } = result;
129+
const failed = !exists || !schema || !contents;
130+
const headerIcon = failed ? ':red_circle:' : ':green_circle:';
131+
const header = `${framework} ${headerIcon}`;
132+
let body = '';
133+
if (exists) {
134+
const schemaIcon = schema ? ':green_circle:' : ':red_circle:';
135+
body += `\n\nSchema: ${schemaIcon}`;
136+
const contentsIcon = contents ? ':green_circle:' : ':red_circle:';
137+
body += `\nContents: ${contentsIcon}`;
138+
const reportContents = JSON.stringify(require(path), null, 2);
139+
body += `\n\n\`\`\`json\n${reportContents}\n\`\`\`\n\n`;
140+
} else {
141+
body += '\n\n```json\nNo report generated.\n```\n\n';
142+
}
143+
summary.addDetails(header, body);
124144
}
125145
summary.write({ overwrite: true });
126146
core.setOutput('report', summary.stringify());
127147
env:
128-
COVERAGE_REPORT_URL: ${{steps.coverage-info.outputs.url}}
148+
COVERAGE_REPORT_URL: ${{steps.coverage.outputs.url}}
149+
REPORT_VALIDATION_RESULTS: ./report-validation-results.json
129150
- name: Leave comment
151+
if: (!cancelled()) && steps.summary.outcome == 'success'
130152
uses: BrightspaceUI/actions/comment-on-pr@main
131153
with:
132-
message: ${{steps.test-summary.outputs.report}}
154+
message: ${{steps.summary.outputs.report}}
133155
post-mode: hide-previous

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ node_modules/
33
test-results/
44
/d2l-test-report*.json
55
!/d2l-test-reporting.config.json
6+
report-validation-results.json

0 commit comments

Comments
 (0)