Skip to content
Snippets Groups Projects
Select Git revision
  • cd283268ea74c536b3fc9dd2bde121721a1294e7
  • master default protected
  • gh-pages
  • dependabot/npm_and_yarn/nock-14.0.8
  • dependabot/npm_and_yarn/react-dom-19.1.1
  • dependabot/npm_and_yarn/react-19.1.1
  • server-2025-08-01-57ada99c
  • server-2025-02-01-6100669a
  • server-2024-11-01-87cba042
  • server-2024-10-01-6875b7c8
  • dependabot/npm_and_yarn/path-to-regexp-8.2.0
  • server-2024-09-01-3d52575c
  • daily-tests-gha2
  • daily-tests-gha
  • server-2023-12-01-92d8fb8e
  • server-2023-11-01-a80c93fd
  • server-2023-10-01-31096085
  • coc-v2
  • server-2023-09-01-8edc3810
  • server-2023-08-01-75858a03
  • server-2023-07-01-02183d8d
  • server-2025-08-03
  • server-2025-07-01
  • 5.0.2
  • 5.0.1
  • 5.0.0
  • server-2025-06-01
  • server-2025-05-01
  • server-2025-04-03
  • server-2025-03-02
  • server-2025-03-01
  • server-2025-02-02
  • server-2025-01-01
  • server-2024-12-01
  • server-2024-11-02
  • 4.1.0
  • server-2024-09-25
  • server-2024-09-02
  • server-2024-08-01
  • server-2024-07-01
  • 4.0.0
41 results

dangerfile.js

Blame
  • release-notes.js 4.43 KiB
    const ghGot = require('../../platform/github/gh-got-wrapper');
    
    module.exports = {
      getReleaseList,
      massageBody,
      getReleaseNotesMd,
      getReleaseNotes,
      addReleaseNotes,
    };
    
    async function getReleaseList(repository) {
      logger.debug('getReleaseList()');
      try {
        const res = await ghGot(`repos/${repository}/releases?per_page=100`);
        return res.body.map(release => ({
          url: release.html_url,
          id: release.id,
          tag: release.tag_name,
          name: release.name,
          body: release.body,
        }));
      } catch (err) /* istanbul ignore next */ {
        logger.info({ repository, err }, 'getReleaseList error');
        return [];
      }
    }
    
    function massageBody(input) {
      let body = input || '';
      // Convert line returns
      body = body.replace(/\r\n/g, '\n');
      // semantic-release cleanup
      body = body.replace(/^<a name="[^"]*"><\/a>\n/, '');
      body = body.replace(
        /^##? \[[^\]]*\]\(https:\/\/github.com\/[^/]*\/[^/]*\/compare\/.*?\n/,
        ''
      );
      // Clean-up unnecessary commits link
      body = `\n${body}\n`.replace(
        /\nhttps:\/\/github.com\/[^/]+\/[^/]+\/compare\/[^\n]+(\n|$)/,
        '\n'
      );
      // Reduce headings size
      body = body
        .replace(/\n\s*####? /g, '\n##### ')
        .replace(/\n\s*## /g, '\n#### ')
        .replace(/\n\s*# /g, '\n### ');
      // Trim whitespace
      return body.trim();
    }
    
    async function getReleaseNotes(repository, version) {
      logger.debug(`getReleaseNotes(${repository}, ${version})`);
      const releaseList = await getReleaseList(repository);
      let releaseNotes;
      releaseList.forEach(release => {
        if (release.tag === version || release.tag === `v${version}`) {
          releaseNotes = release;
          releaseNotes.url = `https://github.com/${repository}/releases/${
            release.tag
          }`;
          releaseNotes.body = massageBody(releaseNotes.body);
          if (!releaseNotes.body.length) {
            releaseNotes = undefined;
          }
        }
      });
      logger.debug({ releaseNotes });
      return releaseNotes;
    }