
* Update VS Code to 1.92.2 * Use server-main.js to load VS Code It looks like the bootstrap files are now bundled so we can no longer require them. We could make them included again, but maybe it is better to go through the main entrypoint anyway because it includes some nls stuff which is maybe necessary. This also fixes what looks like a bug where we could create two servers if two requests came in. I am not sure what the practical consequences of that would be, but it will no longer do that. * Drop es2020 patch Unfortunately, VS Code will not load with this. It seems to be because `this` is being used in static properties, and it becomes `void 0` for some reason under the es2020 target. For example: static PREFIX_BY_CATEGORY = `${this.PREFIX}${this.SCOPE_PREFIX}`; becomes AbstractGotoSymbolQuickAccessProvider.PREFIX_BY_CATEGORY = `${(void 0).PREFIX}${(void 0).SCOPE_PREFIX}`; Which, obviously, will not work. Older versions of Safari (and maybe other browsers) are likely affected. * Fix display language * Update Playwright I think maybe because of the dropped es2020 patch that Webkit is now failing because it is too old. * Do not wait for networkidle in e2e tests I am not sure what is going on but some tests on Webkit are timing out and it seems the page is loaded but something is still trying to download. Not good, but for now try to at least get the tests passing.
138 lines
5.0 KiB
Diff
138 lines
5.0 KiB
Diff
Add a notification that lets you know when an update is out
|
|
|
|
The easiest way to test this is probably to change the version in your
|
|
package.json and delete the last notification storage item.
|
|
|
|
1. change version in root `package.json`
|
|
2. Open DevTools > Application > Storage (top-level)
|
|
3. Click "Clear site data"
|
|
4. See update notification
|
|
|
|
Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/browser/client.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/browser/client.ts
|
|
@@ -1,10 +1,16 @@
|
|
import { Disposable } from 'vs/base/common/lifecycle';
|
|
import { localize } from 'vs/nls';
|
|
+import { ILogService } from 'vs/platform/log/common/log';
|
|
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
|
|
+import { IProductService } from 'vs/platform/product/common/productService';
|
|
+import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
|
|
|
export class CodeServerClient extends Disposable {
|
|
constructor (
|
|
+ @ILogService private logService: ILogService,
|
|
@INotificationService private notificationService: INotificationService,
|
|
+ @IProductService private productService: IProductService,
|
|
+ @IStorageService private storageService: IStorageService,
|
|
) {
|
|
super();
|
|
}
|
|
@@ -71,5 +77,59 @@ export class CodeServerClient extends Di
|
|
},
|
|
});
|
|
}
|
|
+
|
|
+ if (this.productService.updateEndpoint) {
|
|
+ this.checkUpdates(this.productService.updateEndpoint)
|
|
+ }
|
|
+ }
|
|
+
|
|
+ private checkUpdates(updateEndpoint: string) {
|
|
+ const getUpdate = async (updateCheckEndpoint: string): Promise<void> => {
|
|
+ this.logService.debug('Checking for update...');
|
|
+
|
|
+ const response = await fetch(updateCheckEndpoint, {
|
|
+ headers: { Accept: 'application/json' },
|
|
+ });
|
|
+ if (!response.ok) {
|
|
+ throw new Error(response.statusText);
|
|
+ }
|
|
+ const json = await response.json();
|
|
+ if (json.error) {
|
|
+ throw new Error(json.error);
|
|
+ }
|
|
+ if (json.isLatest) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ const lastNoti = this.storageService.getNumber('csLastUpdateNotification', StorageScope.APPLICATION);
|
|
+ if (lastNoti) {
|
|
+ // Only remind them again after 1 week.
|
|
+ const timeout = 1000 * 60 * 60 * 24 * 7;
|
|
+ const threshold = lastNoti + timeout;
|
|
+ if (Date.now() < threshold) {
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ this.storageService.store('csLastUpdateNotification', Date.now(), StorageScope.APPLICATION, StorageTarget.MACHINE);
|
|
+
|
|
+ this.notificationService.notify({
|
|
+ severity: Severity.Info,
|
|
+ message: `[code-server v${json.latest}](https://github.com/cdr/code-server/releases/tag/v${json.latest}) has been released!`,
|
|
+ });
|
|
+ };
|
|
+
|
|
+ const updateLoop = (): void => {
|
|
+ getUpdate(updateEndpoint)
|
|
+ .catch(error => {
|
|
+ this.logService.debug(`failed to check for update: ${error}`);
|
|
+ })
|
|
+ .finally(() => {
|
|
+ // Check again every 6 hours.
|
|
+ setTimeout(updateLoop, 1000 * 60 * 60 * 6);
|
|
+ });
|
|
+ };
|
|
+
|
|
+ updateLoop();
|
|
}
|
|
}
|
|
Index: code-server/lib/vscode/src/vs/base/common/product.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/base/common/product.ts
|
|
+++ code-server/lib/vscode/src/vs/base/common/product.ts
|
|
@@ -57,6 +57,7 @@ export type ExtensionVirtualWorkspaceSup
|
|
export interface IProductConfiguration {
|
|
readonly codeServerVersion?: string
|
|
readonly rootEndpoint?: string
|
|
+ readonly updateEndpoint?: string
|
|
|
|
readonly version: string;
|
|
readonly date?: string;
|
|
Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
@@ -310,6 +310,7 @@ export class WebClientServer {
|
|
const productConfiguration = {
|
|
codeServerVersion: this._productService.codeServerVersion,
|
|
rootEndpoint: base,
|
|
+ updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
|
|
embedderIdentifier: 'server-distro',
|
|
extensionsGallery: this._productService.extensionsGallery,
|
|
} satisfies Partial<IProductConfiguration>;
|
|
Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|
+++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|
@@ -13,6 +13,8 @@ import { memoize } from 'vs/base/common/
|
|
import { URI } from 'vs/base/common/uri';
|
|
|
|
export const serverOptions: OptionDescriptions<Required<ServerParsedArgs>> = {
|
|
+ /* ----- code-server ----- */
|
|
+ 'disable-update-check': { type: 'boolean' },
|
|
|
|
/* ----- server setup ----- */
|
|
|
|
@@ -93,6 +95,8 @@ export const serverOptions: OptionDescri
|
|
};
|
|
|
|
export interface ServerParsedArgs {
|
|
+ /* ----- code-server ----- */
|
|
+ 'disable-update-check'?: boolean;
|
|
|
|
/* ----- server setup ----- */
|
|
|