material-icons-browser-exte.../scripts/update-upstream-version.js

69 lines
2.4 KiB
JavaScript
Raw Normal View History

2021-07-17 00:35:49 -04:00
const fetch = require('node-fetch');
2021-07-15 23:59:32 -04:00
const path = require('path');
2021-12-08 22:46:10 -05:00
const api = require('@octokit/core');
2021-07-15 23:59:32 -04:00
const compareVersions = require('compare-versions');
const fs = require('fs/promises');
2021-07-15 23:59:32 -04:00
const upstreamVersionFilePath = path.resolve(__dirname, '..', 'upstream.version');
2021-12-08 22:46:10 -05:00
const upstreamCommitFilePath = path.resolve(__dirname, '..', 'upstream.commit');
2021-07-15 23:59:32 -04:00
/**
* Gets latest VSCode Extension release version by parsing it's most recent 100 commit msgs
*
* returns version string or undefined
*
* @returns {Promise<string>} The current version of the upstream repository.
2021-07-15 23:59:32 -04:00
*/
2021-07-17 00:35:49 -04:00
const getUpstreamVersion = () =>
fetch('https://raw.githubusercontent.com/PKief/vscode-material-icon-theme/main/package.json')
.then((res) => res.json())
.then((package) => package.version);
2021-07-15 23:59:32 -04:00
2021-12-08 22:46:10 -05:00
const octokit = new api.Octokit();
const getUpstreamCommit = () =>
octokit
.request('GET /repos/PKief/vscode-material-icon-theme/commits', { per_page: 1 })
.then((res) => res.data?.[0].sha);
2021-12-08 22:46:10 -05:00
const getLastUpstreamVersion = () =>
fs.readFile(upstreamVersionFilePath, { encoding: 'utf8' }).then((data) => data.trim());
2021-07-15 23:59:32 -04:00
2021-07-17 00:02:19 -04:00
const updateReadmeBadge = async (version) => {
const readmeFilePath = path.resolve(__dirname, '..', 'README.md');
const readme = await fs.readFile(readmeFilePath, { encoding: 'utf8' });
2021-07-17 00:35:49 -04:00
const versionRgx = /(badge\/[\w_]+-v)\d+\.\d+\.\d+/;
const replacement = `$1${version}`;
2021-07-17 00:02:19 -04:00
2021-07-17 00:35:49 -04:00
const updatedReadme = readme.replace(versionRgx, replacement);
2021-07-17 00:02:19 -04:00
2021-07-17 00:35:49 -04:00
return fs.writeFile(readmeFilePath, updatedReadme);
2021-07-17 00:02:19 -04:00
};
2021-07-15 23:59:32 -04:00
const run = async () => {
const latestVersion = await getUpstreamVersion();
const lastSeenVersion = await getLastUpstreamVersion();
2021-12-08 22:46:10 -05:00
const latestUpstreamCommit = await getUpstreamCommit();
2021-07-15 23:59:32 -04:00
2021-07-17 00:02:19 -04:00
console.log(`Latest upstream version: ${latestVersion}`);
console.log(`Current repository version: ${lastSeenVersion}`);
2021-07-16 20:55:01 -04:00
2021-07-15 23:59:32 -04:00
if (!latestVersion || compareVersions.compare(lastSeenVersion, latestVersion, '>=')) {
// exit script with an error. Simplifies chaining of shell commands only in case updates are found
2021-07-17 00:02:19 -04:00
console.log('No update necessary.');
2021-07-15 23:59:32 -04:00
process.exit(1);
}
2021-07-17 00:02:19 -04:00
console.log('Updating upstream version in "/upstream.version"');
2021-07-15 23:59:32 -04:00
await fs.writeFile(upstreamVersionFilePath, latestVersion);
2021-07-17 00:02:19 -04:00
2021-12-08 22:46:10 -05:00
console.log('Updating upstream commit sha in "/upstream.commit"');
await fs.writeFile(upstreamCommitFilePath, latestUpstreamCommit);
2021-07-17 00:02:19 -04:00
console.log('Updating upstream version badge in README');
await updateReadmeBadge(latestVersion);
2021-07-15 23:59:32 -04:00
};
run();