Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Nightly Race / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
97 lines
3.9 KiB
JavaScript
Executable File
97 lines
3.9 KiB
JavaScript
Executable File
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
const fs = require('fs');
|
|
|
|
const dayjs = require('dayjs');
|
|
const duration = require('dayjs/plugin/duration');
|
|
dayjs.extend(duration);
|
|
|
|
const {TYPE, SERVER_TYPE, BRANCH, PULL_REQUEST, BUILD_ID, MM_ENV, MM_DOCKER_IMAGE, MM_DOCKER_TAG, RELEASE_DATE} =
|
|
process.env;
|
|
|
|
const resultsFile = 'results/reporter/results.json';
|
|
const summaryFile = 'results/summary.json';
|
|
const results = JSON.parse(fs.readFileSync(resultsFile, 'utf8'));
|
|
const summary = JSON.parse(fs.readFileSync(summaryFile, 'utf8'));
|
|
const passRate = (summary.passed * 100) / (summary.passed + summary.failed);
|
|
const totalSpecs = summary.passed + summary.failed;
|
|
const playwrightVersion = results.config.version;
|
|
const playwrightDuration = dayjs.duration(results.stats.duration, 'millisecond').format('HH:mm:ss');
|
|
|
|
function generateTitle() {
|
|
let dockerImageLink = '';
|
|
let releaseDate = '';
|
|
if (MM_DOCKER_IMAGE && MM_DOCKER_TAG) {
|
|
dockerImageLink = ` with [${MM_DOCKER_IMAGE}:${MM_DOCKER_TAG}](https://hub.docker.com/r/mattermostdevelopment/${MM_DOCKER_IMAGE}/tags?name=${MM_DOCKER_TAG})`;
|
|
}
|
|
if (RELEASE_DATE) {
|
|
releaseDate = ` for ${RELEASE_DATE}`;
|
|
}
|
|
|
|
let title = '';
|
|
switch (TYPE) {
|
|
case 'PR':
|
|
title = `E2E for Pull Request Build: [${BRANCH}](${PULL_REQUEST})${dockerImageLink}`;
|
|
break;
|
|
case 'RELEASE':
|
|
title = `E2E for Release Build${dockerImageLink}${releaseDate}`;
|
|
break;
|
|
case 'MASTER':
|
|
title = `E2E for Master Nightly Build (Prod tests)${dockerImageLink}`;
|
|
break;
|
|
case 'MASTER_UNSTABLE':
|
|
title = `E2E for Master Nightly Build (Unstable tests)${dockerImageLink}`;
|
|
break;
|
|
case 'CLOUD':
|
|
title = `E2E for Cloud Build (Prod tests)${dockerImageLink}${releaseDate}`;
|
|
break;
|
|
case 'CLOUD_UNSTABLE':
|
|
title = `E2E for Cloud Build (Unstable tests)${dockerImageLink}`;
|
|
break;
|
|
default:
|
|
title = `E2E for Build${dockerImageLink}`;
|
|
}
|
|
return title;
|
|
}
|
|
|
|
function generateWebhookBody() {
|
|
let testResult;
|
|
const testResults = [
|
|
{status: 'Passed', priority: 'none', cutOff: 100, color: '#43A047'},
|
|
{status: 'Failed', priority: 'low', cutOff: 98, color: '#FFEB3B'},
|
|
{status: 'Failed', priority: 'medium', cutOff: 95, color: '#FF9800'},
|
|
{status: 'Failed', priority: 'high', cutOff: 0, color: '#F44336'},
|
|
];
|
|
for (let i = 0; i < testResults.length; i++) {
|
|
if (passRate >= testResults[i].cutOff) {
|
|
testResult = testResults[i];
|
|
break;
|
|
}
|
|
}
|
|
|
|
const summaryField = `${passRate.toFixed(2)}% (${summary.passed}/${totalSpecs}) | ${playwrightDuration} | playwright@${playwrightVersion}`;
|
|
const serverTypeField = SERVER_TYPE ? '\nTest server: ' + SERVER_TYPE : '';
|
|
const mmEnvField = MM_ENV ? '\nTest server override: ' + MM_ENV : '';
|
|
const rollingReleaseMatchRegex = BUILD_ID?.match(/-rolling(?<version>[^-]+)-/);
|
|
const rollingReleaseFrom = rollingReleaseMatchRegex?.groups?.version;
|
|
const rollingReleaseFromField = rollingReleaseFrom ? `\nRolling release upgrade from: ${rollingReleaseFrom}` : '';
|
|
return {
|
|
username: 'Playwright UI Test',
|
|
icon_url: 'https://mattermost.com/wp-content/uploads/2022/02/icon_WS.png',
|
|
attachments: [
|
|
{
|
|
color: testResult.color,
|
|
author_name: 'Webapp End-to-end Testing (Playwright)',
|
|
author_icon: 'https://mattermost.com/wp-content/uploads/2022/02/icon_WS.png',
|
|
author_link: 'https://www.mattermost.com',
|
|
title: generateTitle(),
|
|
text: `${summaryField}${serverTypeField}${rollingReleaseFromField}${mmEnvField}`,
|
|
},
|
|
],
|
|
};
|
|
}
|
|
|
|
const webhookBody = generateWebhookBody();
|
|
process.stdout.write(JSON.stringify(webhookBody));
|