function getPullRequestTitle()

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' });
  });
}