Add a new flakiness dashboard clone
[WebKit-https.git] / Websites / test-results / js / build.js
1 // FIXME: De-duplicate this code with perf.webkit.org
2 function TestBuild(repositories, builders, rawRun) {
3     const revisions = rawRun.revisions;
4     var maxTime = 0;
5     var revisionCount = 0;
6     for (var repositoryName in revisions) {
7         maxTime = Math.max(maxTime, revisions[repositoryName][1]); // Revision is an pair (revision, time)
8         revisionCount++;
9     }
10     var maxTimeString = new Date(maxTime).toISOString().replace('T', ' ').replace(/\.\d+Z$/, '');
11     var buildTime = rawRun.buildTime;
12     var buildTimeString = new Date(buildTime).toISOString().replace('T', ' ').replace(/\.\d+Z$/, '');
13
14     this.time = function () { return maxTime; }
15     this.formattedTime = function () { return maxTimeString; }
16     this.buildTime = function () { return buildTime; }
17     this.formattedBuildTime = function () { return buildTimeString; }
18     this.builder = function () { return builders[rawRun.builder].name; }
19     this.buildNumber = function () { return rawRun.buildNumber; }
20     this.buildUrl = function () {
21         var template = builders[rawRun.builder].buildUrl;
22         return template ? template.replace(/\$buildNumber/g, this.buildNumber()) : null;
23     }
24     this.revision = function(repositoryId) { return revisions[repositoryId][0]; }
25     this.formattedRevisions = function (previousBuild) {
26         var result = {};
27         for (var repositoryId in revisions) {
28             var repository = repositories[repositoryId];
29             var repositoryName = repository ? repository.name : 'Unknown repository ' + repositoryId;
30             var previousRevision = previousBuild ? previousBuild.revision(repositoryId) : undefined;
31             var currentRevision = this.revision(repositoryId);
32             if (previousRevision === currentRevision)
33                 previousRevision = undefined;
34
35             var revisionPrefix = '';
36             if (currentRevision.length < 10) { // SVN-like revision.
37                 revisionPrefix = 'r';
38                 if (previousRevision)
39                     previousRevision = (parseInt(previousRevision) + 1);
40             }
41
42             var labelForThisRepository = revisionCount ? repositoryName : '';
43             if (previousRevision) {
44                 if (labelForThisRepository)
45                     labelForThisRepository += ' ';
46                 labelForThisRepository += revisionPrefix + previousRevision + '-' + revisionPrefix + currentRevision;
47             } else
48                 labelForThisRepository += ' @ ' + revisionPrefix + currentRevision;
49
50             var url;
51             if (repository) {
52                 if (previousRevision)
53                     url = (repository['blameUrl'] || '').replace(/\$1/g, previousRevision).replace(/\$2/g, currentRevision);
54                 else
55                     url = (repository['url'] || '').replace(/\$1/g, currentRevision);
56             }
57
58             result[repositoryName] = {
59                 'label': labelForThisRepository,
60                 'currentRevision': currentRevision,
61                 'previousRevision': previousRevision,
62                 'url': url,
63             };
64         }
65         return result;
66     }
67 }