Skip to content

Commit 830de79

Browse files
committed
A few more small changes and bug fixes
1 parent 96455bf commit 830de79

1 file changed

Lines changed: 68 additions & 54 deletions

File tree

src/index.js

Lines changed: 68 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
/* eslint no-console: 0 */
22
/* eslint max-len: 0 */
3-
import path from 'path';
43
import fs from 'fs';
5-
4+
import path from 'path';
5+
import Octokit from '@octokit/rest';
66
import program from 'commander';
7-
import minimatch from 'minimatch';
8-
import pkg from '../package.json';
97
import * as LinkHeader from 'http-link-header';
10-
const URL = require('url-parse');
118
import * as mime from 'mime-types';
9+
import minimatch from 'minimatch';
10+
import parse from 'url-parse';
11+
import pkg from '../package.json';
1212

13-
import Octokit from '@octokit/rest';
1413
const octokit = new Octokit();
1514

1615
program
@@ -22,7 +21,6 @@ program
2221
.option('-t, --tag <tag>', 'tag')
2322
.option('-n, --name <name>', 'name')
2423
.option('-b, --body <body>', 'body', false)
25-
.option('-a, --anonymous', 'Use github API without token mainly for testing', false)
2624
.option('-d, --draft [value]', 'draft', function(val) {
2725
if (String(val).toLowerCase() === 'false') {
2826
return false;
@@ -40,21 +38,30 @@ program.parse(process.argv);
4038

4139
const [command, ...args] = program.args;
4240

43-
if (!program.anonymous) {
41+
if (!command !== 'list') {
4442
octokit.authenticate({
4543
type: 'oauth',
4644
token: program.token || process.env.GITHUB_TOKEN
4745
});
4846
}
4947

5048
function next(response) {
51-
if (!response.headers || !response.headers.link) return false;
52-
53-
let link = LinkHeader.parse(response.headers.link).rel('next');
54-
if (!link) return false;
55-
link = URL(link[0].uri, null, true).query
56-
if (!link) return false;
57-
return parseInt(link.page);
49+
if (!response.headers || !response.headers.link) {
50+
return false;
51+
}
52+
53+
let link = LinkHeader.parse(response.headers.link).rel('next');
54+
if (!link) {
55+
return false;
56+
}
57+
58+
const url = parse(link[0].uri, null, true);
59+
if (!url.query) {
60+
return false;
61+
}
62+
63+
const nextPage = parseInt(url.query.page);
64+
return nextPage;
5865
}
5966

6067
const fn = {
@@ -64,31 +71,33 @@ const fn = {
6471
let release;
6572

6673
try {
67-
console.log('> releases#getReleaseByTag');
68-
release = await octokit.repos.getReleaseByTag({
74+
console.log(`> getReleaseByTag: owner=${owner}, repo=${repo}, tag=${tag}`);
75+
const res = await octokit.repos.getReleaseByTag({
6976
owner: owner,
7077
repo: repo,
71-
tag: tag
78+
tag: tag,
7279
});
80+
release = res.data;
7381
} catch (err) {
7482
// Ignore
7583
}
7684

7785
try {
7886
if (!release) {
79-
console.log('> releases#createRelease');
80-
result = await octokit.repos.createRelease({
87+
console.log(`> createRelease: tag_name=${tag}, name=${name || tag}, draft=${!!draft}, prerelease=${!!prerelease}`);
88+
const res = await octokit.repos.createRelease({
8189
owner,
8290
repo,
8391
tag_name: tag,
8492
name: name || tag,
8593
body: body || '',
8694
draft: !!draft,
87-
prerelease: !!prerelease
88-
})
95+
prerelease: !!prerelease,
96+
});
97+
release = res.data;
8998
} else {
90-
console.log('> releases#updateRelease');
91-
release = await octokit.repos.updateRelease({
99+
console.log(`> updateRelease: release_id=${release.id}, tag_name=${tag}, name=${name || tag}`);
100+
const res = await octokit.repos.updateRelease({
92101
owner,
93102
repo,
94103
release_id: release.id,
@@ -97,23 +106,23 @@ const fn = {
97106
body: (body === undefined) ? release.body || '' : body || '',
98107
draft: (draft === undefined) ? !!release.draft : false,
99108
prerelease: (prerelease === undefined) ? !!release.prerelease : false,
100-
})
109+
});
110+
release = res.data;
101111
}
102112

103113
if (files.length > 0) {
104-
console.log('> releases#uploadReleaseAsset');
114+
console.log(`> uploadReleaseAsset: assets_url=${release.assets_url}`);
105115
for (let i = 0; i < files.length; ++i) {
106116
const file = files[i];
107-
console.log('#%d name="%s" filePath="%s"', i + 1, path.basename(file), file);
108-
117+
console.log(` #${i + 1}: name="${path.basename(file)}" filePath="${file}"`);
109118
await octokit.repos.uploadReleaseAsset({
110-
url: release.data.upload_url,
119+
url: release.upload_url,
111120
file: fs.createReadStream(file),
112121
headers: {
113-
'content-type': mime.lookup('file') || 'application/octet-stream',
114-
'content-length': fs.statSync(file).size,
122+
'Content-Type': mime.lookup(file) || 'application/octet-stream',
123+
'Content-Length': fs.statSync(file).size,
115124
},
116-
name: path.basename(asset),
125+
name: path.basename(file),
117126
});
118127
}
119128
}
@@ -127,72 +136,77 @@ const fn = {
127136
let release;
128137

129138
try {
130-
console.log('> releases#getReleaseByTag');
131-
release = await octokit.repos.getReleaseByTag({
139+
console.log(`> getReleaseByTag: owner=${owner}, repo=${repo}, tag=${tag}`);
140+
const res = await octokit.repos.getReleaseByTag({
132141
owner: owner,
133142
repo: repo,
134-
tag: tag
143+
tag: tag,
135144
});
145+
release = res.data;
136146
} catch (err) {
137147
console.error(err);
138148
return;
139149
}
140150

141151
try {
142-
console.log('> releases#listAssetsForRelease');
152+
const release_id = release.id;
153+
console.log(`> listAssetsForRelease: release_id=${release_id}`);
143154

144155
let assets = [];
145-
let _assets = null;
146156
let page = 1;
147157
do {
148-
let _assets = await octokit.repos.listAssetsForRelease({owner, repo, release_id, per_page, page})
149-
assets = assets.concat(_assets.data)
150-
page = next(_assets)
158+
const res = await octokit.repos.listAssetsForRelease({ owner, repo, release_id, page });
159+
assets = assets.concat(res.data);
160+
page = next(res);
151161
} while (page)
152162

153163
const deleteAssets = assets.filter(asset => {
154164
return patterns.some(pattern => minimatch(asset.name, pattern));
155165
});
156-
console.log('assets=%d, deleteAssets=%d', assets.length, deleteAssets.length);
166+
console.log(` assets=${assets.length}, deleteAssets=${deleteAssets.length}`);
157167

158168
if (deleteAssets.length > 0) {
159-
console.log('> releases#deleteReleaseAsset');
169+
console.log('> deleteReleaseAsset:');
160170
for (let i = 0; i < deleteAssets.length; ++i) {
161171
const asset = deleteAssets[i];
162-
console.log('#%d', i + 1, {
172+
console.log(` #${i + 1}:`, {
163173
id: asset.id,
164174
name: asset.name,
165175
label: asset.label,
166176
state: asset.state,
167177
size: asset.size,
168178
download_count: asset.download_count,
169179
created_at: asset.created_at,
170-
updated_at: asset.updated_at
180+
updated_at: asset.updated_at,
171181
});
172-
await octokit.repos.deleteReleaseAsset({owner, repo, asset_id: asset.id })
182+
await octokit.repos.deleteReleaseAsset({ owner, repo, asset_id: asset.id });
173183
}
174184
}
175185
} catch (err) {
176186
console.error(err);
177187
}
178188
},
179189
'list': async () => {
180-
const releases = await octokit.repos.listReleases({ owner: program.owner, repo: program.repo, page: 1 });
190+
const releases = await octokit.repos.listReleases({
191+
owner: program.owner,
192+
repo: program.repo,
193+
page: 1,
194+
});
181195
for (const release of releases.data) {
182196
console.log(`${release.name} (${release.tag_name})`);
183197
}
184198
},
185199
}[command];
186200

187201
async function main() {
188-
try {
189-
typeof fn === 'function' && await fn();
190-
} catch (err) {
191-
// message has token in the response
192-
const message = err.message.replace(/https?:[^\s]*/g, (match) => match.replace(/\?.*/, ''))
193-
console.log(message);
194-
process.exit(1);
195-
}
202+
try {
203+
typeof fn === 'function' && await fn();
204+
} catch (err) {
205+
// message has token in the response
206+
const message = err.message.replace(/https?:[^\s]*/g, (match) => match.replace(/\?.*/, ''));
207+
console.log(message);
208+
process.exit(1);
209+
}
196210
}
197211

198212
main()

0 commit comments

Comments
 (0)