aeaf025844e642ddea7ea920528e2ca3c2cb4d56
[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(request, owner, repo, baseurl = 'https://api.github.com') {
13   if (!owner) {
14     return Promise.reject('missing owner for repo');
15   }
16   if (!repo) {
17     return Promise.reject('missing repo name');
18   }
19   return request({
20     url: `${baseurl}/repos/${owner}/${repo}/releases`,
21     json: true
22   }).then((resp) => {
23     const gHubResp = resp.body;
24     const all = {
25       releases: [],
26       // todo make this ':baseurl' + ':releasename'
27       download: ''
28     };
29
30     gHubResp.forEach((release) => {
31       release['assets'].forEach((asset) => {
32         const name = asset['name'];
33         all.releases.push({
34           name: name,
35           version: release['tag_name'], // TODO tags aren't always semver / sensical
36           lts: /\b(lts)\b/.test(release['tag_name']),
37           channel: !release['prerelease'] ? 'stable' : 'beta',
38           date: (release['published_at'] || '').replace(/T.*/, ''),
39           os: '', // will be guessed by download filename
40           arch: '', // will be guessed by download filename
41           ext: '', // will be normalized
42           download: asset['browser_download_url']
43         });
44       });
45     });
46
47     return all;
48   });
49 }
50
51 module.exports = getAllReleases;
52
53 if (module === require.main) {
54   getAllReleases(require('@root/request'), 'BurntSushi', 'ripgrep').then(
55     function (all) {
56       console.log(JSON.stringify(all, null, 2));
57     }
58   );
59 }