burn the logs and use 'install.bash'
[webi-installers/.git] / _common / github.js
1 'use strict';
2
3 /**
4  * Gets the releases for 'ripgrep'. This function could be trimmed down and made
5  * for use with any github release.
6  *
7  * @param request
8  * @param {string} owner
9  * @param {string} repo
10  * @returns {PromiseLike<any> | Promise<any>}
11  */
12 function getAllReleases(
13   request,
14   owner,
15   repo,
16   baseurl = 'https://api.github.com'
17 ) {
18   if (!owner) {
19     return Promise.reject('missing owner for repo');
20   }
21   if (!repo) {
22     return Promise.reject('missing repo name');
23   }
24   return request({
25     url: `${baseurl}/repos/${owner}/${repo}/releases`,
26     json: true
27   }).then((resp) => {
28     const gHubResp = resp.body;
29     const all = {
30       releases: [],
31       // todo make this ':baseurl' + ':releasename'
32       download: ''
33     };
34
35     gHubResp.forEach((release) => {
36       release['assets'].forEach((asset) => {
37         const name = asset['name'];
38         all.releases.push({
39           name: name,
40           version: release['tag_name'], // TODO tags aren't always semver / sensical
41           lts: /(\b|_)(lts)(\b|_)/.test(release['tag_name']),
42           channel: !release['prerelease'] ? 'stable' : 'beta',
43           date: (release['published_at'] || '').replace(/T.*/, ''),
44           os: '', // will be guessed by download filename
45           arch: '', // will be guessed by download filename
46           ext: '', // will be normalized
47           download: asset['browser_download_url']
48         });
49       });
50     });
51
52     return all;
53   });
54 }
55
56 module.exports = getAllReleases;
57
58 if (module === require.main) {
59   getAllReleases(require('@root/request'), 'BurntSushi', 'ripgrep').then(
60     function (all) {
61       console.info(JSON.stringify(all, null, 2));
62     }
63   );
64 }