Skip to content

Commit

Permalink
ci: optimized currency report generator
Browse files Browse the repository at this point in the history
- asking for "npm info {name} version" is not right for all edge cases
- some packages do publishing mistakes
  • Loading branch information
kirrg001 committed Jun 14, 2024
1 parent 565d785 commit 563b9ee
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 17 deletions.
47 changes: 31 additions & 16 deletions bin/currency/generate-currency-report.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ currencies = currencies.sort(function (a, b) {
});

currencies = currencies.map(currency => {
console.log(`Checking ${currency.name}...`);

let installedVersion = utils.getRootDependencyVersion(currency.name);
let latestVersion;
let upToDate;
Expand All @@ -44,14 +46,40 @@ currencies = currencies.map(currency => {
installedVersion = latestVersion = 'latest';
upToDate = true;
} else {
latestVersion = execSync(`npm info ${currency.name} version`).toString().trim();
let releaseList = JSON.parse(execSync(`npm show ${currency.name} time --json`).toString());
delete releaseList.created;
delete releaseList.modified;

// NOTE: we ignore pre releases completely for now
releaseList = Object.keys(releaseList)
.filter(key => {
return !semver.prerelease(key) && semver.valid(key);
})
.reduce((obj, key) => {
obj[key] = releaseList[key];
return obj;
}, {});

// CASE: sort all versions by name ASC
const keys = Object.keys(releaseList).sort((a, b) => {
if (semver.gt(a, b)) {
return 1;
}

return -1;
});

latestVersion = keys[keys.length - 1];

if (!installedVersion) {
installedVersion = latestVersion;
} else {
installedVersion = installedVersion.replace(/[^0-9.]/g, '');
}

console.log(`Installed version: ${installedVersion}`);
console.log(`Latest version: ${latestVersion}`);

const diff = semver.diff(latestVersion, installedVersion);

// CASE: no new release happened when diff is null
Expand All @@ -67,26 +95,14 @@ currencies = currencies.map(currency => {

if (!upToDate) {
try {
const releaseList = JSON.parse(execSync(`npm show ${currency.name} time --json`).toString());
delete releaseList.created;
delete releaseList.modified;

const keys = Object.keys(releaseList).sort((a, b) => {
if (semver.gt(a, b)) {
return 1;
}

return -1;
});

const currentMajorVersion = semver.major(installedVersion);

// CASE: 3.3.0 is supported -> [..., 3.3.0, 3.4.0, 3.5.0, ...] -> 3.4.0 is the next available version
// we need need to reference the date from.
// CASE: [..., 3.3.0, 3.4.0, 4.0.0, 3.5.0]
let nextAvailableVersionIndex;
keys.slice(keys.indexOf(installedVersion) + 1).every(key => {
if (!semver.prerelease(key) && semver.major(key) === currentMajorVersion) {
if (semver.major(key) === currentMajorVersion) {
nextAvailableVersionIndex = key;
return false;
}
Expand All @@ -101,8 +117,7 @@ currencies = currencies.map(currency => {

keys.every(key => {
try {
// NOTE: we ignore beta releases for now to calculate the days behind
if (!semver.prerelease(key) && semver.major(key) > currentMajorVersion) {
if (semver.major(key) > currentMajorVersion) {
latestNextMajorVersionIndex = key;
return false;
}
Expand Down
2 changes: 1 addition & 1 deletion currencies.json
Original file line number Diff line number Diff line change
Expand Up @@ -762,7 +762,7 @@
"latestVersion": "",
"cloudNative": false,
"isBeta": false,
"ignoreUpdates": false,
"ignoreUpdates": true,
"note": "",
"deprecated": false,
"core": false
Expand Down

0 comments on commit 563b9ee

Please sign in to comment.