[MM-18552] Autoupdater (#1714)
* wip * background download * various fixes * wip * wokring autoupgrade * fix menu * fix windows * cleanup * add publishername * fix messages and titles * Test updates * Moved module and added functionality to click icon to install (instead of just download) * Add auto update setting, update on close app if downloaded * Tests, changes for security fixes, update version number * Update E2E tests * Lint fix * Update to latest electron-updater * Revert to stable electron-builder (only needed to update electron-updater) * Fix package-lock * skip flaky test * Update package * Fix E2E test * Fixes for enabling/disabled autoupdater * Fixed GPO definitions * [MM-38300] Set localhost as the test server * blank * Switch to s3 bucket for testing * Update icons to match spec * Add menu items for download/update actions * Type and test fixes * Fix notification circle * Fix macOS app not restarting on Restart/Update * Update dialog box titles * Turn off file system check for Linux * Changes to support deployments * Testing autoupdater deployments to s3 * disable tests for now * asfrehwf * fine no windows WHATEVER * remove windows again * Try universal all in one * pffftttngggguhhhh * make sure it's working * Missed artifacts script * Modify destination as well * one more time! * Update yml files * Oops * add yq manually * oof * Fix the script to work properly * Fix release script * Fix script again so it runs in time * Build version 2 * Revert build specific changes * Lint override * Fix build apps for PR builds * One more change * Add file generation for .deb repo * Deb repo test * skip tests for now * Fix artifact push * Persist after repo creation * Put tests back * Fix unit tests * Enable mac generated builds temp * Temporarily disable tests * Fix issue where notification doesn't pop dialog box * Try version 2 again * Put the version back * Attempting to debug mac app path issue * Fix issue where Mac app will quarantine itself after first update * Lock versions of yq * Fix yq for mac * As usual, Mac is difficult :P * Add quotes to anti-quarantine command * Change to spawn to avoid command injection * Oops * Nightly deployment changes (#2005) * Test nightly deploy * I fixed a some things * aaaaaaaaa * Restore old bucket * Added progress indicator via tooltip * Ship nightly builds to main S3 bucket * PR feedback * Fix a couple security exploits * Fix opacity on light mode button * Use large app icon * Resize icon for Windows * Resize icon for Mac * Update to electron-updater final * Remove Mac support and deb repo * Typo * Remove deb script * Remove checksum function * Removed autoUpdateSettingsPath * Update URL Co-authored-by: = <=> Co-authored-by: Devin Binnie <devin.binnie@mattermost.com> Co-authored-by: Mattermod <mattermod@users.noreply.github.com> Co-authored-by: Devin Binnie <52460000+devinbinnie@users.noreply.github.com>
This commit is contained in:
@@ -37,6 +37,28 @@ import migrateConfigItems from './migrationPreferences';
|
||||
* Handles loading and merging all sources of configuration as well as saving user provided config
|
||||
*/
|
||||
|
||||
function checkWriteableApp() {
|
||||
if (process.platform === 'win32') {
|
||||
try {
|
||||
fs.accessSync(path.join(path.dirname(app.getAppPath()), '../../'), fs.constants.W_OK);
|
||||
} catch (error) {
|
||||
log.info(`${app.getAppPath()}: ${error}`);
|
||||
log.warn('autoupgrade disabled');
|
||||
return false;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-undef
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
return __CAN_UPGRADE__; // prevent showing the option if the path is not writeable, like in a managed environment.
|
||||
}
|
||||
|
||||
// temporarily disabling auto updater for macOS due to security issues
|
||||
// eslint-disable-next-line no-undef
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
return process.platform !== 'darwin' && __CAN_UPGRADE__;
|
||||
}
|
||||
export class Config extends EventEmitter {
|
||||
configFilePath: string;
|
||||
|
||||
@@ -48,12 +70,14 @@ export class Config extends EventEmitter {
|
||||
buildConfigData?: BuildConfig;
|
||||
localConfigData?: ConfigType;
|
||||
useNativeWindow: boolean;
|
||||
canUpgradeValue?: boolean
|
||||
|
||||
predefinedTeams: TeamWithTabs[];
|
||||
|
||||
constructor(configFilePath: string) {
|
||||
super();
|
||||
this.configFilePath = configFilePath;
|
||||
this.canUpgradeValue = checkWriteableApp();
|
||||
this.registryConfig = new RegistryConfig();
|
||||
this.predefinedTeams = [];
|
||||
if (buildConfig.defaultTeams) {
|
||||
@@ -282,6 +306,14 @@ export class Config extends EventEmitter {
|
||||
return this.combinedData?.alwaysMinimize;
|
||||
}
|
||||
|
||||
get canUpgrade() {
|
||||
return this.canUpgradeValue && this.buildConfigData?.enableAutoUpdater && !(process.platform === 'win32' && this.registryConfigData?.enableAutoUpdater === false);
|
||||
}
|
||||
|
||||
get autoCheckForUpdates() {
|
||||
return this.combinedData?.autoCheckForUpdates;
|
||||
}
|
||||
|
||||
// initialization/processing methods
|
||||
|
||||
/**
|
||||
@@ -525,6 +557,7 @@ export class Config extends EventEmitter {
|
||||
const config: Partial<LocalConfiguration> = {...this.localConfigData};
|
||||
config.appName = app.name;
|
||||
config.enableServerManagement = this.combinedData?.enableServerManagement;
|
||||
config.canUpgrade = this.canUpgrade;
|
||||
if (option) {
|
||||
return config[option];
|
||||
}
|
||||
|
Reference in New Issue
Block a user