mirror of
https://github.com/HeyPuter/puter
synced 2024-11-15 06:15:47 +00:00
Add service to check EOL date of node
This commit is contained in:
parent
4a2fa5a29f
commit
c3a4223bbf
@ -6,6 +6,9 @@ class SelfhostedModule extends AdvancedBase {
|
||||
|
||||
const DefaultUserService = require('./services/DefaultUserService');
|
||||
services.registerService('__default-user', DefaultUserService);
|
||||
|
||||
const ComplainAboutVersionsService = require('./services/ComplainAboutVersionsService');
|
||||
services.registerService('complain-about-versions', ComplainAboutVersionsService);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,87 @@
|
||||
const { BaseService } = require("../../exports");
|
||||
const { surrounding_box } = require("../fun/dev-console-ui-utils");
|
||||
|
||||
class ComplainAboutVersionsService extends BaseService {
|
||||
static DESCRIPTION = `
|
||||
This service doesn't mandate a specific version of node.js,
|
||||
but it will complain (create a sticky notification in the
|
||||
dev console) if you're using something that's past EOL.
|
||||
|
||||
This is mostly just for fun, because it feels cool when the
|
||||
system calls people out for using old versions of node.
|
||||
That said, maybe one day we'll come across some nuanced error
|
||||
that only happens an a recently EOL'd node version.
|
||||
`;
|
||||
|
||||
static MODULES = {
|
||||
axios: require('axios'),
|
||||
}
|
||||
|
||||
async _init () {
|
||||
const eol_data = await this.get_eol_data_();
|
||||
|
||||
const [major] = process.versions.node.split('.');
|
||||
const current_version_data = eol_data.find(
|
||||
({ cycle }) => cycle === major
|
||||
);
|
||||
|
||||
if ( ! current_version_data ) {
|
||||
this.log.warn(
|
||||
`failed to check ${current_version} in the EOL database`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const eol_date = new Date(current_version_data.eol);
|
||||
const cur_date_obj = new Date();
|
||||
|
||||
if ( cur_date_obj < eol_date ) {
|
||||
this.log.info('node.js version looks good');
|
||||
return;
|
||||
}
|
||||
|
||||
let timeago = (() => {
|
||||
let years = cur_date_obj.getFullYear() - eol_date.getFullYear();
|
||||
let months = cur_date_obj.getMonth() - eol_date.getMonth();
|
||||
let days = cur_date_obj.getDate() - eol_date.getDate();
|
||||
|
||||
let str = '';
|
||||
while ( years > 0 ) {
|
||||
years -= 1;
|
||||
months += 12;
|
||||
}
|
||||
if ( months > 0 ) {
|
||||
str += `at least ${months} month${months > 1 ? 's' : ''}`;
|
||||
} else {
|
||||
str += `a few days`;
|
||||
}
|
||||
return str;
|
||||
})();
|
||||
|
||||
const widget_lines = [];
|
||||
widget_lines.push(
|
||||
`Node.js version ${major} is past EOL by ${timeago};`,
|
||||
`Everything should work, but you should still upgrade.`,
|
||||
);
|
||||
surrounding_box('31;1', widget_lines);
|
||||
|
||||
const svc_devConsole = this.services.get('dev-console');
|
||||
svc_devConsole.add_widget(() => widget_lines);
|
||||
}
|
||||
|
||||
async get_eol_data_ () {
|
||||
const require = this.require;
|
||||
const axios = require('axios');
|
||||
const url = 'https://endoflife.date/api/nodejs.json'
|
||||
let data;
|
||||
try {
|
||||
({ data } = await axios.get(url));
|
||||
return data;
|
||||
} catch (e) {
|
||||
this.log.error(e);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ComplainAboutVersionsService;
|
Loading…
Reference in New Issue
Block a user