Skip to content

Commit 44d0e13

Browse files
committed
Merge pull request #972 from erwinmombay/changelog-assert
fix(tool): add asserts to changelog code to make it less fragile.
2 parents fe1a2dd + de6af6c commit 44d0e13

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

build-system/tasks/changelog.js

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
*/
2323

2424
var argv = require('minimist')(process.argv.slice(2));
25+
var assert = require('assert');
2526
var BBPromise = require('bluebird');
2627
var config = require('../config');
2728
var extend = require('util')._extend;
@@ -50,9 +51,11 @@ function changelog() {
5051

5152
function getGitMetadata() {
5253
var version = argv.version;
54+
var versionErrMsg = 'No version option passed';
5355

5456
if (!version) {
55-
throw new Error('No version option passed');
57+
util.log(util.colors.red(versionErrMsg));
58+
throw new Error(versionErrMsg);
5659
}
5760

5861
var gitMetadata = {};
@@ -63,12 +66,14 @@ function getGitMetadata() {
6366
.then(fetchGithubMetadata)
6467
.then(buildChangelog.bind(null, gitMetadata))
6568
.then(function(gitMetadata) {
69+
util.log(util.colors.blue('\n' + gitMetadata.changelog));
6670
return submitReleaseNotes(version, gitMetadata.changelog);
6771
})
6872
.catch(errHandler);
6973
}
7074

7175
function submitReleaseNotes(version, changelog) {
76+
assert(typeof version == 'number', 'version should be a number. ' + version);
7277
var options = {
7378
url: 'https://api.github.com/repos/ampproject/amphtml/releases',
7479
method: 'POST',
@@ -169,6 +174,7 @@ function fetchGithubMetadata(ids) {
169174
function getPullRequestTitle(prOption) {
170175
return request(prOption).then(function(res) {
171176
var body = JSON.parse(res.body);
177+
assert(typeof body.url == 'string', 'should have url string. ' + res.body);
172178
var url = body.url.split('/');
173179
var pr = url[url.length - 1];
174180
return body.title + ' (#' + pr + ')';
@@ -179,9 +185,8 @@ function getPullRequestFiles(title, filesOption) {
179185
return request(filesOption).then(function(res) {
180186
var body = JSON.parse(res.body);
181187

182-
if (!body || !Array.isArray(body)) {
183-
throw new Error('Could not get Pull Request Files.');
184-
}
188+
assert(Array.isArray(body) && body.length > 0,
189+
'Pull request response must not be empty. ' + res.body);
185190
var filenames = body.map(function(file) {
186191
return file.filename;
187192
});
@@ -205,19 +210,27 @@ function onGitTagSuccess(gitMetadata, tag) {
205210

206211
function onGitLogSuccess(gitMetadata, logs) {
207212
var commits = logs.split('\n');
213+
assert(typeof logs == 'string', 'git log should be a string.\n' + logs);
208214
return commits
209215
.filter(function(commit) {
210216
// filter non Pull request merges
211217
return commit.indexOf('Merge pull') == 0;
212218
})
213219
.map(function(commit) {
214220
// We only need the PR id
215-
return commit.split(' ')[3].slice(1);
221+
var id = commit.split(' ')[3].slice(1);
222+
var value = parseInt(id, 10);
223+
assert(value > 0, 'Should be an integer greater than 0. ' + value);
224+
return id;
216225
});
217226
}
218227

219228
function errHandler(err) {
220-
util.log(util.colors.red(err));
229+
var msg = err;
230+
if (err.message) {
231+
msg = err.message;
232+
}
233+
util.log(util.colors.red(msg));
221234
return err;
222235
}
223236

0 commit comments

Comments
 (0)