Add the support for perf try bots to sync-buildbot.js
[WebKit-https.git] / Websites / perf.webkit.org / tools / sync-buildbot.js
1 #!/usr/local/bin/node
2 'use strict';
3
4 let BuildbotTriggerable = require('./js/buildbot-triggerable.js').BuildbotTriggerable;
5 let RemoteAPI = require('./js/remote.js').RemoteAPI;
6 let fs = require('fs');
7 let parseArguments = require('./js/parse-arguments.js').parseArguments;
8
9 function main(argv)
10 {
11     let options = parseArguments(argv, [
12         {name: '--server-config-json', required: true},
13         {name: '--buildbot-config-json', required: true},
14         {name: '--seconds-to-sleep', type: parseFloat, default: 120},
15     ]);
16     if (!options)
17         return;
18
19     syncLoop(options);
20 }
21
22 function syncLoop(options)
23 {
24     let serverConfig = JSON.parse(fs.readFileSync(options['--server-config-json'], 'utf8'));
25     let buildbotConfig = JSON.parse(fs.readFileSync(options['--buildbot-config-json'], 'utf8'));
26     let buildbotRemote = new RemoteAPI(buildbotConfig.server);
27
28     // v3 models use the global RemoteAPI to access the perf dashboard.
29     global.RemoteAPI = new RemoteAPI(serverConfig.server);
30
31     console.log(`Fetching the manifest...`);
32
33     const makeTriggerable = function () {
34         return new BuildbotTriggerable(buildbotConfig, global.RemoteAPI, buildbotRemote, serverConfig.slave, console)
35     }
36
37     Manifest.fetch().then(() => {
38         return makeTriggerable().updateTriggerable();
39     }).then(() => {
40         return Manifest.fetch();
41     }).then(() => {
42         return triggerable.syncOnce();
43     }).catch((error) => {
44         console.error(error);
45         if (typeof(error.stack) == 'string') {
46             for (let line of error.stack.split('\n'))
47                 console.error(line);
48         }
49     }).then(() => {
50         setTimeout(syncLoop.bind(global, options), options['--seconds-to-sleep'] * 1000);
51     });
52 }
53
54 main(process.argv);