-
Notifications
You must be signed in to change notification settings - Fork 4
/
update-reports-list.js
112 lines (96 loc) · 3.34 KB
/
update-reports-list.js
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
/**
* This script will update the json file containing the list of reports: data/reports.json
* It will take the data of a recently generated report that exists on the disk, and push this data in the existing json file
* It will read data from $reportID/report/widgets/summary.json, $reportID/metadata.json
*/
const { acquireLockWithRetry, readS3Object, readJson, releaseLock } = require( './utils' );
const path = require( 'path' );
const { PutObjectCommand } = require( '@aws-sdk/client-s3' );
const { s3Params, s3client } = require( './s3-client' );
const localReportPath = process.env.REPORT_PATH;
const fileKey = 'data/reports.json';
if ( ! localReportPath ) {
throw 'REPORT_PATH env variable is not set';
}
( async () => {
// Get the existing reports list
await acquireLockWithRetry( fileKey, true );
const reportsData = ( await readS3Object( fileKey ) ).toString() || '{}';
const json = JSON.parse( reportsData );
const updatedJson = await updateReportData( localReportPath, json );
// Write the updated reports list locally
// writeJson( updatedJson, path.join( "", 'reports.json' ) );
// Upload the report to S3
const cmd = new PutObjectCommand( {
Bucket: s3Params.Bucket,
Key: fileKey,
Body: JSON.stringify( updatedJson ),
ContentType: 'application/json',
} );
await s3client.send( cmd );
await releaseLock( fileKey );
} )();
async function updateReportData( reportPath, json ) {
// Get the metadata
const metadata = readJson( path.join( reportPath, 'metadata.json' ) );
const { report_id, event_name, group } = metadata;
if ( ! report_id ) {
throw 'Cannot find report_id in metadata.json';
}
// Get the event node or create it if it doesn't exist
if ( ! json[ event_name ] ) {
json[ event_name ] = {};
}
// Get the group node or create it if it doesn't exist
if ( ! json[ event_name ][ group ] ) {
json[ event_name ][ group ] = {
reports: [],
};
}
json[ event_name ][ group ] = {
...json[ event_name ][ group ],
lastUpdate: new Date().toISOString(),
pr_number: metadata.pr_number,
report_title: metadata.report_title,
ref_name: metadata.ref_name,
sha: metadata.sha,
};
// Get the report statistics from report/widgets/summary.json
const statistic = readJson( path.join( reportPath, 'widgets/summary.json' ) ).statistic;
const { total, passed, failed, skipped, broken, unknown } = statistic;
const results = {
passed,
failed: failed + broken + unknown,
skipped,
total,
};
// Create the report entry
const isFailed = statistic.total !== statistic.passed + statistic.skipped;
const report = {
history: isFailed ? 'F' : 'P',
report_id: metadata.report_id,
suite: metadata.suite,
run_id: metadata.run_id,
run_attempt: metadata.run_attempt,
sha: metadata.sha,
path: metadata.path,
updated_on: metadata.updated_on,
results,
};
const reports = json[ event_name ][ group ].reports;
console.log( report );
const reportIndex = reports.findIndex( r => r.report_id === report_id );
if ( reportIndex !== -1 ) {
// Update the report entry in the reports list
if ( reports[ reportIndex ].history ) {
report.history = reports[ reportIndex ].history + report.history;
report.history = report.history.substring( report.history.length - 200 );
}
reports[ reportIndex ] = report;
} else {
// push new report
reports.push( report );
}
json.lastUpdate = new Date().toISOString();
return json;
}