Files
shields/services/node/node-version-color.js
Regev Brody 15cbbe828e fix: [node npm] service has bad colors #4809 (#4810)
* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* fix: node service has bad colors #4809

* chore: minor service test rename

Co-authored-by: Caleb Cartwright <calebcartwright@users.noreply.github.com>
2020-04-04 21:21:08 -05:00

92 lines
2.3 KiB
JavaScript

'use strict'
const { promisify } = require('util')
const moment = require('moment')
const semver = require('semver')
const { regularUpdate } = require('../../core/legacy/regular-update')
const dateFormat = 'YYYY-MM-DD'
function getVersion(version) {
let semver = ``
if (version) {
semver = `-${version}.x`
}
return promisify(regularUpdate)({
url: `https://nodejs.org/dist/latest${semver}/SHASUMS256.txt`,
intervalMillis: 24 * 3600 * 1000,
json: false,
scraper: shasums => {
// tarball index start, tarball index end
const taris = shasums.indexOf('node-v')
const tarie = shasums.indexOf('\n', taris)
const tarball = shasums.slice(taris, tarie)
return tarball.split('-')[1]
},
})
}
function ltsVersionsScraper(versions) {
const currentDate = moment().format(dateFormat)
return Object.keys(versions).filter(function(version) {
const data = versions[version]
return data.lts && data.lts < currentDate && data.end > currentDate
})
}
async function getCurrentVersion() {
return getVersion()
}
async function getLtsVersions() {
const versions = await promisify(regularUpdate)({
url:
'https://raw.githubusercontent.com/nodejs/Release/master/schedule.json',
intervalMillis: 24 * 3600 * 1000,
json: true,
scraper: ltsVersionsScraper,
})
return Promise.all(versions.map(getVersion))
}
async function versionColorForRangeLts(range) {
const ltsVersions = await getLtsVersions()
try {
const matchesAll = ltsVersions.reduce(function(satisfies, version) {
return satisfies && semver.satisfies(version, range)
}, true)
const matchesSome = ltsVersions.reduce(function(satisfies, version) {
return satisfies || semver.satisfies(version, range)
}, false)
if (matchesAll) {
return 'brightgreen'
} else if (matchesSome) {
return 'yellow'
} else {
return 'orange'
}
} catch (e) {
return 'lightgray'
}
}
async function versionColorForRangeCurrent(range) {
const latestVersion = await getCurrentVersion()
try {
if (semver.satisfies(latestVersion, range)) {
return 'brightgreen'
} else if (semver.gtr(latestVersion, range)) {
return 'yellow'
} else {
return 'orange'
}
} catch (e) {
return 'lightgray'
}
}
module.exports = {
versionColorForRangeCurrent,
versionColorForRangeLts,
}