Skip to content

Commit bd9c865

Browse files
committed
Merge branch 'master' of github.com:cheton/github-release-cli
2 parents 6b11679 + b9f560a commit bd9c865

2 files changed

Lines changed: 66 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: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ program
1414
.option('-r, --repo <repo>', 'repo')
1515
.option('-t, --tag <tag>', 'tag')
1616
.option('-n, --name <name>', 'name')
17-
.option('-b, --body <body>', 'body', false);
17+
.option('-b, --body <body>', 'body', false)
18+
.option('-d, --draft', 'draft')
19+
.option('-p, --prerelease', 'prerelease');
1820

1921
program.parse(process.argv);
2022

@@ -34,8 +36,60 @@ github.authenticate({
3436
});
3537

3638
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+
}
87+
});
88+
};
89+
90+
const getReleases = (options) => {
3791
return new Promise((resolve, reject) => {
38-
github.repos.getReleaseByTag(options, (err, res) => {
92+
github.repos.getReleases(options, (err, res) => {
3993
err ? reject(err) : resolve(res);
4094
});
4195
});
@@ -83,7 +137,7 @@ const uploadAsset = (options) => {
83137

84138
const fn = {
85139
'upload': async () => {
86-
const { owner, repo, tag, name, body } = program;
140+
const { owner, repo, tag, name, body, draft, prerelease } = program;
87141
const files = args;
88142
let release;
89143

@@ -106,7 +160,9 @@ const fn = {
106160
repo: repo,
107161
tag_name: tag,
108162
name: name || tag,
109-
body: body || ''
163+
body: body || '',
164+
draft: draft || false,
165+
prerelease: prerelease || false
110166
});
111167
} else if (body && (release.body !== body)) {
112168
console.log('> releases#editRelease');
@@ -116,7 +172,9 @@ const fn = {
116172
id: release.id,
117173
tag_name: tag,
118174
name: name || tag,
119-
body: body || ''
175+
body: body || '',
176+
draft: draft == null ? release.draft : draft,
177+
prerelease: prerelease == null ? release.prerelease : prerelease
120178
};
121179
release = await editRelease(releaseOptions);
122180
}
@@ -140,7 +198,7 @@ const fn = {
140198
}
141199
},
142200
'delete': async () => {
143-
const { owner, repo, tag, name, body } = program;
201+
const { owner, repo, tag, name, body, draft, prerelease } = program;
144202
const patterns = args;
145203
let release;
146204

0 commit comments

Comments
 (0)