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');
|
2022-06-30 22:25:48 -04:00
|
|
|
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
|
2022-06-30 22:25:48 -04:00
|
|
|
*
|
|
|
|
* @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();
|
2022-06-30 22:25:48 -04:00
|
|
|
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
|
|
|
|
2022-06-30 22:25:48 -04: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();
|