code: function generateBlogPost(releaseInfo, prereleaseMajorVersion) {
      const ruleList = ls("lib/rules")
  
          // Strip the .js extension
          .map(ruleFileName => ruleFileName.replace(/\.js$/u, ""))
  
          /*
           * Sort by length descending. This ensures that rule names which are substrings of other rule names are not
           * matched incorrectly. For example, the string "no-undefined" should get matched with the `no-undefined` rule,
           * instead of getting matched with the `no-undef` rule followed by the string "ined".
           */
          .sort((ruleA, ruleB) => ruleB.length - ruleA.length);
  
      const renderContext = Object.assign({ prereleaseMajorVersion, ruleList }, releaseInfo);
  
      const output = ejs.render(cat("./templates/blogpost.md.ejs"), renderContext),
          now = new Date(),
          month = now.getMonth() + 1,
          day = now.getDate(),
          filename = `../eslint.github.io/_posts/${now.getFullYear()}-${
              month < 10 ? `0${month}` : month}-${
              day < 10 ? `0${day}` : day}-eslint-v${
              releaseInfo.version}-released.md`;
  
      output.to(filename);
  }
docs: Generates a release blog post for eslint.org
  @param {Object} releaseInfo The release metadata.
  @param {string} [prereleaseMajorVersion] If this is a prerelease, the next major version after this prerelease
  @returns {void}
  @private