add iterm2
[webi-installers/.git] / iterm2 / releases.js
diff --git a/iterm2/releases.js b/iterm2/releases.js
new file mode 100644 (file)
index 0000000..40d8381
--- /dev/null
@@ -0,0 +1,66 @@
+'use strict';
+
+function getRawReleases(request) {
+  return request({ url: 'https://iterm2.com/downloads.html' }).then(function (
+    resp
+  ) {
+    var links = resp.body
+      .split(/[<>]+/g)
+      .map(function (str) {
+        var m = str.match(/href="(https:\/\/iterm2\.com\/downloads\/.*\.zip)"/);
+        if (m && /iTerm2-[34]/.test(m[1])) {
+          return m[1];
+        }
+      })
+      .filter(Boolean);
+    return links;
+  });
+}
+
+function transformReleases(links) {
+  //console.log(JSON.stringify(links, null, 2));
+  //console.log(links.length);
+
+  return {
+    releases: links
+      .map(function (link) {
+        // strip 'go' prefix, standardize version
+        var channel = /\/stable\//.test(link) ? 'stable' : 'beta';
+        var parts = link
+          .replace(/.*\/iTerm2[-_]v?(\d_.*)\.zip/, '$1')
+          .split('_');
+        var version = parts.join('.').replace(/([_-])?beta/, '-beta');
+
+        return {
+          version: version,
+          // all go versions >= 1.0.0 are effectively LTS
+          lts: 'stable' === channel,
+          channel: channel,
+          date: '1970-01-01', // the world may never know
+          os: 'macos',
+          arch: 'amd64',
+          ext: '', // let normalize run the split/test/join
+          download: link
+        };
+      })
+      .filter(Boolean)
+  };
+}
+
+function getAllReleases(request) {
+  return getRawReleases(request)
+    .then(transformReleases)
+    .then(function (all) {
+      return all;
+    });
+}
+
+module.exports = getAllReleases;
+
+if (module === require.main) {
+  getAllReleases(require('@root/request')).then(function (all) {
+    all = require('../_webi/normalize.js')(all);
+    all.releases = all.releases.slice(0, 10000);
+    console.info(JSON.stringify(all, null, 2));
+  });
+}