2017-12-20 21:46:01 +00:00
|
|
|
/*
|
2022-03-08 17:59:19 +00:00
|
|
|
Copyright 2016-2022 Balena
|
2017-12-20 21:46:01 +00:00
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
you may not use this file except in compliance with the License.
|
|
|
|
You may obtain a copy of the License at
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
See the License for the specific language governing permissions and
|
|
|
|
limitations under the License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
import isRoot = require('is-root');
|
2019-03-12 22:07:57 +00:00
|
|
|
import * as UpdateNotifier from 'update-notifier';
|
|
|
|
|
2017-12-20 21:46:01 +00:00
|
|
|
import packageJSON = require('../../package.json');
|
|
|
|
|
|
|
|
// Check for an update once a day. 1 day granularity should be
|
|
|
|
// enough, rather than every run.
|
2018-10-19 14:38:50 +00:00
|
|
|
const balenaUpdateInterval = 1000 * 60 * 60 * 24 * 1;
|
2017-12-20 21:46:01 +00:00
|
|
|
|
|
|
|
let notifier: UpdateNotifier.UpdateNotifier;
|
|
|
|
|
|
|
|
export function notify() {
|
2018-01-04 16:17:43 +00:00
|
|
|
if (!notifier) {
|
2019-04-30 15:38:01 +00:00
|
|
|
// `update-notifier` creates files to make the next
|
|
|
|
// running time ask for updated, however this can lead
|
|
|
|
// to ugly EPERM issues if those files are created as root.
|
|
|
|
if (isRoot()) {
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
notifier = UpdateNotifier({
|
|
|
|
pkg: packageJSON,
|
|
|
|
updateCheckInterval: balenaUpdateInterval,
|
|
|
|
});
|
|
|
|
}
|
2017-12-20 21:46:01 +00:00
|
|
|
}
|
2019-04-30 15:38:01 +00:00
|
|
|
const up = notifier.update;
|
2022-03-08 17:59:19 +00:00
|
|
|
const message = up && getNotifierMessage(up);
|
|
|
|
if (message) {
|
|
|
|
notifier.notify({ defer: false, message });
|
2017-12-20 21:46:01 +00:00
|
|
|
}
|
2018-01-04 14:07:55 +00:00
|
|
|
}
|
2022-03-08 17:59:19 +00:00
|
|
|
|
|
|
|
export function getNotifierMessage(updateInfo: UpdateNotifier.UpdateInfo) {
|
|
|
|
const semver = require('semver') as typeof import('semver');
|
|
|
|
const message: string[] = [];
|
|
|
|
const [current, latest] = [updateInfo.current, updateInfo.latest];
|
|
|
|
|
|
|
|
if (semver.lt(current, latest)) {
|
|
|
|
message.push(
|
|
|
|
`Update available ${current} → ${latest}`,
|
|
|
|
'https://github.com/balena-io/balena-cli/blob/master/INSTALL.md',
|
|
|
|
);
|
|
|
|
const currentMajor = semver.major(current);
|
|
|
|
const latestMajor = semver.major(latest);
|
|
|
|
if (currentMajor !== latestMajor) {
|
|
|
|
message.push(
|
|
|
|
'',
|
|
|
|
`Check the v${latestMajor} release notes at:`,
|
|
|
|
getReleaseNotesUrl(latestMajor),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return message.join('\n');
|
|
|
|
}
|
|
|
|
|
|
|
|
function getReleaseNotesUrl(majorVersion: number) {
|
|
|
|
return `https://github.com/balena-io/balena-cli/wiki/CLI-v${majorVersion}-Release-Notes`;
|
|
|
|
}
|