in src/extension.ts [70:141]
private checkExtension(context: vscode.ExtensionContext): ExtensionInfo {
const extensionVersionKey = 'ps-rule-extension-version';
// Get channel
let extensionId = 'bewhite.psrule-vscode';
let extensionChannel = 'stable';
if (path.basename(context.globalStorageUri.fsPath) === 'bewhite.psrule-vscode-preview') {
extensionId = 'bewhite.psrule-vscode-preview';
extensionChannel = 'preview';
}
if (path.basename(context.globalStorageUri.fsPath) === 'bewhite.psrule-vscode-dev') {
extensionId = 'bewhite.psrule-vscode-dev';
extensionChannel = 'dev';
}
logger.verbose(`Running extension channel: ${extensionChannel}`);
// Get current version
const extension = vscode.extensions.getExtension(extensionId)!;
const extensionVersion: string = extension.packageJSON.version;
logger.verbose(`Running extension version: ${extensionVersion}`);
// Get last version
const lastVersion = context.globalState.get(extensionVersionKey);
// Save the extension version
context.globalState.update(extensionVersionKey, extensionVersion);
// Determine if the channel upgrade message is shown
const showChannelUpgrade: boolean = vscode.workspace
.getConfiguration('PSRule.notifications')
.get('showChannelUpgrade', true);
if ((extensionChannel === 'preview' || extensionChannel === 'dev') && showChannelUpgrade) {
const showReleaseNotes = 'Show Release Notes';
const showExtension = 'Show Extension';
const alwaysIgnore = 'Always Ignore';
vscode.window
.showInformationMessage(
`You are running the ${extensionChannel} version of PSRule. A stable version is available.`,
showReleaseNotes,
showExtension,
alwaysIgnore
)
.then((choice) => {
if (choice === showReleaseNotes) {
vscode.commands.executeCommand(
'markdown.showPreview',
vscode.Uri.file(path.resolve(__dirname, '../../CHANGELOG.md'))
);
}
if (choice === showExtension) {
vscode.commands.executeCommand(
'workbench.extensions.search',
'bewhite.psrule-vscode'
);
}
if (choice === alwaysIgnore) {
vscode.workspace
.getConfiguration('PSRule.notifications')
.update('showChannelUpgrade', false, vscode.ConfigurationTarget.Global);
}
});
}
const result: ExtensionInfo = {
id: extensionId,
version: extensionVersion,
channel: extensionChannel,
};
return result;
}