in scripts/github-pr-title-lint.js [85:174]
function getPullRequestTitle() {
return new Promise(function (resolve, reject) {
const pullRequestURL = CIRCLE_PULL_REQUEST;
const pullRequestNumber = pullRequestURL.split('/').pop();
if (!/^\d+$/.test(pullRequestNumber)) {
reject(
new Error(`Unable to parse pull request number from ${pullRequestURL}`),
);
return;
}
console.log(`Retrieving the pull request title from ${pullRequestURL}\n`);
var req = https.get(
pullRequestURL,
{
headers: {
'User-Agent': 'GitHub... your API can be very annoying ;-)',
},
},
function (response) {
if (response.statusCode < 200 || response.statusCode > 299) {
reject(
new Error(
`getPullRequestTitle got an unexpected statusCode: ${response.statusCode}`,
),
);
return;
}
response.setEncoding('utf8');
var body = '';
response.on('data', function (data) {
try {
body += data;
if (VERBOSE === 'true') {
console.log('DEBUG getPullRequestTitle got data:', String(data));
}
// Once we get the closing title tag, we can read the pull request title and
// close the http request.
if (body.includes('</title>')) {
response.removeAllListeners('data');
response.emit('end');
var titleStart = body.indexOf('<title>');
var titleEnd = body.indexOf('</title>');
// NOTE: page slice is going to be something like:
// "<title> PR title by author · Pull Request #NUM · mozilla/web-ext · GitHub"
var pageTitleParts = body
.slice(titleStart, titleEnd)
.replace('<title>', '')
.split(' · ');
// Check that we have really got the title of a real pull request.
var expectedPart1 = `Pull Request #${pullRequestNumber}`;
if (pageTitleParts[1] === expectedPart1) {
// Remove the "by author" part.
var prTitleEnd = pageTitleParts[0].lastIndexOf(' by ');
resolve(pageTitleParts[0].slice(0, prTitleEnd));
} else {
if (VERBOSE === 'true') {
console.log('DEBUG getPullRequestTitle response:', body);
}
reject(new Error('Unable to retrieve the pull request title'));
}
req.abort();
}
} catch (err) {
reject(err);
req.abort();
}
});
response.on('error', function (err) {
console.error('Failed during pull request title download: ', err);
reject(err);
});
},
);
}).then((message) => {
return decode(message, { level: 'all' });
});
}