Workbench/backend/target/backend-1/handsontable/docs/.vuepress/tools/generate-legacy-docs-versions.mjs

64 lines
1.9 KiB
JavaScript

import path from 'path';
import fs from 'fs';
import { fileURLToPath } from 'url';
import { Octokit } from '@octokit/rest';
import semver from 'semver';
import utils from './utils.js';
const { logger } = utils;
const docsBasePath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..');
const MIN_DOCS_VERSION = '4.0.0';
const TARGET_PATH = path.resolve('./.vuepress/public/scripts/hot-versions.js');
const relativeTarget = path.relative(docsBasePath, TARGET_PATH);
const fileContentFactory = docsVersions => `
// --- THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY!!! ---
(function() {
docVersions && docVersions(${JSON.stringify(docsVersions)});
}());
`;
const octokit = new Octokit();
let releases = [];
(async() => {
try {
releases = await octokit.rest.repos
.listReleases({
owner: 'handsontable',
repo: 'handsontable',
per_page: 50,
});
if (releases.status !== 200) {
throw new Error('Incorrect response from the GitHub API.');
}
logger.log(`GitHub API rate limits:
Limit: ${releases.headers['x-ratelimit-limit']}
Used: ${releases.headers['x-ratelimit-used']}
Remaining: ${releases.headers['x-ratelimit-remaining']}
`);
} catch (ex) {
logger.error('Something bad happened while fetching the releases:', ex.message);
process.exit(1);
}
const releaseVersions = releases.data
.map(release => release.tag_name)
.filter(tagName => semver.prerelease(tagName) === null && semver.gte(tagName, MIN_DOCS_VERSION))
.sort(semver.rcompare);
try {
fs.writeFileSync(TARGET_PATH, fileContentFactory(releaseVersions));
} catch (ex) {
logger.error('Something bad happened while writing the file:', ex.message);
process.exit(1);
} finally {
logger.success(`The file with generated versions for legacy docs is created at "${relativeTarget}"`);
}
})();