From 3770cab4b1767cf0a5330d7000532c8cf79877d4 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Fri, 18 May 2018 23:55:23 -0400 Subject: [PATCH 1/4] Add support for draft and prerelease --- src/index.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/index.js b/src/index.js index c265684..cad5398 100755 --- a/src/index.js +++ b/src/index.js @@ -14,7 +14,9 @@ program .option('-r, --repo ', 'repo') .option('-t, --tag ', 'tag') .option('-n, --name ', 'name') - .option('-b, --body ', 'body', false); + .option('-b, --body ', 'body', false) + .option('-d, --draft', 'draft') + .option('-p, --prerelease', 'prerelease'); program.parse(process.argv); @@ -83,7 +85,7 @@ const uploadAsset = (options) => { const fn = { 'upload': async () => { - const { owner, repo, tag, name, body } = program; + const { owner, repo, tag, name, body, draft, prerelease } = program; const files = args; let release; @@ -106,7 +108,9 @@ const fn = { repo: repo, tag_name: tag, name: name || tag, - body: body || '' + body: body || '', + draft: draft || false, + prerelease: prerelease || false }); } else if (body && (release.body !== body)) { console.log('> releases#editRelease'); @@ -116,7 +120,9 @@ const fn = { id: release.id, tag_name: tag, name: name || tag, - body: body || '' + body: body || '', + draft: draft == null ? release.draft : draft, + prerelease: prerelease == null ? release.prerelease : prerelease }; release = await editRelease(releaseOptions); } @@ -140,7 +146,7 @@ const fn = { } }, 'delete': async () => { - const { owner, repo, tag, name, body } = program; + const { owner, repo, tag, name, body, draft, prerelease } = program; const patterns = args; let release; From 29740a3260b9b280bc17c36a68d3933c60dc4870 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Sat, 19 May 2018 00:13:57 -0400 Subject: [PATCH 2/4] getReleaseByTag to support draft releases --- src/index.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index cad5398..5c0b0fe 100755 --- a/src/index.js +++ b/src/index.js @@ -37,8 +37,13 @@ github.authenticate({ const getReleaseByTag = (options) => { return new Promise((resolve, reject) => { - github.repos.getReleaseByTag(options, (err, res) => { - err ? reject(err) : resolve(res); + github.repos.getReleases(options, (err, res) => { + if (err) { + reject(err); + return; + } + const releases = res.filter(r => r.tag_name === options.tag || r.name === options.tag); + releases.length ? resolve(releases[0]) : reject('Cannot find release'); }); }); }; From be56ab8c514641b1f913c250f42149407aa01b4b Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Sat, 19 May 2018 08:43:09 -0400 Subject: [PATCH 3/4] paginate getReleases, update readme --- README.md | 2 ++ src/index.js | 60 ++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 56 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 28f5bee..45e1847 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,8 @@ Options: -t, --tag tag -n, --name name -b, --body body + -d, --draft draft + -p, --prerelease prerelease ``` ### Upload diff --git a/src/index.js b/src/index.js index 5c0b0fe..7a02c88 100755 --- a/src/index.js +++ b/src/index.js @@ -36,14 +36,62 @@ github.authenticate({ }); const getReleaseByTag = (options) => { + return new Promise(async (resolve, reject) => { + try { + let page = 1; + let lastPage = 1; + let foundRelease = false; + + do { + const releases = await getReleases({ + owner: options.owner, + repo: options.repo, + page: page, + per_page: 30 + }); + + console.log(`Fetched ${releases.length} results at page ${page}.`); + + const searchedReleases = releases.filter(r => r.tag_name === options.tag || + r.name === options.tag); + if (searchedReleases.length) { + resolve(releases[0]); + foundRelease = true; + break; + } + + const pagination = (releases.meta.link || '').split(',') + .reduce((acc, link) => { + const r = link.match(/\?page=(\d)+.*rel="(\w+)"/); + if (r && r[1] && r[2]) { + const key = r[2]; + const value = Number(r[1]) || 0; + acc[key] = value; + } + return acc; + }, {}); + + if (pagination.last > 0) { + lastPage = pagination.last; + } + + ++page; + } while (page <= lastPage); + + if (!foundRelease) { + reject('Cannot find release'); + } + } catch (err) { + reject(err); + return; + } + }); +}; + +const getReleases = (options) => { return new Promise((resolve, reject) => { github.repos.getReleases(options, (err, res) => { - if (err) { - reject(err); - return; - } - const releases = res.filter(r => r.tag_name === options.tag || r.name === options.tag); - releases.length ? resolve(releases[0]) : reject('Cannot find release'); + err ? reject(err) : resolve(res); }); }); }; From 1b4db9597c2ede463ea70f26d40eb14d1d4fdfc6 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Sat, 19 May 2018 08:45:01 -0400 Subject: [PATCH 4/4] remove unnecessary return --- src/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/index.js b/src/index.js index 7a02c88..f3f8999 100755 --- a/src/index.js +++ b/src/index.js @@ -83,7 +83,6 @@ const getReleaseByTag = (options) => { } } catch (err) { reject(err); - return; } }); };