refactor: finish moving ssh-* scripts to own installers
[webi-installers/.git] / iterm2 / releases.js
1 'use strict';
2
3 function getRawReleases(request) {
4   return request({ url: 'https://iterm2.com/downloads.html' }).then(function (
5     resp
6   ) {
7     var links = resp.body
8       .split(/[<>]+/g)
9       .map(function (str) {
10         var m = str.match(/href="(https:\/\/iterm2\.com\/downloads\/.*\.zip)"/);
11         if (m && /iTerm2-[34]/.test(m[1])) {
12           return m[1];
13         }
14       })
15       .filter(Boolean);
16     return links;
17   });
18 }
19
20 function transformReleases(links) {
21   //console.log(JSON.stringify(links, null, 2));
22   //console.log(links.length);
23
24   return {
25     releases: links
26       .map(function (link) {
27         // strip 'go' prefix, standardize version
28         var channel = /\/stable\//.test(link) ? 'stable' : 'beta';
29         var parts = link
30           .replace(/.*\/iTerm2[-_]v?(\d_.*)\.zip/, '$1')
31           .split('_');
32         var version = parts.join('.').replace(/([_-])?beta/, '-beta');
33
34         return {
35           version: version,
36           // all go versions >= 1.0.0 are effectively LTS
37           lts: 'stable' === channel,
38           channel: channel,
39           date: '1970-01-01', // the world may never know
40           os: 'macos',
41           arch: 'amd64',
42           ext: '', // let normalize run the split/test/join
43           download: link
44         };
45       })
46       .filter(Boolean)
47   };
48 }
49
50 function getAllReleases(request) {
51   return getRawReleases(request)
52     .then(transformReleases)
53     .then(function (all) {
54       return all;
55     });
56 }
57
58 module.exports = getAllReleases;
59
60 if (module === require.main) {
61   getAllReleases(require('@root/request')).then(function (all) {
62     all = require('../_webi/normalize.js')(all);
63     all.releases = all.releases.slice(0, 10000);
64     console.info(JSON.stringify(all, null, 2));
65   });
66 }