From 5217737d9f2ef8e230698ee207b7444597069468 Mon Sep 17 00:00:00 2001
From: Asher <ash@coder.com>
Date: Thu, 31 Oct 2024 11:49:03 -0800
Subject: [PATCH 1/6] Update VS Code to 1.95

---
 CHANGELOG.md                       |   6 ++
 lib/vscode                         |   2 +-
 patches/base-path.diff             | 126 +++++++----------------------
 patches/clipboard.diff             |   8 +-
 patches/display-language.diff      |  10 +--
 patches/external-file-actions.diff |   2 +-
 patches/getting-started.diff       |   6 +-
 patches/integration.diff           |  67 +++++++++++----
 patches/local-storage.diff         |   2 +-
 patches/logout.diff                |   2 +-
 patches/marketplace.diff           |   4 +-
 patches/proxy-uri.diff             |   4 +-
 patches/service-worker.diff        |   2 +-
 patches/sourcemaps.diff            |   8 +-
 patches/store-socket.diff          |   6 +-
 patches/telemetry.diff             |   2 +-
 patches/update-check.diff          |   2 +-
 patches/webview.diff               |  12 +--
 18 files changed, 119 insertions(+), 152 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 02d3b4e9facb..9daa2c957b33 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -22,6 +22,12 @@ Code v99.99.999
 
 ## Unreleased
 
+Code v1.95.0
+
+### Changed
+
+- Update to Code 1.95.0.
+
 ## [4.93.1](https://github.com/coder/code-server/releases/tag/v4.93.1) - 2024-09-23
 
 Code v1.93.1
diff --git a/lib/vscode b/lib/vscode
index 384ff7382de6..65edc4939843 160000
--- a/lib/vscode
+++ b/lib/vscode
@@ -1 +1 @@
-Subproject commit 384ff7382de624fb94dbaf6da11977bba1ecd427
+Subproject commit 65edc4939843c90c34d61f4ce11704f09d3e5cb6
diff --git a/patches/base-path.diff b/patches/base-path.diff
index dbca6a564149..ba6e054a8fe5 100644
--- a/patches/base-path.diff
+++ b/patches/base-path.diff
@@ -10,7 +10,7 @@ Index: code-server/lib/vscode/src/vs/base/common/network.ts
 ===================================================================
 --- code-server.orig/lib/vscode/src/vs/base/common/network.ts
 +++ code-server/lib/vscode/src/vs/base/common/network.ts
-@@ -215,7 +215,9 @@ class RemoteAuthoritiesImpl {
+@@ -220,7 +220,9 @@ class RemoteAuthoritiesImpl {
  		return URI.from({
  			scheme: platform.isWeb ? this._preferredWebSchema : Schemas.vscodeRemoteResource,
  			authority: `${host}:${port}`,
@@ -46,18 +46,18 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench-dev.html
 +		<link rel="icon" href="{{BASE}}/_static/src/browser/media/favicon-dark-support.svg" />
 +		<link rel="alternate icon" href="{{BASE}}/_static/src/browser/media/favicon.ico" type="image/x-icon" />
 +		<link rel="manifest" href="{{VS_BASE}}/manifest.json" crossorigin="use-credentials" />
- 	</head>
+ 		<style id="vscode-css-modules" type="text/css" media="screen"></style>
  
- 	<body aria-label="">
+ 	</head>
 @@ -39,7 +39,7 @@
- 	<script src="{{WORKBENCH_WEB_BASE_URL}}/out/vs/loader.js"></script>
- 	<script src="{{WORKBENCH_WEB_BASE_URL}}/out/vs/webPackagePaths.js"></script>
+ 
+ 	<!-- Startup (do not modify order of script tags!) -->
  	<script>
 -		const baseUrl = new URL('{{WORKBENCH_WEB_BASE_URL}}', window.location.origin).toString();
 +		const baseUrl = new URL('{{WORKBENCH_WEB_BASE_URL}}', window.location).toString();
- 		Object.keys(self.webPackagePaths).map(function (key, index) {
- 			self.webPackagePaths[key] = `${baseUrl}/remote/web/node_modules/${key}/${self.webPackagePaths[key]}`;
- 		});
+ 		globalThis._VSCODE_FILE_ROOT = baseUrl + '/out/';
+ 	</script>
+ 	<script>
 Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.html
 ===================================================================
 --- code-server.orig/lib/vscode/src/vs/code/browser/workbench/workbench.html
@@ -83,18 +83,18 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.html
 +		<link rel="icon" href="{{BASE}}/_static/src/browser/media/favicon-dark-support.svg" />
 +		<link rel="alternate icon" href="{{BASE}}/_static/src/browser/media/favicon.ico" type="image/x-icon" />
 +		<link rel="manifest" href="{{VS_BASE}}/manifest.json" crossorigin="use-credentials" />
- 		<link data-name="vs/workbench/workbench.web.main" rel="stylesheet" href="{{WORKBENCH_WEB_BASE_URL}}/out/vs/workbench/workbench.web.main.css">
+ 		<link rel="stylesheet" href="{{WORKBENCH_WEB_BASE_URL}}/out/vs/code/browser/workbench/workbench.css">
  
  	</head>
-@@ -40,7 +40,7 @@
- 	<script>
+@@ -36,7 +36,7 @@
  
- 		// Packages
+ 	<!-- Startup (do not modify order of script tags!) -->
+ 	<script>
 -		const baseUrl = new URL('{{WORKBENCH_WEB_BASE_URL}}', window.location.origin).toString();
 +		const baseUrl = new URL('{{WORKBENCH_WEB_BASE_URL}}', window.location).toString();
- 		Object.keys(self.webPackagePaths).map(function (key, index) {
- 			self.webPackagePaths[key] = `${baseUrl}/node_modules/${key}/${self.webPackagePaths[key]}`;
- 		});
+ 		globalThis._VSCODE_FILE_ROOT = baseUrl + '/out/';
+ 	</script>
+ 	<script>
 Index: code-server/lib/vscode/src/vs/platform/remote/browser/browserSocketFactory.ts
 ===================================================================
 --- code-server.orig/lib/vscode/src/vs/platform/remote/browser/browserSocketFactory.ts
@@ -111,7 +111,7 @@ 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
-@@ -272,16 +272,15 @@ export class WebClientServer {
+@@ -271,16 +271,15 @@ export class WebClientServer {
  			return void res.end();
  		}
  
@@ -133,7 +133,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
  		);
  		if (!remoteAuthority) {
  			return serveError(req, res, 400, `Bad request.`);
-@@ -308,8 +307,12 @@ export class WebClientServer {
+@@ -307,8 +306,12 @@ export class WebClientServer {
  			scopes: [['user:email'], ['repo']]
  		} : undefined;
  
@@ -146,7 +146,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
  			embedderIdentifier: 'server-distro',
  			extensionsGallery: this._webExtensionResourceUrlTemplate && this._productService.extensionsGallery ? {
  				...this._productService.extensionsGallery,
-@@ -338,7 +341,7 @@ export class WebClientServer {
+@@ -337,7 +340,7 @@ export class WebClientServer {
  			folderUri: resolveWorkspaceURI(this._environmentService.args['default-folder']),
  			workspaceUri: resolveWorkspaceURI(this._environmentService.args['default-workspace']),
  			productConfiguration,
@@ -155,7 +155,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
  		};
  
  		const cookies = cookie.parse(req.headers.cookie || '');
-@@ -355,9 +358,11 @@ export class WebClientServer {
+@@ -354,9 +357,11 @@ export class WebClientServer {
  		const values: { [key: string]: string } = {
  			WORKBENCH_WEB_CONFIGURATION: asJSON(workbenchWebConfiguration),
  			WORKBENCH_AUTH_SESSION: authSessionInfo ? asJSON(authSessionInfo) : '',
@@ -169,18 +169,16 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
  		};
  
  		// DEV ---------------------------------------------------------------------------------------
-@@ -395,8 +400,8 @@ export class WebClientServer {
+@@ -393,7 +398,7 @@ export class WebClientServer {
+ 			'default-src \'self\';',
  			'img-src \'self\' https: data: blob:;',
  			'media-src \'self\';',
- 			isESM ?
--				`script-src 'self' 'unsafe-eval' ${WORKBENCH_NLS_BASE_URL ?? ''} blob: 'nonce-1nline-m4p' ${this._getScriptCspHashes(data).join(' ')} '${webWorkerExtensionHostIframeScriptSHA}' 'sha256-/r7rqQ+yrxt57sxLuQ6AMYcy/lUpvAIzHjIJt/OeLWU=' ${useTestResolver ? '' : `http://${remoteAuthority}`};` : // the sha is the same as in src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.esm.html
--				`script-src 'self' 'unsafe-eval' ${WORKBENCH_NLS_BASE_URL ?? ''} ${this._getScriptCspHashes(data).join(' ')} '${webWorkerExtensionHostIframeScriptSHA}' ${useTestResolver ? '' : `http://${remoteAuthority}`};`, // the sha is the same as in src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html
-+				`script-src 'self' 'unsafe-eval' ${WORKBENCH_NLS_BASE_URL ?? ''} blob: 'nonce-1nline-m4p' ${this._getScriptCspHashes(data).join(' ')} '${webWorkerExtensionHostIframeScriptSHA}' 'sha256-/r7rqQ+yrxt57sxLuQ6AMYcy/lUpvAIzHjIJt/OeLWU=' ${useTestResolver ? '' : ``};` : // the sha is the same as in src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.esm.html
-+				`script-src 'self' 'unsafe-eval' ${WORKBENCH_NLS_BASE_URL ?? ''} ${this._getScriptCspHashes(data).join(' ')} '${webWorkerExtensionHostIframeScriptSHA}' ${useTestResolver ? '' : ``};`, // the sha is the same as in src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html
+-			`script-src 'self' 'unsafe-eval' ${WORKBENCH_NLS_BASE_URL ?? ''} blob: 'nonce-1nline-m4p' ${this._getScriptCspHashes(data).join(' ')} '${webWorkerExtensionHostIframeScriptSHA}' 'sha256-/r7rqQ+yrxt57sxLuQ6AMYcy/lUpvAIzHjIJt/OeLWU=' ${useTestResolver ? '' : `http://${remoteAuthority}`};`,  // the sha is the same as in src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html
++			`script-src 'self' 'unsafe-eval' ${WORKBENCH_NLS_BASE_URL ?? ''} blob: 'nonce-1nline-m4p' ${this._getScriptCspHashes(data).join(' ')} '${webWorkerExtensionHostIframeScriptSHA}' 'sha256-/r7rqQ+yrxt57sxLuQ6AMYcy/lUpvAIzHjIJt/OeLWU=' ${useTestResolver ? '' : ``};`,  // the sha is the same as in src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html
  			'child-src \'self\';',
  			`frame-src 'self' https://*.vscode-cdn.net data:;`,
  			'worker-src \'self\' data: blob:;',
-@@ -469,3 +474,70 @@ export class WebClientServer {
+@@ -466,3 +471,70 @@ export class WebClientServer {
  		return void res.end(data);
  	}
  }
@@ -267,7 +265,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts
 ===================================================================
 --- code-server.orig/lib/vscode/src/vs/code/browser/workbench/workbench.ts
 +++ code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts
-@@ -304,7 +304,8 @@ class LocalStorageURLCallbackProvider ex
+@@ -317,7 +317,8 @@ class LocalStorageURLCallbackProvider ex
  			this.startListening();
  		}
  
@@ -277,7 +275,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts
  	}
  
  	private startListening(): void {
-@@ -550,17 +551,6 @@ class WorkspaceProvider implements IWork
+@@ -563,17 +564,6 @@ class WorkspaceProvider implements IWork
  	}
  }
  
@@ -295,7 +293,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts
  (function () {
  
  	// Find config by checking for DOM
-@@ -569,8 +559,8 @@ function readCookie(name: string): strin
+@@ -582,8 +572,8 @@ function readCookie(name: string): strin
  	if (!configElement || !configElementAttribute) {
  		throw new Error('Missing web configuration element');
  	}
@@ -319,73 +317,3 @@ Index: code-server/lib/vscode/src/vs/platform/extensionResourceLoader/common/ext
  		}
  		return undefined;
  	}
-Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench-dev.esm.html
-===================================================================
---- code-server.orig/lib/vscode/src/vs/code/browser/workbench/workbench-dev.esm.html
-+++ code-server/lib/vscode/src/vs/code/browser/workbench/workbench-dev.esm.html
-@@ -11,7 +11,8 @@
- 		<meta name="mobile-web-app-capable" content="yes" />
- 		<meta name="apple-mobile-web-app-capable" content="yes" />
- 		<meta name="apple-mobile-web-app-title" content="Code">
--		<link rel="apple-touch-icon" href="{{WORKBENCH_WEB_BASE_URL}}/resources/server/code-192.png" />
-+		<link rel="apple-touch-icon" sizes="192x192" href="{{BASE}}/_static/src/browser/media/pwa-icon-192.png" />
-+		<link rel="apple-touch-icon" sizes="512x512" href="{{BASE}}/_static/src/browser/media/pwa-icon-512.png" />
- 
- 		<!-- Disable pinch zooming -->
- 		<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
-@@ -26,8 +27,9 @@
- 		<meta id="vscode-workbench-builtin-extensions" data-settings="{{WORKBENCH_BUILTIN_EXTENSIONS}}">
- 
- 		<!-- Workbench Icon/Manifest/CSS -->
--		<link rel="icon" href="{{WORKBENCH_WEB_BASE_URL}}/resources/server/favicon.ico" type="image/x-icon" />
--		<link rel="manifest" href="{{WORKBENCH_WEB_BASE_URL}}/resources/server/manifest.json" crossorigin="use-credentials" />
-+		<link rel="icon" href="{{BASE}}/_static/src/browser/media/favicon-dark-support.svg" />
-+		<link rel="alternate icon" href="{{BASE}}/_static/src/browser/media/favicon.ico" type="image/x-icon" />
-+		<link rel="manifest" href="{{VS_BASE}}/manifest.json" crossorigin="use-credentials" />
- 		<style id="vscode-css-modules" type="text/css" media="screen"></style>
- 
- 	</head>
-@@ -37,7 +39,7 @@
- 
- 	<!-- Startup (do not modify order of script tags!) -->
- 	<script>
--		const baseUrl = new URL('{{WORKBENCH_WEB_BASE_URL}}', window.location.origin).toString();
-+		const baseUrl = new URL('{{WORKBENCH_WEB_BASE_URL}}', window.location).toString();
- 		globalThis._VSCODE_FILE_ROOT = baseUrl + '/out/';
- 	</script>
- 	<script>
-Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.esm.html
-===================================================================
---- code-server.orig/lib/vscode/src/vs/code/browser/workbench/workbench.esm.html
-+++ code-server/lib/vscode/src/vs/code/browser/workbench/workbench.esm.html
-@@ -11,7 +11,8 @@
- 		<meta name="mobile-web-app-capable" content="yes" />
- 		<meta name="apple-mobile-web-app-capable" content="yes" />
- 		<meta name="apple-mobile-web-app-title" content="Code">
--		<link rel="apple-touch-icon" href="{{WORKBENCH_WEB_BASE_URL}}/resources/server/code-192.png" />
-+		<link rel="apple-touch-icon" sizes="192x192" href="{{BASE}}/_static/src/browser/media/pwa-icon-192.png" />
-+		<link rel="apple-touch-icon" sizes="512x512" href="{{BASE}}/_static/src/browser/media/pwa-icon-512.png" />
- 
- 		<!-- Disable pinch zooming -->
- 		<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
-@@ -23,8 +24,9 @@
- 		<meta id="vscode-workbench-auth-session" data-settings="{{WORKBENCH_AUTH_SESSION}}">
- 
- 		<!-- Workbench Icon/Manifest/CSS -->
--		<link rel="icon" href="{{WORKBENCH_WEB_BASE_URL}}/resources/server/favicon.ico" type="image/x-icon" />
--		<link rel="manifest" href="{{WORKBENCH_WEB_BASE_URL}}/resources/server/manifest.json" crossorigin="use-credentials" />
-+		<link rel="icon" href="{{BASE}}/_static/src/browser/media/favicon-dark-support.svg" />
-+		<link rel="alternate icon" href="{{BASE}}/_static/src/browser/media/favicon.ico" type="image/x-icon" />
-+		<link rel="manifest" href="{{VS_BASE}}/manifest.json" crossorigin="use-credentials" />
- 		<link rel="stylesheet" href="{{WORKBENCH_WEB_BASE_URL}}/out/vs/code/browser/workbench/workbench.css">
- 
- 	</head>
-@@ -34,7 +36,7 @@
- 
- 	<!-- Startup (do not modify order of script tags!) -->
- 	<script>
--		const baseUrl = new URL('{{WORKBENCH_WEB_BASE_URL}}', window.location.origin).toString();
-+		const baseUrl = new URL('{{WORKBENCH_WEB_BASE_URL}}', window.location).toString();
- 		globalThis._VSCODE_FILE_ROOT = baseUrl + '/out/';
- 	</script>
- 	<script>
diff --git a/patches/clipboard.diff b/patches/clipboard.diff
index 921f2c3aa951..a7a0a4c0fc14 100644
--- a/patches/clipboard.diff
+++ b/patches/clipboard.diff
@@ -10,8 +10,8 @@ Index: code-server/lib/vscode/src/vs/workbench/api/browser/mainThreadCLICommands
  import { CommandsRegistry, ICommandService } from '../../../platform/commands/common/commands.js';
  import { IExtensionGalleryService, IExtensionManagementService } from '../../../platform/extensionManagement/common/extensionManagement.js';
  import { ExtensionManagementCLI } from '../../../platform/extensionManagement/common/extensionManagementCLI.js';
-@@ -89,6 +90,11 @@ CommandsRegistry.registerCommand('_remot
- 	return lines.join('\n');
+@@ -95,6 +96,11 @@ CommandsRegistry.registerCommand('_remot
+ 
  });
  
 +CommandsRegistry.registerCommand('_remoteCLI.setClipboard', function (accessor: ServicesAccessor, content: string) {
@@ -102,7 +102,7 @@ Index: code-server/lib/vscode/src/vs/server/node/server.cli.ts
 ===================================================================
 --- code-server.orig/lib/vscode/src/vs/server/node/server.cli.ts
 +++ code-server/lib/vscode/src/vs/server/node/server.cli.ts
-@@ -75,6 +75,7 @@ const isSupportedForPipe = (optionId: ke
+@@ -76,6 +76,7 @@ const isSupportedForPipe = (optionId: ke
  		case 'verbose':
  		case 'remote':
  		case 'locate-shell-integration-path':
@@ -110,7 +110,7 @@ Index: code-server/lib/vscode/src/vs/server/node/server.cli.ts
  			return true;
  		default:
  			return false;
-@@ -292,6 +293,23 @@ export async function main(desc: Product
+@@ -293,6 +294,23 @@ export async function main(desc: Product
  			}
  		}
  	} else {
diff --git a/patches/display-language.diff b/patches/display-language.diff
index 9f541bc963b6..03ecfb6f04eb 100644
--- a/patches/display-language.diff
+++ b/patches/display-language.diff
@@ -160,8 +160,8 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
 +import { getLocaleFromConfig, getBrowserNLSConfiguration } from './remoteLanguagePacks.js';
  import { CharCode } from '../../base/common/charCode.js';
  import { IExtensionManifest } from '../../platform/extensions/common/extensions.js';
- import { isESM } from '../../base/common/amd.js';
-@@ -99,6 +100,7 @@ export class WebClientServer {
+ import { ICSSDevelopmentService } from '../../platform/cssDev/node/cssDevService.js';
+@@ -98,6 +99,7 @@ export class WebClientServer {
  	private readonly _webExtensionResourceUrlTemplate: URI | undefined;
  
  	private readonly _staticRoute: string;
@@ -169,7 +169,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
  	private readonly _callbackRoute: string;
  	private readonly _webExtensionRoute: string;
  
-@@ -114,6 +116,7 @@ export class WebClientServer {
+@@ -113,6 +115,7 @@ export class WebClientServer {
  	) {
  		this._webExtensionResourceUrlTemplate = this._productService.extensionsGallery?.resourceUrlTemplate ? URI.parse(this._productService.extensionsGallery.resourceUrlTemplate) : undefined;
  
@@ -177,7 +177,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
  		this._staticRoute = `${serverRootPath}/static`;
  		this._callbackRoute = `${serverRootPath}/callback`;
  		this._webExtensionRoute = `/web-extension-resource`;
-@@ -352,14 +355,22 @@ export class WebClientServer {
+@@ -351,14 +354,22 @@ export class WebClientServer {
  		};
  
  		const cookies = cookie.parse(req.headers.cookie || '');
@@ -355,7 +355,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js
 ===================================================================
 --- code-server.orig/lib/vscode/build/gulpfile.reh.js
 +++ code-server/lib/vscode/build/gulpfile.reh.js
-@@ -59,6 +59,7 @@ const serverResourceIncludes = [
+@@ -58,6 +58,7 @@ const serverResourceIncludes = [
  
  	// NLS
  	'out-build/nls.messages.json',
diff --git a/patches/external-file-actions.diff b/patches/external-file-actions.diff
index bb78042eedcf..aff613da8f3a 100644
--- a/patches/external-file-actions.diff
+++ b/patches/external-file-actions.diff
@@ -112,7 +112,7 @@ 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
-@@ -336,6 +336,8 @@ export class WebClientServer {
+@@ -335,6 +335,8 @@ export class WebClientServer {
  			serverBasePath: this._basePath,
  			webviewEndpoint: vscodeBase + this._staticRoute + '/out/vs/workbench/contrib/webview/browser/pre',
  			userDataPath: this._environmentService.userDataPath,
diff --git a/patches/getting-started.diff b/patches/getting-started.diff
index abf5aeecf10d..0e6513c44532 100644
--- a/patches/getting-started.diff
+++ b/patches/getting-started.diff
@@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro
  import { IEditorOpenContext, IEditorSerializer } from '../../../common/editor.js';
  import { IWebviewElement, IWebviewService } from '../../webview/browser/webview.js';
  import './gettingStartedColors.js';
-@@ -820,6 +820,72 @@ export class GettingStartedPage extends
+@@ -826,6 +826,72 @@ export class GettingStartedPage extends
  			$('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved"))
  		);
  
@@ -101,7 +101,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro
  		const leftColumn = $('.categories-column.categories-column-left', {},);
  		const rightColumn = $('.categories-column.categories-column-right', {},);
  
-@@ -855,6 +921,9 @@ export class GettingStartedPage extends
+@@ -861,6 +927,9 @@ export class GettingStartedPage extends
  				recentList.setLimit(5);
  				reset(leftColumn, startList.getDomElement(), recentList.getDomElement());
  			}
@@ -201,7 +201,7 @@ 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
-@@ -340,6 +340,7 @@ export class WebClientServer {
+@@ -339,6 +339,7 @@ export class WebClientServer {
  			userDataPath: this._environmentService.userDataPath,
  			isEnabledFileDownloads: !this._environmentService.args['disable-file-downloads'],
  			isEnabledFileUploads: !this._environmentService.args['disable-file-uploads'],
diff --git a/patches/integration.diff b/patches/integration.diff
index f687f62c0841..4428faa050ed 100644
--- a/patches/integration.diff
+++ b/patches/integration.diff
@@ -3,11 +3,13 @@ Prepare Code for integration with code-server
 1. We already have the arguments so allow passing them in.  There is also a
    slight change in a few directories to preserve the directory structure we
    have been using and to not override passed-in arguments.
-2. Modify the terminal environment to filter out code-server environment variables.
-3. Add the code-server version to the help dialog.
-4. Add ready events for use in an iframe.
-5. Add our icons.
-6. Use our own manifest.
+2. Modify the entry point to allow importing the code, instead of just running
+   the server immediately.
+3. Modify the terminal environment to filter out code-server environment variables.
+4. Add the code-server version to the help dialog.
+5. Add ready events for use in an iframe.
+6. Add our icons and remove the existing ones.
+7. Use our own manifest.
 
 Index: code-server/lib/vscode/src/vs/server/node/server.main.ts
 ===================================================================
@@ -221,19 +223,18 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench-dev.html
  
  		<!-- Disable pinch zooming -->
  		<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
-@@ -26,9 +27,9 @@
+@@ -26,8 +27,9 @@
  		<meta id="vscode-workbench-builtin-extensions" data-settings="{{WORKBENCH_BUILTIN_EXTENSIONS}}">
  
  		<!-- Workbench Icon/Manifest/CSS -->
 -		<link rel="icon" href="{{WORKBENCH_WEB_BASE_URL}}/resources/server/favicon.ico" type="image/x-icon" />
 -		<link rel="manifest" href="{{WORKBENCH_WEB_BASE_URL}}/resources/server/manifest.json" crossorigin="use-credentials" />
--
 +		<link rel="icon" href="/_static/src/browser/media/favicon-dark-support.svg" />
 +		<link rel="alternate icon" href="/_static/src/browser/media/favicon.ico" type="image/x-icon" />
 +		<link rel="manifest" href="/manifest.json" crossorigin="use-credentials" />
- 	</head>
+ 		<style id="vscode-css-modules" type="text/css" media="screen"></style>
  
- 	<body aria-label="">
+ 	</head>
 Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.html
 ===================================================================
 --- code-server.orig/lib/vscode/src/vs/code/browser/workbench/workbench.html
@@ -257,14 +258,14 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.html
 +		<link rel="icon" href="/_static/src/browser/media/favicon-dark-support.svg" />
 +		<link rel="alternate icon" href="/_static/src/browser/media/favicon.ico" type="image/x-icon" />
 +		<link rel="manifest" href="/manifest.json" crossorigin="use-credentials" />
- 		<link data-name="vs/workbench/workbench.web.main" rel="stylesheet" href="{{WORKBENCH_WEB_BASE_URL}}/out/vs/workbench/workbench.web.main.css">
+ 		<link rel="stylesheet" href="{{WORKBENCH_WEB_BASE_URL}}/out/vs/code/browser/workbench/workbench.css">
  
  	</head>
 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
-@@ -309,6 +309,7 @@ export class WebClientServer {
+@@ -308,6 +308,7 @@ export class WebClientServer {
  		} : undefined;
  
  		const productConfiguration = {
@@ -272,17 +273,49 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
  			embedderIdentifier: 'server-distro',
  			extensionsGallery: this._webExtensionResourceUrlTemplate && this._productService.extensionsGallery ? {
  				...this._productService.extensionsGallery,
-Index: code-server/lib/vscode/src/server-main.js
+Index: code-server/lib/vscode/src/server-main.ts
 ===================================================================
---- code-server.orig/lib/vscode/src/server-main.js
-+++ code-server/lib/vscode/src/server-main.js
-@@ -339,4 +339,15 @@ function prompt(question) {
+--- code-server.orig/lib/vscode/src/server-main.ts
++++ code-server/lib/vscode/src/server-main.ts
+@@ -25,6 +25,9 @@ const __dirname = path.dirname(fileURLTo
+ perf.mark('code/server/start');
+ (globalThis as any).vscodeServerStartTime = performance.now();
+ 
++// This is not indented to make the diff less noisy.  We need to move this out
++// of the top-level so it will not run immediately and we can control the start.
++async function start() {
+ // Do a quick parse to determine if a server or the cli needs to be started
+ const parsedArgs = minimist(process.argv.slice(2), {
+ 	boolean: ['start-server', 'list-extensions', 'print-ip-address', 'help', 'version', 'accept-server-license-terms', 'update-extensions'],
+@@ -153,6 +156,7 @@ if (shouldSpawnCli) {
+ 		}
  	});
  }
++}
+ 
+ function sanitizeStringArg(val: any): string | undefined {
+ 	if (Array.isArray(val)) { // if an argument is passed multiple times, minimist creates an array
+@@ -228,7 +232,6 @@ async function findFreePort(host: string
+ }
  
--start();
+ async function loadCode(nlsConfiguration: INLSConfiguration) {
+-
+ 	// required for `bootstrap-esm` to pick up NLS messages
+ 	process.env['VSCODE_NLS_CONFIG'] = JSON.stringify(nlsConfiguration);
+ 
+@@ -283,3 +286,22 @@ function prompt(question: string): Promi
+ 		});
+ 	});
+ }
++
 +async function loadCodeWithNls() {
-+	const nlsConfiguration = await resolveNLSConfiguration({ userLocale: 'en', osLocale: 'en', commit: product.commit, userDataPath: '', nlsMetadataPath: __dirname });
++	const nlsConfiguration = await resolveNLSConfiguration({
++		userLocale: 'en',
++		osLocale: 'en',
++		commit: product.commit,
++		userDataPath: '',
++		nlsMetadataPath: __dirname,
++	});
 +	return loadCode(nlsConfiguration);
 +}
 +
diff --git a/patches/local-storage.diff b/patches/local-storage.diff
index a051dee29d3e..3e187b5ffb94 100644
--- a/patches/local-storage.diff
+++ b/patches/local-storage.diff
@@ -18,7 +18,7 @@ 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
-@@ -331,6 +331,7 @@ export class WebClientServer {
+@@ -330,6 +330,7 @@ export class WebClientServer {
  			remoteAuthority,
  			serverBasePath: this._basePath,
  			webviewEndpoint: vscodeBase + this._staticRoute + '/out/vs/workbench/contrib/webview/browser/pre',
diff --git a/patches/logout.diff b/patches/logout.diff
index 53a0ae0b3a70..32f4ecaf5de0 100644
--- a/patches/logout.diff
+++ b/patches/logout.diff
@@ -40,7 +40,7 @@ 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
-@@ -314,6 +314,7 @@ export class WebClientServer {
+@@ -313,6 +313,7 @@ export class WebClientServer {
  			codeServerVersion: this._productService.codeServerVersion,
  			rootEndpoint: base,
  			updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
diff --git a/patches/marketplace.diff b/patches/marketplace.diff
index cc746add2b95..ccc809dbdc5d 100644
--- a/patches/marketplace.diff
+++ b/patches/marketplace.diff
@@ -40,7 +40,7 @@ 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
-@@ -116,7 +116,7 @@ export class WebClientServer {
+@@ -115,7 +115,7 @@ export class WebClientServer {
  
  		this._staticRoute = `${serverRootPath}/static`;
  		this._callbackRoute = `${serverRootPath}/callback`;
@@ -49,7 +49,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
  	}
  
  	/**
-@@ -314,14 +314,7 @@ export class WebClientServer {
+@@ -313,14 +313,7 @@ export class WebClientServer {
  			codeServerVersion: this._productService.codeServerVersion,
  			rootEndpoint: base,
  			embedderIdentifier: 'server-distro',
diff --git a/patches/proxy-uri.diff b/patches/proxy-uri.diff
index d80f1eb4ae07..2d2e014e3cf8 100644
--- a/patches/proxy-uri.diff
+++ b/patches/proxy-uri.diff
@@ -71,7 +71,7 @@ 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
-@@ -315,6 +315,7 @@ export class WebClientServer {
+@@ -314,6 +314,7 @@ export class WebClientServer {
  			rootEndpoint: base,
  			updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
  			logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? base + '/logout' : undefined,
@@ -104,7 +104,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts
  import type { IURLCallbackProvider } from '../../../workbench/services/url/browser/urlService.js';
  import { create } from '../../../workbench/workbench.web.main.internal.js';
  
-@@ -571,6 +572,39 @@ class WorkspaceProvider implements IWork
+@@ -584,6 +585,39 @@ class WorkspaceProvider implements IWork
  		settingsSyncOptions: config.settingsSyncOptions ? { enabled: config.settingsSyncOptions.enabled, } : undefined,
  		workspaceProvider: WorkspaceProvider.create(config),
  		urlCallbackProvider: new LocalStorageURLCallbackProvider(config.callbackRoute),
diff --git a/patches/service-worker.diff b/patches/service-worker.diff
index 9421774fd7eb..3adf246fbf30 100644
--- a/patches/service-worker.diff
+++ b/patches/service-worker.diff
@@ -54,7 +54,7 @@ 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
-@@ -316,6 +316,10 @@ export class WebClientServer {
+@@ -315,6 +315,10 @@ export class WebClientServer {
  			updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
  			logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? base + '/logout' : undefined,
  			proxyEndpointTemplate: process.env.VSCODE_PROXY_URI ?? base + '/proxy/{{port}}/',
diff --git a/patches/sourcemaps.diff b/patches/sourcemaps.diff
index 29884d2fa2f3..18792a317e51 100644
--- a/patches/sourcemaps.diff
+++ b/patches/sourcemaps.diff
@@ -10,7 +10,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js
 ===================================================================
 --- code-server.orig/lib/vscode/build/gulpfile.reh.js
 +++ code-server/lib/vscode/build/gulpfile.reh.js
-@@ -289,8 +289,7 @@ function packageTask(type, platform, arc
+@@ -253,8 +253,7 @@ function packageTask(type, platform, arc
  
  		const src = gulp.src(sourceFolderName + '/**', { base: '.' })
  			.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); }))
@@ -20,7 +20,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js
  
  		const workspaceExtensionPoints = ['debuggers', 'jsonValidation'];
  		const isUIExtension = (manifest) => {
-@@ -329,9 +328,9 @@ function packageTask(type, platform, arc
+@@ -293,9 +292,9 @@ function packageTask(type, platform, arc
  			.map(name => `.build/extensions/${name}/**`);
  
  		const extensions = gulp.src(extensionPaths, { base: '.build', dot: true });
@@ -32,9 +32,9 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js
  
  		let version = packageJson.version;
  		const quality = product.quality;
-@@ -505,7 +504,7 @@ function tweakProductForServerWeb(produc
+@@ -454,7 +453,7 @@ function tweakProductForServerWeb(produc
  	const minifyTask = task.define(`minify-vscode-${type}`, task.series(
- 		optimizeTask,
+ 		bundleTask,
  		util.rimraf(`out-vscode-${type}-min`),
 -		optimize.minifyTask(`out-vscode-${type}`, `https://main.vscode-cdn.net/sourcemaps/${commit}/core`)
 +		optimize.minifyTask(`out-vscode-${type}`, ``)
diff --git a/patches/store-socket.diff b/patches/store-socket.diff
index bb5e0dd4153f..ce173be3283e 100644
--- a/patches/store-socket.diff
+++ b/patches/store-socket.diff
@@ -29,9 +29,9 @@ Index: code-server/lib/vscode/src/vs/workbench/api/node/extHostExtensionService.
  import { ExtHostConsoleForwarder } from './extHostConsoleForwarder.js';
 +import { IExtHostWorkspace } from '../common/extHostWorkspace.js';
  import { ExtHostDiskFileSystemProvider } from './extHostDiskFileSystemProvider.js';
- // ESM-uncomment-begin
  import { createRequire } from 'node:module';
-@@ -101,6 +103,52 @@ export class ExtHostExtensionService ext
+ const require = createRequire(import.meta.url);
+@@ -97,6 +99,52 @@ export class ExtHostExtensionService ext
  		await interceptor.install();
  		performance.mark('code/extHost/didInitAPI');
  
@@ -96,7 +96,7 @@ Index: code-server/lib/vscode/src/vs/workbench/api/node/extensionHostProcess.ts
  import minimist from 'minimist';
  import * as nativeWatchdog from 'native-watchdog';
  import * as net from 'net';
-@@ -424,7 +425,28 @@ async function startExtensionHostProcess
+@@ -422,7 +423,28 @@ async function startExtensionHostProcess
  	);
  
  	// rewrite onTerminate-function to be a proper shutdown
diff --git a/patches/telemetry.diff b/patches/telemetry.diff
index b840476b4593..e72fade53587 100644
--- a/patches/telemetry.diff
+++ b/patches/telemetry.diff
@@ -134,7 +134,7 @@ 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
-@@ -320,6 +320,8 @@ export class WebClientServer {
+@@ -319,6 +319,8 @@ export class WebClientServer {
  				scope: vscodeBase + '/',
  				path: base + '/_static/out/browser/serviceWorker.js',
  			},
diff --git a/patches/update-check.diff b/patches/update-check.diff
index c621cb7414ce..91dbca114738 100644
--- a/patches/update-check.diff
+++ b/patches/update-check.diff
@@ -105,7 +105,7 @@ 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
-@@ -313,6 +313,7 @@ export class WebClientServer {
+@@ -312,6 +312,7 @@ export class WebClientServer {
  		const productConfiguration = {
  			codeServerVersion: this._productService.codeServerVersion,
  			rootEndpoint: base,
diff --git a/patches/webview.diff b/patches/webview.diff
index 05a881d1a1e8..a85f1ea63da2 100644
--- a/patches/webview.diff
+++ b/patches/webview.diff
@@ -54,7 +54,7 @@ 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
-@@ -327,6 +327,7 @@ export class WebClientServer {
+@@ -326,6 +326,7 @@ export class WebClientServer {
  		const workbenchWebConfiguration = {
  			remoteAuthority,
  			serverBasePath: this._basePath,
@@ -62,12 +62,12 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
  			_wrapWebWorkerExtHostInIframe,
  			developmentOptions: { enableSmokeTestDriver: this._environmentService.args['enable-smoke-test-driver'] ? true : undefined, logLevel: this._logService.getLevel() },
  			settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
-@@ -386,7 +387,7 @@ export class WebClientServer {
+@@ -385,7 +386,7 @@ export class WebClientServer {
  			return void res.end('Not found');
  		}
  
--		const webWorkerExtensionHostIframeScriptSHA = isESM ? 'sha256-2Q+j4hfT09+1+imS46J2YlkCtHWQt0/BE79PXjJ0ZJ8=' : 'sha256-V28GQnL3aYxbwgpV3yW1oJ+VKKe/PBSzWntNyH8zVXA=';
-+		const webWorkerExtensionHostIframeScriptSHA = isESM ? 'sha256-2Q+j4hfT09+1+imS46J2YlkCtHWQt0/BE79PXjJ0ZJ8=' : 'sha256-TMJESLUenkUgTCHw3qQlCngteoHhhRnn81kYP41UnCE=';
+-		const webWorkerExtensionHostIframeScriptSHA = 'sha256-2Q+j4hfT09+1+imS46J2YlkCtHWQt0/BE79PXjJ0ZJ8=';
++		const webWorkerExtensionHostIframeScriptSHA = 'sha256-3Q+j4hfT09+1+imS46J2YlkCtHWQt0/BE79PXjJ0ZJ8=';
  
  		const cspDirectives = [
  			'default-src \'self\';',
@@ -122,8 +122,8 @@ Index: code-server/lib/vscode/src/vs/workbench/services/extensions/worker/webWor
  		<meta http-equiv="Content-Security-Policy" content="
  			default-src 'none';
  			child-src 'self' data: blob:;
--			script-src 'self' 'unsafe-eval' 'sha256-++yLFGtZAMsPOtftkIktNKpSEupSQGmZufZGVEWmSu4=' https: http://localhost:* blob:;
-+			script-src 'self' 'unsafe-eval' 'sha256-4rX2QD6B1/qCqKZwkDoccbNoTT5ydjfFAztSSpcJKt0=' https: http://localhost:* blob:;
+-			script-src 'self' 'unsafe-eval' 'sha256-xM2KVDKIoeb8vVxk4ezEUsxdTZh5wFnKO3YmFhy9tkk=' https: http://localhost:* blob:;
++			script-src 'self' 'unsafe-eval' 'sha256-yM2KVDKIoeb8vVxk4ezEUsxdTZh5wFnKO3YmFhy9tkk=' https: http://localhost:* blob:;
  			connect-src 'self' https: wss: http://localhost:* http://127.0.0.1:* ws://localhost:* ws://127.0.0.1:*;"/>
  	</head>
  	<body>

From 998adb5bd20b3876061b8ce7d7a56b54eada98c9 Mon Sep 17 00:00:00 2001
From: Asher <ash@coder.com>
Date: Thu, 31 Oct 2024 12:04:12 -0800
Subject: [PATCH 2/6] Update Node to 20.18.0

---
 .node-version |  2 +-
 flake.lock    | 17 ++++++++++-------
 flake.nix     |  5 ++++-
 3 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/.node-version b/.node-version
index 8ce7030825b5..2a393af592b8 100644
--- a/.node-version
+++ b/.node-version
@@ -1 +1 @@
-20.16.0
+20.18.0
diff --git a/flake.lock b/flake.lock
index 5c53c61c09f9..a877450fff10 100644
--- a/flake.lock
+++ b/flake.lock
@@ -20,15 +20,18 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1724224976,
-        "narHash": "sha256-Z/ELQhrSd7bMzTO8r7NZgi9g5emh+aRKoCdaAv5fiO0=",
-        "path": "/nix/store/j8pbrsb3nybdap3hhg9kw0ffqd4rlbx6-source",
-        "rev": "c374d94f1536013ca8e92341b540eba4c22f9c62",
-        "type": "path"
+        "lastModified": 1730359060,
+        "narHash": "sha256-Hkk0mf4pgvX9Ut0YA397nsFqMLhzFVBdFHc4PhBrxYE=",
+        "owner": "nixos",
+        "repo": "nixpkgs",
+        "rev": "e19cfce6f3f08d07653157d8826f5c920c770d7b",
+        "type": "github"
       },
       "original": {
-        "id": "nixpkgs",
-        "type": "indirect"
+        "owner": "nixos",
+        "ref": "nixos-unstable-small",
+        "repo": "nixpkgs",
+        "type": "github"
       }
     },
     "root": {
diff --git a/flake.nix b/flake.nix
index 123cc4717223..2fee8f28b6fd 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,7 +1,10 @@
 {
   description = "code-server";
 
-  inputs.flake-utils.url = "github:numtide/flake-utils";
+  inputs = {
+    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable-small";
+    flake-utils.url = "github:numtide/flake-utils";
+  };
 
   outputs = { self, nixpkgs, flake-utils }:
     flake-utils.lib.eachDefaultSystem

From f2489265d220119bda621f3592a806094a3cd90b Mon Sep 17 00:00:00 2001
From: Asher <ash@coder.com>
Date: Thu, 31 Oct 2024 12:30:00 -0800
Subject: [PATCH 3/6] Update build.yaml to use Ubuntu 22.04

Trying to see if this resolves the gcc error.
---
 .github/workflows/build.yaml | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 3d6aaf8399bb..67969af2951a 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -24,7 +24,7 @@ concurrency:
 jobs:
   prettier:
     name: Format with Prettier
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     timeout-minutes: 5
     steps:
       - name: Checkout repo
@@ -37,7 +37,7 @@ jobs:
 
   doctoc:
     name: Doctoc markdown files
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     timeout-minutes: 5
     steps:
       - name: Checkout repo
@@ -68,7 +68,7 @@ jobs:
 
   lint-helm:
     name: Lint Helm chart
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     timeout-minutes: 5
     steps:
       - name: Checkout repo
@@ -97,7 +97,7 @@ jobs:
 
   lint-ts:
     name: Lint TypeScript files
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     timeout-minutes: 5
     steps:
       - name: Checkout repo
@@ -146,7 +146,7 @@ jobs:
 
   test-unit:
     name: Run unit tests
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     timeout-minutes: 5
     steps:
       - name: Checkout repo
@@ -187,7 +187,7 @@ jobs:
 
   build:
     name: Build code-server
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     timeout-minutes: 60
     env:
       CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
@@ -269,7 +269,7 @@ jobs:
   test-e2e:
     name: Run e2e tests
     needs: build
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     timeout-minutes: 25
     steps:
       - name: Checkout repo
@@ -318,7 +318,7 @@ jobs:
   test-e2e-proxy:
     name: Run e2e tests behind proxy
     needs: build
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     timeout-minutes: 25
     steps:
       - name: Checkout repo

From b8ef4e3edc70aa78f1ba8fcc42b9d9858ea3ecb8 Mon Sep 17 00:00:00 2001
From: Asher <ash@coder.com>
Date: Thu, 31 Oct 2024 15:29:53 -0800
Subject: [PATCH 4/6] Fix --stdin-to-clipboard

With the switch to esm, this require is now failing.  fs is already
imported, so we can just use it anyway.

Fixes #7056.
---
 patches/clipboard.diff | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/patches/clipboard.diff b/patches/clipboard.diff
index a7a0a4c0fc14..84d6c8f84ebc 100644
--- a/patches/clipboard.diff
+++ b/patches/clipboard.diff
@@ -110,7 +110,7 @@ Index: code-server/lib/vscode/src/vs/server/node/server.cli.ts
  			return true;
  		default:
  			return false;
-@@ -293,6 +294,23 @@ export async function main(desc: Product
+@@ -293,6 +294,22 @@ export async function main(desc: Product
  			}
  		}
  	} else {
@@ -119,7 +119,6 @@ Index: code-server/lib/vscode/src/vs/server/node/server.cli.ts
 +				console.error("stdin has a tty.");
 +				return;
 +			}
-+			const fs = require("fs");
 +			const stdinBuffer = fs.readFileSync(0); // STDIN_FILENO = 0
 +			const clipboardContent = stdinBuffer.toString();
 +			sendToPipe({

From bd6864658133e0ca03e436bc0d8e6bdb8ae5d8a5 Mon Sep 17 00:00:00 2001
From: Asher <ash@coder.com>
Date: Fri, 1 Nov 2024 09:28:58 -0800
Subject: [PATCH 5/6] Fix mangled exports

---
 patches/integration.diff | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/patches/integration.diff b/patches/integration.diff
index 4428faa050ed..2a9fa1a482fa 100644
--- a/patches/integration.diff
+++ b/patches/integration.diff
@@ -24,7 +24,7 @@ Index: code-server/lib/vscode/src/vs/server/node/server.main.ts
  import product from '../../platform/product/common/product.js';
  import * as perf from '../../base/common/performance.js';
  
-@@ -34,38 +34,43 @@ const errorReporter: ErrorReporter = {
+@@ -34,38 +34,47 @@ const errorReporter: ErrorReporter = {
  	}
  };
  
@@ -80,7 +80,7 @@ Index: code-server/lib/vscode/src/vs/server/node/server.main.ts
   */
 -export function spawnCli() {
 -	runCli(args, REMOTE_DATA_FOLDER, serverOptions);
-+export function spawnCli(args = parse()): Promise<void> {
++function spawnCli(args = parse()): Promise<void> {
 +	return runCli(args, createDirs(args), serverOptions);
  }
  
@@ -89,9 +89,13 @@ Index: code-server/lib/vscode/src/vs/server/node/server.main.ts
   */
 -export function createServer(address: string | net.AddressInfo | null): Promise<IServerAPI> {
 -	return doCreateServer(address, args, REMOTE_DATA_FOLDER);
-+export function createServer(address: string | net.AddressInfo | null, args = parse()): Promise<IServerAPI> {
++function createServer(address: string | net.AddressInfo | null, args = parse()): Promise<IServerAPI> {
 +	return doCreateServer(address, args, createDirs(args));
  }
++
++// The aliases prevent the names getting mangled during minification which would
++// make it difficult to import.
++export { spawnCli as spawnCli, createServer as createServer };
 Index: code-server/lib/vscode/src/vs/base/common/processes.ts
 ===================================================================
 --- code-server.orig/lib/vscode/src/vs/base/common/processes.ts
@@ -319,7 +323,7 @@ Index: code-server/lib/vscode/src/server-main.ts
 +	return loadCode(nlsConfiguration);
 +}
 +
-+// This alias prevents the name getting mangled during obfuscation which would
++// This alias prevents the name getting mangled during minification which would
 +// make it difficult to import.
 +export { loadCodeWithNls as loadCodeWithNls };
 +

From c4f5427c3c5c8df210b61bcb6fe53cceabfb9ae0 Mon Sep 17 00:00:00 2001
From: Asher <ash@coder.com>
Date: Fri, 1 Nov 2024 11:31:07 -0800
Subject: [PATCH 6/6] Update CSP hashes

---
 patches/webview.diff | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/patches/webview.diff b/patches/webview.diff
index a85f1ea63da2..aab7aa9309f8 100644
--- a/patches/webview.diff
+++ b/patches/webview.diff
@@ -62,15 +62,6 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
  			_wrapWebWorkerExtHostInIframe,
  			developmentOptions: { enableSmokeTestDriver: this._environmentService.args['enable-smoke-test-driver'] ? true : undefined, logLevel: this._logService.getLevel() },
  			settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
-@@ -385,7 +386,7 @@ export class WebClientServer {
- 			return void res.end('Not found');
- 		}
- 
--		const webWorkerExtensionHostIframeScriptSHA = 'sha256-2Q+j4hfT09+1+imS46J2YlkCtHWQt0/BE79PXjJ0ZJ8=';
-+		const webWorkerExtensionHostIframeScriptSHA = 'sha256-3Q+j4hfT09+1+imS46J2YlkCtHWQt0/BE79PXjJ0ZJ8=';
- 
- 		const cspDirectives = [
- 			'default-src \'self\';',
 Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/index.html
 ===================================================================
 --- code-server.orig/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/index.html
@@ -123,7 +114,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/extensions/worker/webWor
  			default-src 'none';
  			child-src 'self' data: blob:;
 -			script-src 'self' 'unsafe-eval' 'sha256-xM2KVDKIoeb8vVxk4ezEUsxdTZh5wFnKO3YmFhy9tkk=' https: http://localhost:* blob:;
-+			script-src 'self' 'unsafe-eval' 'sha256-yM2KVDKIoeb8vVxk4ezEUsxdTZh5wFnKO3YmFhy9tkk=' https: http://localhost:* blob:;
++			script-src 'self' 'unsafe-eval' 'sha256-6eZXxikxkENULU0EOkVQSd4hglGixLg3Aow9psZ6u2Y=' https: http://localhost:* blob:;
  			connect-src 'self' https: wss: http://localhost:* http://127.0.0.1:* ws://localhost:* ws://127.0.0.1:*;"/>
  	</head>
  	<body>