Skip to content

Commit be56ab8

Browse files
committed
paginate getReleases, update readme
1 parent 29740a3 commit be56ab8

2 files changed

Lines changed: 56 additions & 6 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ Options:
2727
-t, --tag <tag> tag
2828
-n, --name <name> name
2929
-b, --body <body> body
30+
-d, --draft draft
31+
-p, --prerelease prerelease
3032
```
3133

3234
### Upload

src/index.js

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,62 @@ github.authenticate({
3636
});
3737

3838
const getReleaseByTag = (options) => {
39+
return new Promise(async (resolve, reject) => {
40+
try {
41+
let page = 1;
42+
let lastPage = 1;
43+
let foundRelease = false;
44+
45+
do {
46+
const releases = await getReleases({
47+
owner: options.owner,
48+
repo: options.repo,
49+
page: page,
50+
per_page: 30
51+
});
52+
53+
console.log(`Fetched ${releases.length} results at page ${page}.`);
54+
55+
const searchedReleases = releases.filter(r => r.tag_name === options.tag ||
56+
r.name === options.tag);
57+
if (searchedReleases.length) {
58+
resolve(releases[0]);
59+
foundRelease = true;
60+
break;
61+
}
62+
63+
const pagination = (releases.meta.link || '').split(',')
64+
.reduce((acc, link) => {
65+
const r = link.match(/\?page=(\d)+.*rel="(\w+)"/);
66+
if (r && r[1] && r[2]) {
67+
const key = r[2];
68+
const value = Number(r[1]) || 0;
69+
acc[key] = value;
70+
}
71+
return acc;
72+
}, {});
73+
74+
if (pagination.last > 0) {
75+
lastPage = pagination.last;
76+
}
77+
78+
++page;
79+
} while (page <= lastPage);
80+
81+
if (!foundRelease) {
82+
reject('Cannot find release');
83+
}
84+
} catch (err) {
85+
reject(err);
86+
return;
87+
}
88+
});
89+
};
90+
91+
const getReleases = (options) => {
3992
return new Promise((resolve, reject) => {
4093
github.repos.getReleases(options, (err, res) => {
41-
if (err) {
42-
reject(err);
43-
return;
44-
}
45-
const releases = res.filter(r => r.tag_name === options.tag || r.name === options.tag);
46-
releases.length ? resolve(releases[0]) : reject('Cannot find release');
94+
err ? reject(err) : resolve(res);
4795
});
4896
});
4997
};

0 commit comments

Comments
 (0)