3 require('dotenv').config();
6 * Gets the releases for 'ripgrep'. This function could be trimmed down and made
7 * for use with any github release.
10 * @param {string} owner
11 * @param {string} repo
12 * @returns {PromiseLike<any> | Promise<any>}
14 function getAllReleases(
18 baseurl = 'https://api.github.com'
21 return Promise.reject('missing owner for repo');
24 return Promise.reject('missing repo name');
28 url: `${baseurl}/repos/${owner}/${repo}/releases`,
31 // TODO I really don't like global config, find a way to do better
32 if (process.env.GITHUB_USERNAME) {
34 user: process.env.GITHUB_USERNAME,
35 pass: process.env.GITHUB_TOKEN
39 return request(req).then((resp) => {
40 const gHubResp = resp.body;
43 // todo make this ':baseurl' + ':releasename'
47 gHubResp.forEach((release) => {
48 release['assets'].forEach((asset) => {
49 const name = asset['name'];
52 version: release['tag_name'], // TODO tags aren't always semver / sensical
53 lts: /(\b|_)(lts)(\b|_)/.test(release['tag_name']),
54 channel: !release['prerelease'] ? 'stable' : 'beta',
55 date: (release['published_at'] || '').replace(/T.*/, ''),
56 os: '', // will be guessed by download filename
57 arch: '', // will be guessed by download filename
58 ext: '', // will be normalized
59 download: asset['browser_download_url']
68 module.exports = getAllReleases;
70 if (module === require.main) {
71 getAllReleases(require('@root/request'), 'BurntSushi', 'ripgrep').then(
73 console.info(JSON.stringify(all, null, 2));