Skip to content

Commit ba04ebb

Browse files
committed
minimal electron autoUpdater setup with logger and test repo
1 parent 4e86fe3 commit ba04ebb

5 files changed

Lines changed: 132 additions & 92 deletions

File tree

forge.config.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ if(process.env.CI && process.env.NO_CODE_SIGNING !== 'true') {
4545
appleIdPassword: process.env.APPLE_ID_PASSWORD,
4646
teamId: process.env.APPLE_TEAM_ID
4747
};
48+
} else if(process.env.LOCAL_MAC_SIGNING === 'true') {
49+
packagerConfig.osxSign = {}; // local keychain works automatically
4850
}
4951

5052
const config: ForgeConfig = {
@@ -143,7 +145,8 @@ const config: ForgeConfig = {
143145
config: {
144146
repository: {
145147
owner: 'NiceNode',
146-
name: 'nice-node',
148+
// name: 'nice-node',
149+
name: 'test-nice-node-updater'
147150
},
148151
prerelease: true,
149152
generateReleaseNotes: true

package-lock.json

Lines changed: 11 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
"docker-cli-js": "^2.10.0",
9090
"dotenv": "^16.0.3",
9191
"du": "^1.0.0",
92+
"electron-log": "^5.1.2",
9293
"electron-squirrel-startup": "^1.0.0",
9394
"electron-store": "^8.1.0",
9495
"highcharts": "^11.0.0",

src/main/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ export const createWindow = async () => {
158158

159159
// App auto updates
160160
updater.initialize(mainWindow);
161-
updater.checkForUpdates(false);
161+
// updater.checkForUpdates(false);
162162

163163
menuBuilder = new MenuBuilder(mainWindow);
164164
menuBuilder.buildMenu();

src/main/updater.ts

Lines changed: 115 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -1,105 +1,132 @@
1-
import sleep from 'await-sleep';
2-
import { type BrowserWindow, autoUpdater, dialog } from 'electron';
1+
// import sleep from 'await-sleep';
2+
// import { type BrowserWindow, autoUpdater, dialog, FeedURLOptions } from 'electron';
3+
import type { BrowserWindow } from 'electron';
4+
// // const { updateElectronApp } = require('update-electron-app')
5+
import { type IUpdateElectronAppOptions, updateElectronApp, UpdateSourceType } from 'update-electron-app';
6+
import logger, { autoUpdateLogger } from './logger';
7+
import log from 'electron-log/main';
8+
const updateLogger = log.scope('updater');
39

4-
import { reportEvent } from './events';
5-
import i18nMain from './i18nMain';
6-
// import logger, { autoUpdateLogger } from './logger';
7-
import logger from './logger';
8-
import { getSetIsPreReleaseUpdatesEnabled } from './state/settings';
10+
// import { reportEvent } from './events';
11+
// import i18nMain from './i18nMain';
12+
// // import logger, { autoUpdateLogger } from './logger';
13+
// import logger from './logger';
14+
// import { getSetIsPreReleaseUpdatesEnabled } from './state/settings';
915

10-
let notifyUserIfNoUpdateAvailable: boolean;
16+
// let notifyUserIfNoUpdateAvailable: boolean;
1117

12-
const t = i18nMain.getFixedT(null, 'updater');
18+
// const t = i18nMain.getFixedT(null, 'updater');
1319

14-
const intiUpdateHandlers = (browserWindow: BrowserWindow) => {
15-
autoUpdater.on('error', (error) => {
16-
logger.error('autoUpdater:::::::::error', error);
17-
});
20+
// const intiUpdateHandlers = (browserWindow: BrowserWindow) => {
21+
// autoUpdater.on('error', (error) => {
22+
// logger.error('autoUpdater:::::::::error', error);
23+
// });
1824

19-
autoUpdater.on('checking-for-update', () => {
20-
logger.info('autoUpdater:::::::::checking-for-update');
21-
});
22-
autoUpdater.on('update-available', async (info: any) => {
23-
logger.info('autoUpdater:::::::::update-available: ', info);
24-
// Quick fix to wait for window load before showing update prompt
25-
await sleep(5000);
26-
dialog
27-
.showMessageBox(browserWindow, {
28-
type: 'info',
29-
title: t('UpdateAvailable'),
30-
message: `${t('UpdateNiceNode')} ${info.version}.`,
31-
buttons: [t('Yes'), t('No')],
32-
})
33-
.then(async (buttonIndex) => {
34-
if (buttonIndex.response === 0) {
35-
console.log('update accepted by user');
36-
console.log('starting download');
37-
autoUpdater.quitAndInstall();
38-
dialog.showMessageBox(browserWindow, {
39-
type: 'info',
40-
title: t('UpdateAvailable'),
41-
message: t('DownloadingUpdate'),
42-
});
43-
} else {
44-
console.log('update checkbox not checked');
45-
}
46-
})
47-
.catch((err) => {
48-
console.error('error in update available dialog: ', err);
49-
});
50-
});
25+
// autoUpdater.on('checking-for-update', () => {
26+
// logger.info('autoUpdater:::::::::checking-for-update');
27+
// });
28+
// autoUpdater.on('update-available', async (info: any) => {
29+
// logger.info('autoUpdater:::::::::update-available: ', info);
30+
// // Quick fix to wait for window load before showing update prompt
31+
// await sleep(5000);
32+
// dialog
33+
// .showMessageBox(browserWindow, {
34+
// type: 'info',
35+
// title: t('UpdateAvailable'),
36+
// message: `${t('UpdateNiceNode')} ${info.version}.`,
37+
// buttons: [t('Yes'), t('No')],
38+
// })
39+
// .then(async (buttonIndex) => {
40+
// if (buttonIndex.response === 0) {
41+
// console.log('update accepted by user');
42+
// console.log('starting download');
43+
// autoUpdater.quitAndInstall();
44+
// dialog.showMessageBox(browserWindow, {
45+
// type: 'info',
46+
// title: t('UpdateAvailable'),
47+
// message: t('DownloadingUpdate'),
48+
// });
49+
// } else {
50+
// console.log('update checkbox not checked');
51+
// }
52+
// })
53+
// .catch((err) => {
54+
// console.error('error in update available dialog: ', err);
55+
// });
56+
// });
5157

52-
autoUpdater.on('update-not-available', () => {
53-
logger.info('autoUpdater:::::::::update-not-available');
54-
if (notifyUserIfNoUpdateAvailable) {
55-
dialog.showMessageBox(browserWindow, {
56-
type: 'info',
57-
title: t('NoUpdateAvailable'),
58-
message: t('NoUpdateAvailable'),
59-
});
60-
notifyUserIfNoUpdateAvailable = false;
61-
}
62-
});
58+
// autoUpdater.on('update-not-available', () => {
59+
// logger.info('autoUpdater:::::::::update-not-available');
60+
// if (notifyUserIfNoUpdateAvailable) {
61+
// dialog.showMessageBox(browserWindow, {
62+
// type: 'info',
63+
// title: t('NoUpdateAvailable'),
64+
// message: t('NoUpdateAvailable'),
65+
// });
66+
// notifyUserIfNoUpdateAvailable = false;
67+
// }
68+
// });
6369

64-
autoUpdater.on('update-downloaded', () => {
65-
logger.info('autoUpdater:::::::::update-downloaded');
66-
logger.info('Calling autoUpdater.quitAndInstall()');
67-
reportEvent('UpdatedNiceNode');
68-
try {
69-
autoUpdater.quitAndInstall();
70-
} catch (err) {
71-
logger.error('Error in: autoUpdater.quitAndInstall()');
72-
logger.error(err);
73-
dialog.showErrorBox(
74-
t('ErrorUpdating'),
75-
t('UnableToInstallUpdate', {
76-
downloadLink: 'https://www.nicenode.xyz/#download',
77-
}),
78-
);
79-
// todo: send error details
80-
reportEvent('ErrorUpdatingNiceNode');
81-
}
82-
});
83-
};
70+
// autoUpdater.on('update-downloaded', () => {
71+
// logger.info('autoUpdater:::::::::update-downloaded');
72+
// logger.info('Calling autoUpdater.quitAndInstall()');
73+
// reportEvent('UpdatedNiceNode');
74+
// try {
75+
// autoUpdater.quitAndInstall();
76+
// } catch (err) {
77+
// logger.error('Error in: autoUpdater.quitAndInstall()');
78+
// logger.error(err);
79+
// dialog.showErrorBox(
80+
// t('ErrorUpdating'),
81+
// t('UnableToInstallUpdate', {
82+
// downloadLink: 'https://www.nicenode.xyz/#download',
83+
// }),
84+
// );
85+
// // todo: send error details
86+
// reportEvent('ErrorUpdatingNiceNode');
87+
// }
88+
// });
89+
// };
8490

85-
export const initialize = (mainWindow: BrowserWindow) => {
86-
// autoUpdater.logger = autoUpdateLogger;
87-
// autoUpdater.autoDownload = false;
88-
// autoUpdater.autoInstallOnAppQuit = false;
89-
const isPreReleaseUpdatesEnabled = getSetIsPreReleaseUpdatesEnabled();
90-
logger.info(`isPreReleaseUpdatesEnabled: ${isPreReleaseUpdatesEnabled}`);
91-
// autoUpdater.allowPrerelease = isPreReleaseUpdatesEnabled;
92-
notifyUserIfNoUpdateAvailable = false;
93-
intiUpdateHandlers(mainWindow);
94-
};
91+
// export const initialize = (mainWindow: BrowserWindow) => {
92+
// // autoUpdater.logger = autoUpdateLogger;
93+
// // autoUpdater.autoDownload = false;
94+
// // autoUpdater.autoInstallOnAppQuit = false;
95+
// const isPreReleaseUpdatesEnabled = getSetIsPreReleaseUpdatesEnabled();
96+
// logger.info(`isPreReleaseUpdatesEnabled: ${isPreReleaseUpdatesEnabled}`);
97+
// // const server = 'https://github.com/NiceNode/nice-node/releases/latest'
98+
// // const url = `${server}/update/${process.platform}/${app.getVersion()}`
99+
// // autoUpdater.setFeedURL({ url });
100+
// // autoUpdater.allowPrerelease = isPreReleaseUpdatesEnabled;
101+
// notifyUserIfNoUpdateAvailable = false;
102+
// intiUpdateHandlers(mainWindow);
103+
// };
95104

96105
export const checkForUpdates = (notifyIfNoUpdateAvailable: boolean) => {
97-
notifyUserIfNoUpdateAvailable = notifyIfNoUpdateAvailable;
98-
autoUpdater.checkForUpdates();
106+
logger.info(`updater.checkForUpdates set to: ${notifyIfNoUpdateAvailable}`);
107+
// notifyUserIfNoUpdateAvailable = notifyIfNoUpdateAvailable;
108+
// autoUpdater.checkForUpdates();
99109
};
100110

101111
export const setAllowPrerelease = (isAllowPrerelease: boolean) => {
102112
logger.info(`updater.allowPrerelease set to: ${isAllowPrerelease}`);
103113
// pre-release: not available https://www.electronjs.org/docs/latest/api/auto-updater#event-update-available
104114
// autoUpdater.allowPrerelease = isAllowPrerelease;
105115
};
116+
117+
export const initialize = (mainWindow: BrowserWindow) => {
118+
updateLogger.info('initialize updater');
119+
120+
const options: IUpdateElectronAppOptions = {
121+
updateSource: {
122+
type: UpdateSourceType.ElectronPublicUpdateService,
123+
repo: 'NiceNode/nice-node',
124+
host: 'https://update.electronjs.org',
125+
},
126+
updateInterval: '5 minutes', // testing
127+
logger: updateLogger
128+
}
129+
130+
updateLogger.info('updater options: ', options);
131+
updateElectronApp(options);
132+
}

0 commit comments

Comments
 (0)