chore: upgrade Code to 1.66 (#5135)
* chore: upgrade Code to 1.66 * docs: update docs for Code upgrades * fixup!: docs * chore: update vscode submodule * chore: update integration patch * chore: update node-version patch * chore: update github-auth patch They completely changed how auth is handled for GitHub in https://github.com/microsoft/vscode/pull/145424 so our patch may not work. Will need to test and revisit. * refactor: remove postinstall patch It appears they renamed postinstall.js to postinstall.mjs and removed the use of `rimraf` which means our patch is no longer needed! 🎉b0e8554cce
* chore: refresh local-storage patch * chore: refresh service-worker patch * chore: bulk refresh patches * fixup!: docs formatting * refactor: remove unused last-opened patch * fixup!: formatting docs * fixup!: formatting docs * refactor: remove rsync postinstall * Revert "refactor: remove rsync postinstall" This reverts commit8d6b613e9d
. * refactor: update postinstall.js to .mjs * feat(patches): add parent-origin bypass * docs(patches): add notes for testing store-socket * docs(patches): update testing info for node-version * refactor(patches): delete github-auth.diff patch * docs(patches): add notes for testing connection-type * fixup!: delete github-auth patch * fixup!: update connection type testing * docs(patches): add notes to insecure-notification.diff * docs(patches): add nots for update-check.diff * fixup!: remove comma in integration patch * fix(e2e): disable workspace trust * refactor: add --no-default-rc for yarn install * feat(patches): remove yarnrc in presinstall * fixup!: silly mistake * docs: add note about KEEP_MODULES=1 * docs(patches): add testing notes for node-version * refactor(patches): remove node-version It appears this is no longer needed due to the `remote/package.json` now which targets node rather than electron. * fixup!: add cd ../.. to code upgrade instructions * fixup!: add note to yarn --production flag * fixup!: make parent-origin easier to upstream * Revert "refactor(patches): delete github-auth.diff patch" This reverts commit31a354a343
. * Revert "fixup!: delete github-auth patch" This reverts commitbdeb5212e8
. * Merge webview origin patch into webview patch * Remove unused post-install patch * Prevent builtin extensions from updating * Refresh sourcemaps patch * Update Node to v16 This matches the version in ./lib/vscode/remote/.yarnrc. I changed the engine to exactly 16 since if you use any different version it will just not work since the modules will have been built for 16 (due to the .yarnrc). * Replace fs.rmdir with fs.rm Node is showing a deprecation warning about it. * Update github-auth patch The local credentials provider is no longer used when there is a remote so this code moved into the backend web credential provider. * Prevent fs.rm from erroring about non-existent files We were using fs.rmdir which presumably did not have the same behavior in v14 (in v16 fs.rmdir also errors). * Install Python 3 in CentOS CI container Co-authored-by: Asher <ash@coder.com>
This commit is contained in:
parent
4e93db5b95
commit
7027ec7d60
32
.github/workflows/ci.yaml
vendored
32
.github/workflows/ci.yaml
vendored
@ -33,10 +33,10 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
- name: Install Node.js v14
|
- name: Install Node.js v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: "14"
|
node-version: "16"
|
||||||
|
|
||||||
- name: Install helm
|
- name: Install helm
|
||||||
uses: azure/setup-helm@v2.1
|
uses: azure/setup-helm@v2.1
|
||||||
@ -74,10 +74,10 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
- name: Install Node.js v14
|
- name: Install Node.js v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: "14"
|
node-version: "16"
|
||||||
|
|
||||||
- name: Fetch dependencies from cache
|
- name: Fetch dependencies from cache
|
||||||
id: cache-yarn
|
id: cache-yarn
|
||||||
@ -116,10 +116,10 @@ jobs:
|
|||||||
- name: Patch Code
|
- name: Patch Code
|
||||||
run: quilt push -a
|
run: quilt push -a
|
||||||
|
|
||||||
- name: Install Node.js v14
|
- name: Install Node.js v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: "14"
|
node-version: "16"
|
||||||
|
|
||||||
- name: Fetch dependencies from cache
|
- name: Fetch dependencies from cache
|
||||||
id: cache-yarn
|
id: cache-yarn
|
||||||
@ -253,15 +253,15 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Install Node.js v14
|
- name: Install Node.js v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: "14"
|
node-version: "16"
|
||||||
|
|
||||||
- name: Install development tools
|
- name: Install development tools
|
||||||
run: |
|
run: |
|
||||||
yum install -y epel-release centos-release-scl
|
yum install -y epel-release centos-release-scl
|
||||||
yum install -y devtoolset-9-{make,gcc,gcc-c++} jq rsync
|
yum install -y devtoolset-9-{make,gcc,gcc-c++} jq rsync python3
|
||||||
|
|
||||||
- name: Install nfpm and envsubst
|
- name: Install nfpm and envsubst
|
||||||
run: |
|
run: |
|
||||||
@ -337,7 +337,7 @@ jobs:
|
|||||||
CXX: ${{ format('{0}-g++', matrix.prefix) }}
|
CXX: ${{ format('{0}-g++', matrix.prefix) }}
|
||||||
LINK: ${{ format('{0}-g++', matrix.prefix) }}
|
LINK: ${{ format('{0}-g++', matrix.prefix) }}
|
||||||
NPM_CONFIG_ARCH: ${{ matrix.arch }}
|
NPM_CONFIG_ARCH: ${{ matrix.arch }}
|
||||||
NODE_VERSION: v14.17.4
|
NODE_VERSION: v16.13.0
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
@ -345,10 +345,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Install Node.js v14
|
- name: Install Node.js v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: "14"
|
node-version: "16"
|
||||||
|
|
||||||
- name: Install nfpm
|
- name: Install nfpm
|
||||||
run: |
|
run: |
|
||||||
@ -397,10 +397,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Install Node.js v14
|
- name: Install Node.js v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: "14"
|
node-version: "16"
|
||||||
|
|
||||||
- name: Install nfpm
|
- name: Install nfpm
|
||||||
run: |
|
run: |
|
||||||
@ -446,10 +446,10 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
- name: Install Node.js v14
|
- name: Install Node.js v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: "14"
|
node-version: "16"
|
||||||
|
|
||||||
- name: Fetch dependencies from cache
|
- name: Fetch dependencies from cache
|
||||||
id: cache-yarn
|
id: cache-yarn
|
||||||
|
@ -146,7 +146,7 @@ EOF
|
|||||||
# Include global extension dependencies as well.
|
# Include global extension dependencies as well.
|
||||||
rsync "$VSCODE_SRC_PATH/extensions/package.json" "$VSCODE_OUT_PATH/extensions/package.json"
|
rsync "$VSCODE_SRC_PATH/extensions/package.json" "$VSCODE_OUT_PATH/extensions/package.json"
|
||||||
rsync "$VSCODE_SRC_PATH/extensions/yarn.lock" "$VSCODE_OUT_PATH/extensions/yarn.lock"
|
rsync "$VSCODE_SRC_PATH/extensions/yarn.lock" "$VSCODE_OUT_PATH/extensions/yarn.lock"
|
||||||
rsync "$VSCODE_SRC_PATH/extensions/postinstall.js" "$VSCODE_OUT_PATH/extensions/postinstall.js"
|
rsync "$VSCODE_SRC_PATH/extensions/postinstall.mjs" "$VSCODE_OUT_PATH/extensions/postinstall.mjs"
|
||||||
|
|
||||||
pushd "$VSCODE_OUT_PATH"
|
pushd "$VSCODE_OUT_PATH"
|
||||||
symlink_asar
|
symlink_asar
|
||||||
|
@ -33,8 +33,8 @@ main() {
|
|||||||
echo "USE AT YOUR OWN RISK!"
|
echo "USE AT YOUR OWN RISK!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$major_node_version" -ne "${FORCE_NODE_VERSION:-14}" ]; then
|
if [ "$major_node_version" -ne "${FORCE_NODE_VERSION:-16}" ]; then
|
||||||
echo "ERROR: code-server currently requires node v14."
|
echo "ERROR: code-server currently requires node v16."
|
||||||
if [ -n "$FORCE_NODE_VERSION" ]; then
|
if [ -n "$FORCE_NODE_VERSION" ]; then
|
||||||
echo "However, you have overrided the version check to use v$FORCE_NODE_VERSION."
|
echo "However, you have overrided the version check to use v$FORCE_NODE_VERSION."
|
||||||
fi
|
fi
|
||||||
@ -92,7 +92,7 @@ symlink_asar() {
|
|||||||
vscode_yarn() {
|
vscode_yarn() {
|
||||||
echo 'Installing Code dependencies...'
|
echo 'Installing Code dependencies...'
|
||||||
cd lib/vscode
|
cd lib/vscode
|
||||||
yarn --production --frozen-lockfile
|
yarn --production --frozen-lockfile --no-default-rc
|
||||||
|
|
||||||
symlink_asar
|
symlink_asar
|
||||||
|
|
||||||
|
@ -7,6 +7,9 @@ install-deps() {
|
|||||||
if [[ ${CI-} ]]; then
|
if [[ ${CI-} ]]; then
|
||||||
args+=(--frozen-lockfile)
|
args+=(--frozen-lockfile)
|
||||||
fi
|
fi
|
||||||
|
if [[ "$1" == "lib/vscode" ]]; then
|
||||||
|
args+=(--no-default-rc)
|
||||||
|
fi
|
||||||
# If there is no package.json then yarn will look upward and end up installing
|
# If there is no package.json then yarn will look upward and end up installing
|
||||||
# from the root resulting in an infinite loop (this can happen if you have not
|
# from the root resulting in an infinite loop (this can happen if you have not
|
||||||
# checked out the submodule yet for example).
|
# checked out the submodule yet for example).
|
||||||
|
@ -96,6 +96,8 @@ re-apply the patches.
|
|||||||
### Version updates to Code
|
### Version updates to Code
|
||||||
|
|
||||||
1. Update the `lib/vscode` submodule to the desired upstream version branch.
|
1. Update the `lib/vscode` submodule to the desired upstream version branch.
|
||||||
|
1. `cd lib/vscode && git checkout release/1.66 && cd ../..`
|
||||||
|
2. `git add lib && git commit -m "chore: update Code"`
|
||||||
2. Apply the patches (`quilt push -a`) or restore your stashed changes. At this
|
2. Apply the patches (`quilt push -a`) or restore your stashed changes. At this
|
||||||
stage you may need to resolve conflicts. For example use `quilt push -f`,
|
stage you may need to resolve conflicts. For example use `quilt push -f`,
|
||||||
manually apply the rejected portions, then `quilt refresh`.
|
manually apply the rejected portions, then `quilt refresh`.
|
||||||
@ -130,11 +132,13 @@ yarn build:vscode
|
|||||||
yarn release
|
yarn release
|
||||||
```
|
```
|
||||||
|
|
||||||
|
_NOTE: this does not keep `node_modules`. If you want them to be kept, use `KEEP_MODULES=1 yarn release` (if you're testing in Coder, you'll want to do this)_
|
||||||
|
|
||||||
Run your build:
|
Run your build:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
cd release
|
cd release
|
||||||
yarn --production
|
yarn --production # Skip if you used KEEP_MODULES=1
|
||||||
# Runs the built JavaScript with Node.
|
# Runs the built JavaScript with Node.
|
||||||
node .
|
node .
|
||||||
```
|
```
|
||||||
|
@ -11,11 +11,11 @@ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
|
|||||||
```
|
```
|
||||||
|
|
||||||
6. Exit the terminal using `exit` and then reopen the terminal
|
6. Exit the terminal using `exit` and then reopen the terminal
|
||||||
7. Install and use Node.js 14:
|
7. Install and use Node.js 16:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
nvm install 14
|
nvm install 16
|
||||||
nvm use 14
|
nvm use 16
|
||||||
```
|
```
|
||||||
|
|
||||||
8. Install code-server globally on device with: `npm i -g code-server`
|
8. Install code-server globally on device with: `npm i -g code-server`
|
||||||
|
@ -22,8 +22,8 @@ includes installing instructions based on your operating system.
|
|||||||
|
|
||||||
## Node.js version
|
## Node.js version
|
||||||
|
|
||||||
We use the same major version of Node.js shipped with VSCode's Electron,
|
We use the same major version of Node.js shipped with Code's remote, which is
|
||||||
which is currently `14.x`. VS Code also [lists Node.js
|
currently `16.x`. VS Code also [lists Node.js
|
||||||
requirements](https://github.com/microsoft/vscode/wiki/How-to-Contribute#prerequisites).
|
requirements](https://github.com/microsoft/vscode/wiki/How-to-Contribute#prerequisites).
|
||||||
|
|
||||||
Using other versions of Node.js [may lead to unexpected
|
Using other versions of Node.js [may lead to unexpected
|
||||||
@ -72,7 +72,7 @@ Proceed to [installing](#installing)
|
|||||||
## FreeBSD
|
## FreeBSD
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pkg install -y git python npm-node14 yarn-node14 pkgconf
|
pkg install -y git python npm-node16 yarn-node16 pkgconf
|
||||||
pkg install -y libinotify
|
pkg install -y libinotify
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit c722ca6c7eed3d7987c0d5c3df5c45f6b15e77d1
|
Subproject commit dfd34e8260c270da74b5c2d86d61aee4b6d56977
|
@ -122,7 +122,7 @@
|
|||||||
"browser-ide"
|
"browser-ide"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 14"
|
"node": "16"
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"transform": {
|
"transform": {
|
||||||
|
@ -159,7 +159,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.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
@@ -252,7 +252,10 @@ export class WebClientServer {
|
@@ -253,7 +253,10 @@ export class WebClientServer {
|
||||||
return res.end();
|
return res.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +171,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|||||||
|
|
||||||
function escapeAttribute(value: string): string {
|
function escapeAttribute(value: string): string {
|
||||||
return value.replace(/"/g, '"');
|
return value.replace(/"/g, '"');
|
||||||
@@ -272,6 +275,8 @@ export class WebClientServer {
|
@@ -275,6 +278,8 @@ export class WebClientServer {
|
||||||
accessToken: this._environmentService.args['github-auth'],
|
accessToken: this._environmentService.args['github-auth'],
|
||||||
scopes: [['user:email'], ['repo']]
|
scopes: [['user:email'], ['repo']]
|
||||||
} : undefined;
|
} : undefined;
|
||||||
@ -180,15 +180,15 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|||||||
const data = (await util.promisify(fs.readFile)(filePath)).toString()
|
const data = (await util.promisify(fs.readFile)(filePath)).toString()
|
||||||
.replace('{{WORKBENCH_WEB_CONFIGURATION}}', escapeAttribute(JSON.stringify({
|
.replace('{{WORKBENCH_WEB_CONFIGURATION}}', escapeAttribute(JSON.stringify({
|
||||||
remoteAuthority,
|
remoteAuthority,
|
||||||
@@ -279,6 +284,7 @@ export class WebClientServer {
|
@@ -285,6 +290,7 @@ export class WebClientServer {
|
||||||
developmentOptions: { enableSmokeTestDriver: this._environmentService.driverHandle === 'web' ? true : undefined },
|
folderUri: resolveWorkspaceURI(this._environmentService.args['default-folder']),
|
||||||
settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
|
workspaceUri: resolveWorkspaceURI(this._environmentService.args['default-workspace']),
|
||||||
productConfiguration: <Partial<IProductConfiguration>>{
|
productConfiguration: <Partial<IProductConfiguration>>{
|
||||||
+ rootEndpoint: base,
|
+ rootEndpoint: base,
|
||||||
codeServerVersion: this._productService.codeServerVersion,
|
codeServerVersion: this._productService.codeServerVersion,
|
||||||
embedderIdentifier: 'server-distro',
|
embedderIdentifier: 'server-distro',
|
||||||
extensionsGallery: this._webExtensionResourceUrlTemplate ? {
|
extensionsGallery: this._webExtensionResourceUrlTemplate ? {
|
||||||
@@ -291,7 +297,9 @@ export class WebClientServer {
|
@@ -297,7 +303,9 @@ export class WebClientServer {
|
||||||
} : undefined
|
} : undefined
|
||||||
}
|
}
|
||||||
})))
|
})))
|
||||||
@ -199,7 +199,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|||||||
|
|
||||||
const cspDirectives = [
|
const cspDirectives = [
|
||||||
'default-src \'self\';',
|
'default-src \'self\';',
|
||||||
@@ -370,3 +378,70 @@ export class WebClientServer {
|
@@ -376,3 +384,70 @@ export class WebClientServer {
|
||||||
return res.end(data);
|
return res.end(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,18 @@ This allows the backend to distinguish them. In our case we use them to count a
|
|||||||
single "open" of Code so we need to be able to distinguish between web sockets
|
single "open" of Code so we need to be able to distinguish between web sockets
|
||||||
from two instances and two web sockets used in a single instance.
|
from two instances and two web sockets used in a single instance.
|
||||||
|
|
||||||
|
To test this,
|
||||||
|
1. Run code-server
|
||||||
|
2. Open Network tab in Browser DevTools and filter for websocket requests
|
||||||
|
3. You should see the `type=<connection-type>` in the request url
|
||||||
|
|
||||||
|
|
||||||
Index: code-server/lib/vscode/src/vs/platform/remote/common/remoteAgentConnection.ts
|
Index: code-server/lib/vscode/src/vs/platform/remote/common/remoteAgentConnection.ts
|
||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/platform/remote/common/remoteAgentConnection.ts
|
--- code-server.orig/lib/vscode/src/vs/platform/remote/common/remoteAgentConnection.ts
|
||||||
+++ code-server/lib/vscode/src/vs/platform/remote/common/remoteAgentConnection.ts
|
+++ code-server/lib/vscode/src/vs/platform/remote/common/remoteAgentConnection.ts
|
||||||
@@ -231,7 +231,7 @@ async function connectToRemoteExtensionH
|
@@ -231,7 +231,7 @@ async function connectToRemoteExtensionH
|
||||||
|
|
||||||
let socket: ISocket;
|
let socket: ISocket;
|
||||||
try {
|
try {
|
||||||
- socket = await createSocket(options.logService, options.socketFactory, options.host, options.port, `reconnectionToken=${options.reconnectionToken}&reconnection=${options.reconnectionProtocol ? 'true' : 'false'}`, `renderer-${connectionTypeToString(connectionType)}-${options.reconnectionToken}`, timeoutCancellationToken);
|
- socket = await createSocket(options.logService, options.socketFactory, options.host, options.port, `reconnectionToken=${options.reconnectionToken}&reconnection=${options.reconnectionProtocol ? 'true' : 'false'}`, `renderer-${connectionTypeToString(connectionType)}-${options.reconnectionToken}`, timeoutCancellationToken);
|
||||||
|
30
patches/disable-builtin-ext-update.diff
Normal file
30
patches/disable-builtin-ext-update.diff
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
Prevent builtin extensions from being updated
|
||||||
|
|
||||||
|
Updating builtin extensions from the marketplace prevents us from patching them
|
||||||
|
(for example out GitHub authentication patches).
|
||||||
|
|
||||||
|
Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts
|
||||||
|
===================================================================
|
||||||
|
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts
|
||||||
|
+++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts
|
||||||
|
@@ -206,6 +206,9 @@ export class Extension implements IExten
|
||||||
|
if (!this.gallery || !this.local) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
+ if (this.type !== ExtensionType.User) {
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
if (!this.local.preRelease && this.gallery.properties.isPreReleaseVersion) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@@ -1057,6 +1060,10 @@ export class ExtensionsWorkbenchService
|
||||||
|
// Skip if check updates only for builtin extensions and current extension is not builtin.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
+ if (installed.type !== ExtensionType.User) {
|
||||||
|
+ // Never update builtin extensions.
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
if (installed.isBuiltin && !installed.local?.identifier.uuid) {
|
||||||
|
// Skip if the builtin extension does not have Marketplace id
|
||||||
|
continue;
|
@ -12,7 +12,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/browser/web.api.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/browser/web.api.ts
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
+++ code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
||||||
@@ -210,6 +210,11 @@ export interface IWorkbenchConstructionO
|
@@ -215,6 +215,11 @@ export interface IWorkbenchConstructionO
|
||||||
*/
|
*/
|
||||||
readonly userDataPath?: string
|
readonly userDataPath?: string
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|||||||
|
|
||||||
/* ----- server setup ----- */
|
/* ----- server setup ----- */
|
||||||
|
|
||||||
@@ -92,6 +93,7 @@ export interface ServerParsedArgs {
|
@@ -96,6 +97,7 @@ export interface ServerParsedArgs {
|
||||||
'disable-update-check'?: boolean;
|
'disable-update-check'?: boolean;
|
||||||
'auth'?: string
|
'auth'?: string
|
||||||
'locale'?: string
|
'locale'?: string
|
||||||
@ -78,14 +78,14 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/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
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
@@ -290,6 +290,7 @@ export class WebClientServer {
|
@@ -293,6 +293,7 @@ export class WebClientServer {
|
||||||
logLevel: this._logService.getLevel(),
|
logLevel: this._logService.getLevel(),
|
||||||
},
|
},
|
||||||
userDataPath: this._environmentService.userDataPath,
|
userDataPath: this._environmentService.userDataPath,
|
||||||
+ isEnabledFileDownloads: !this._environmentService.args['disable-file-downloads'],
|
+ isEnabledFileDownloads: !this._environmentService.args['disable-file-downloads'],
|
||||||
settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
|
settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
|
||||||
productConfiguration: <Partial<IProductConfiguration>>{
|
enableWorkspaceTrust: !this._environmentService.args['disable-workspace-trust'],
|
||||||
rootEndpoint: base,
|
folderUri: resolveWorkspaceURI(this._environmentService.args['default-folder']),
|
||||||
Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts
|
Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts
|
||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/browser/contextkeys.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/browser/contextkeys.ts
|
||||||
@ -135,7 +135,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts
|
+++ code-server/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts
|
||||||
@@ -21,7 +21,7 @@ import { CLOSE_SAVED_EDITORS_COMMAND_ID,
|
@@ -22,7 +22,7 @@ import { CLOSE_SAVED_EDITORS_COMMAND_ID,
|
||||||
import { AutoSaveAfterShortDelayContext } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService';
|
import { AutoSaveAfterShortDelayContext } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService';
|
||||||
import { WorkbenchListDoubleSelection } from 'vs/platform/list/browser/listService';
|
import { WorkbenchListDoubleSelection } from 'vs/platform/list/browser/listService';
|
||||||
import { Schemas } from 'vs/base/common/network';
|
import { Schemas } from 'vs/base/common/network';
|
||||||
@ -144,7 +144,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions
|
|||||||
import { IsWebContext } from 'vs/platform/contextkey/common/contextkeys';
|
import { IsWebContext } from 'vs/platform/contextkey/common/contextkeys';
|
||||||
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { ThemeIcon } from 'vs/platform/theme/common/themeService';
|
import { ThemeIcon } from 'vs/platform/theme/common/themeService';
|
||||||
@@ -475,13 +475,16 @@ MenuRegistry.appendMenuItem(MenuId.Explo
|
@@ -476,13 +476,16 @@ MenuRegistry.appendMenuItem(MenuId.Explo
|
||||||
id: DOWNLOAD_COMMAND_ID,
|
id: DOWNLOAD_COMMAND_ID,
|
||||||
title: DOWNLOAD_LABEL
|
title: DOWNLOAD_LABEL
|
||||||
},
|
},
|
||||||
|
@ -6,7 +6,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/server/node/serverServices.ts
|
--- code-server.orig/lib/vscode/src/vs/server/node/serverServices.ts
|
||||||
+++ code-server/lib/vscode/src/vs/server/node/serverServices.ts
|
+++ code-server/lib/vscode/src/vs/server/node/serverServices.ts
|
||||||
@@ -188,6 +188,9 @@ export async function setupServerService
|
@@ -192,6 +192,9 @@ export async function setupServerService
|
||||||
const channel = new ExtensionManagementChannel(extensionManagementService, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority));
|
const channel = new ExtensionManagementChannel(extensionManagementService, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority));
|
||||||
socketServer.registerChannel('extensions', channel);
|
socketServer.registerChannel('extensions', channel);
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ Index: code-server/lib/vscode/src/vs/platform/environment/common/environmentServ
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/platform/environment/common/environmentService.ts
|
--- code-server.orig/lib/vscode/src/vs/platform/environment/common/environmentService.ts
|
||||||
+++ code-server/lib/vscode/src/vs/platform/environment/common/environmentService.ts
|
+++ code-server/lib/vscode/src/vs/platform/environment/common/environmentService.ts
|
||||||
@@ -105,7 +105,7 @@ export abstract class AbstractNativeEnvi
|
@@ -108,7 +108,7 @@ export abstract class AbstractNativeEnvi
|
||||||
return URI.file(join(vscodePortable, 'argv.json'));
|
return URI.file(join(vscodePortable, 'argv.json'));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,7 +168,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.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
@@ -26,6 +26,7 @@ import { URI } from 'vs/base/common/uri'
|
@@ -27,6 +27,7 @@ import { URI } from 'vs/base/common/uri'
|
||||||
import { streamToBuffer } from 'vs/base/common/buffer';
|
import { streamToBuffer } from 'vs/base/common/buffer';
|
||||||
import { IProductConfiguration } from 'vs/base/common/product';
|
import { IProductConfiguration } from 'vs/base/common/product';
|
||||||
import { isString } from 'vs/base/common/types';
|
import { isString } from 'vs/base/common/types';
|
||||||
@ -176,7 +176,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|||||||
|
|
||||||
const textMimeType = {
|
const textMimeType = {
|
||||||
'.html': 'text/html',
|
'.html': 'text/html',
|
||||||
@@ -277,6 +278,8 @@ export class WebClientServer {
|
@@ -280,6 +281,8 @@ export class WebClientServer {
|
||||||
} : undefined;
|
} : undefined;
|
||||||
const base = relativeRoot(getOriginalUrl(req))
|
const base = relativeRoot(getOriginalUrl(req))
|
||||||
const vscodeBase = relativePath(getOriginalUrl(req))
|
const vscodeBase = relativePath(getOriginalUrl(req))
|
||||||
@ -185,7 +185,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|||||||
const data = (await util.promisify(fs.readFile)(filePath)).toString()
|
const data = (await util.promisify(fs.readFile)(filePath)).toString()
|
||||||
.replace('{{WORKBENCH_WEB_CONFIGURATION}}', escapeAttribute(JSON.stringify({
|
.replace('{{WORKBENCH_WEB_CONFIGURATION}}', escapeAttribute(JSON.stringify({
|
||||||
remoteAuthority,
|
remoteAuthority,
|
||||||
@@ -303,7 +306,8 @@ export class WebClientServer {
|
@@ -309,7 +312,8 @@ export class WebClientServer {
|
||||||
})))
|
})))
|
||||||
.replace('{{WORKBENCH_AUTH_SESSION}}', () => authSessionInfo ? escapeAttribute(JSON.stringify(authSessionInfo)) : '')
|
.replace('{{WORKBENCH_AUTH_SESSION}}', () => authSessionInfo ? escapeAttribute(JSON.stringify(authSessionInfo)) : '')
|
||||||
.replace(/{{BASE}}/g, base)
|
.replace(/{{BASE}}/g, base)
|
||||||
@ -207,7 +207,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|||||||
|
|
||||||
/* ----- server setup ----- */
|
/* ----- server setup ----- */
|
||||||
|
|
||||||
@@ -90,6 +91,7 @@ export interface ServerParsedArgs {
|
@@ -94,6 +95,7 @@ export interface ServerParsedArgs {
|
||||||
/* ----- code-server ----- */
|
/* ----- code-server ----- */
|
||||||
'disable-update-check'?: boolean;
|
'disable-update-check'?: boolean;
|
||||||
'auth'?: string
|
'auth'?: string
|
||||||
@ -252,7 +252,7 @@ Index: code-server/lib/vscode/src/vs/workbench/workbench.web.main.ts
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/workbench.web.main.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/workbench.web.main.ts
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/workbench.web.main.ts
|
+++ code-server/lib/vscode/src/vs/workbench/workbench.web.main.ts
|
||||||
@@ -111,6 +111,10 @@ registerSingleton(IDiagnosticsService, N
|
@@ -112,6 +112,10 @@ registerSingleton(IDiagnosticsService, N
|
||||||
|
|
||||||
//#region --- workbench contributions
|
//#region --- workbench contributions
|
||||||
|
|
||||||
|
@ -1,118 +1,104 @@
|
|||||||
Use our own GitHub auth relay server
|
Add the ability to provide a GitHub token
|
||||||
|
|
||||||
Microsoft's does not work with self-hosted instances so we run our own.
|
To test install the GitHub PR extension and start code-server with GITHUB_TOKEN
|
||||||
|
or set github-auth in the config file. The extension should be authenticated.
|
||||||
|
|
||||||
Also add an extra set of scopes so that tokens provided via --github-auth will
|
Index: code-server/lib/vscode/src/vs/platform/credentials/node/credentialsMainService.ts
|
||||||
work for the PR extension.
|
|
||||||
|
|
||||||
Index: code-server/lib/vscode/extensions/github-authentication/src/githubServer.ts
|
|
||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/extensions/github-authentication/src/githubServer.ts
|
--- code-server.orig/lib/vscode/src/vs/platform/credentials/node/credentialsMainService.ts
|
||||||
+++ code-server/lib/vscode/extensions/github-authentication/src/githubServer.ts
|
+++ code-server/lib/vscode/src/vs/platform/credentials/node/credentialsMainService.ts
|
||||||
@@ -17,7 +17,7 @@ const localize = nls.loadMessageBundle()
|
@@ -5,18 +5,32 @@
|
||||||
const CLIENT_ID = '01ab8ac9400c4e429b23';
|
|
||||||
|
|
||||||
const NETWORK_ERROR = 'network error';
|
import { InMemoryCredentialsProvider } from 'vs/platform/credentials/common/credentials';
|
||||||
-const AUTH_RELAY_SERVER = 'vscode-auth.github.com';
|
import { ILogService } from 'vs/platform/log/common/log';
|
||||||
+const AUTH_RELAY_SERVER = 'auth.code-server.dev';
|
-import { INativeEnvironmentService } from 'vs/platform/environment/common/environment';
|
||||||
// const AUTH_RELAY_STAGING_SERVER = 'client-auth-staging-14a768b.herokuapp.com';
|
+import { IServerEnvironmentService } from 'vs/server/node/serverEnvironmentService';
|
||||||
|
import { IProductService } from 'vs/platform/product/common/productService';
|
||||||
class UriEventHandler extends vscode.EventEmitter<vscode.Uri> implements vscode.UriHandler {
|
import { BaseCredentialsMainService, KeytarModule } from 'vs/platform/credentials/common/credentialsMainService';
|
||||||
Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
+import { generateUuid } from 'vs/base/common/uuid';
|
||||||
===================================================================
|
|
||||||
--- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
||||||
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
||||||
@@ -274,7 +274,7 @@ export class WebClientServer {
|
|
||||||
id: generateUuid(),
|
|
||||||
providerId: 'github',
|
|
||||||
accessToken: this._environmentService.args['github-auth'],
|
|
||||||
- scopes: [['user:email'], ['repo']]
|
|
||||||
+ scopes: [['read:user', 'user:email', 'repo'], ['user:email'], ['repo']]
|
|
||||||
} : undefined;
|
|
||||||
const base = relativeRoot(getOriginalUrl(req))
|
|
||||||
const vscodeBase = relativePath(getOriginalUrl(req))
|
|
||||||
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
|
|
||||||
@@ -17,6 +17,7 @@ import { isFolderToOpen, isWorkspaceToOp
|
|
||||||
import { create, ICredentialsProvider, IURLCallbackProvider, IWorkbenchConstructionOptions, IWorkspace, IWorkspaceProvider } from 'vs/workbench/workbench.web.main';
|
|
||||||
import { posix } from 'vs/base/common/path';
|
|
||||||
import { ltrim } from 'vs/base/common/strings';
|
|
||||||
+import { equals as arrayEquals } from 'vs/base/common/arrays';
|
+import { equals as arrayEquals } from 'vs/base/common/arrays';
|
||||||
|
+
|
||||||
interface ICredential {
|
|
||||||
service: string;
|
|
||||||
@@ -24,6 +25,13 @@ interface ICredential {
|
|
||||||
password: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
+interface IToken {
|
+interface IToken {
|
||||||
+ accessToken: string
|
+ accessToken: string
|
||||||
+ account?: { label: string }
|
+ account?: { label: string }
|
||||||
+ id: string
|
+ id: string
|
||||||
+ scopes: string[]
|
+ scopes: string[]
|
||||||
+}
|
+}
|
||||||
+
|
|
||||||
class LocalStorageCredentialsProvider implements ICredentialsProvider {
|
|
||||||
|
|
||||||
private static readonly CREDENTIALS_STORAGE_KEY = 'credentials.provider';
|
export class CredentialsWebMainService extends BaseCredentialsMainService {
|
||||||
@@ -51,6 +59,58 @@ class LocalStorageCredentialsProvider im
|
|
||||||
scopes,
|
constructor(
|
||||||
accessToken: authSessionInfo!.accessToken
|
@ILogService logService: ILogService,
|
||||||
}))));
|
- @INativeEnvironmentService private readonly environmentMainService: INativeEnvironmentService,
|
||||||
+
|
+ @IServerEnvironmentService private readonly environmentMainService: IServerEnvironmentService,
|
||||||
+ // Add tokens for extensions to use. This works for extensions like the
|
@IProductService private readonly productService: IProductService,
|
||||||
+ // pull requests one or GitLens.
|
) {
|
||||||
+ const extensionId = `vscode.${authSessionInfo.providerId}-authentication`;
|
super(logService);
|
||||||
+ const service = `${product.urlProtocol}${extensionId}`;
|
+ if (this.environmentMainService.args["github-auth"]) {
|
||||||
+ const account = `${authSessionInfo.providerId}.auth`;
|
+ this.storeGitHubToken(this.environmentMainService.args["github-auth"]).catch((error) => {
|
||||||
+ // Oddly the scopes need to match exactly so we cannot just have one token
|
+ this.logService.error('Failed to store provided GitHub token', error)
|
||||||
+ // with all the scopes, instead we have to duplicate the token for each
|
|
||||||
+ // expected set of scopes.
|
|
||||||
+ const tokens: IToken[] = authSessionInfo.scopes.map((scopes) => ({
|
|
||||||
+ id: authSessionInfo!.id,
|
|
||||||
+ scopes: scopes.sort(), // Sort for comparing later.
|
|
||||||
+ accessToken: authSessionInfo!.accessToken,
|
|
||||||
+ }));
|
|
||||||
+ this.getPassword(service, account).then((raw) => {
|
|
||||||
+ let existing: {
|
|
||||||
+ content: IToken[]
|
|
||||||
+ } | undefined;
|
|
||||||
+
|
|
||||||
+ if (raw) {
|
|
||||||
+ try {
|
|
||||||
+ const json = JSON.parse(raw);
|
|
||||||
+ json.content = JSON.parse(json.content);
|
|
||||||
+ existing = json;
|
|
||||||
+ } catch (error) {
|
|
||||||
+ console.log(error);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Keep tokens for account and scope combinations we do not have in case
|
|
||||||
+ // there is an extension that uses scopes we have not accounted for (in
|
|
||||||
+ // these cases the user will need to manually authenticate the extension
|
|
||||||
+ // through the UI) or the user has tokens for other accounts.
|
|
||||||
+ if (existing?.content) {
|
|
||||||
+ existing.content = existing.content.filter((existingToken) => {
|
|
||||||
+ const scopes = existingToken.scopes.sort();
|
|
||||||
+ return !(tokens.find((token) => {
|
|
||||||
+ return arrayEquals(scopes, token.scopes)
|
|
||||||
+ && token.account?.label === existingToken.account?.label;
|
|
||||||
+ }))
|
|
||||||
+ })
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return this.setPassword(service, account, JSON.stringify({
|
|
||||||
+ extensionId,
|
|
||||||
+ ...(existing || {}),
|
|
||||||
+ content: JSON.stringify([
|
|
||||||
+ ...tokens,
|
|
||||||
+ ...(existing?.content || []),
|
|
||||||
+ ])
|
|
||||||
+ }));
|
|
||||||
+ })
|
+ })
|
||||||
}
|
+ }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the credentials service is running on the server, we add a suffix -server to differentiate from the location that the
|
||||||
|
@@ -45,4 +59,59 @@ export class CredentialsWebMainService e
|
||||||
|
}
|
||||||
|
return this._keytarCache;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ private async storeGitHubToken(githubToken: string): Promise<void> {
|
||||||
|
+ const extensionId = 'vscode.github-authentication';
|
||||||
|
+ const service = `${await this.getSecretStoragePrefix()}${extensionId}`;
|
||||||
|
+ const account = 'github.auth';
|
||||||
|
+ const scopes = [['read:user', 'user:email', 'repo']]
|
||||||
|
+
|
||||||
|
+ // Oddly the scopes need to match exactly so we cannot just have one token
|
||||||
|
+ // with all the scopes, instead we have to duplicate the token for each
|
||||||
|
+ // expected set of scopes.
|
||||||
|
+ const tokens: IToken[] = scopes.map((scopes) => ({
|
||||||
|
+ id: generateUuid(),
|
||||||
|
+ scopes: scopes.sort(), // Sort for comparing later.
|
||||||
|
+ accessToken: githubToken,
|
||||||
|
+ }));
|
||||||
|
+
|
||||||
|
+ const raw = await this.getPassword(service, account)
|
||||||
|
+
|
||||||
|
+ let existing: {
|
||||||
|
+ content: IToken[]
|
||||||
|
+ } | undefined;
|
||||||
|
+
|
||||||
|
+ if (raw) {
|
||||||
|
+ try {
|
||||||
|
+ const json = JSON.parse(raw);
|
||||||
|
+ json.content = JSON.parse(json.content);
|
||||||
|
+ existing = json;
|
||||||
|
+ } catch (error) {
|
||||||
|
+ this.logService.error('Failed to parse existing GitHub credentials', error)
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // Keep tokens for account and scope combinations we do not have in case
|
||||||
|
+ // there is an extension that uses scopes we have not accounted for (in
|
||||||
|
+ // these cases the user will need to manually authenticate the extension
|
||||||
|
+ // through the UI) or the user has tokens for other accounts.
|
||||||
|
+ if (existing?.content) {
|
||||||
|
+ existing.content = existing.content.filter((existingToken) => {
|
||||||
|
+ const scopes = existingToken.scopes.sort();
|
||||||
|
+ return !(tokens.find((token) => {
|
||||||
|
+ return arrayEquals(scopes, token.scopes)
|
||||||
|
+ && token.account?.label === existingToken.account?.label;
|
||||||
|
+ }))
|
||||||
|
+ })
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return this.setPassword(service, account, JSON.stringify({
|
||||||
|
+ extensionId,
|
||||||
|
+ ...(existing || {}),
|
||||||
|
+ content: JSON.stringify([
|
||||||
|
+ ...tokens,
|
||||||
|
+ ...(existing?.content || []),
|
||||||
|
+ ])
|
||||||
|
+ }));
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
@ -5,7 +5,12 @@ may think code-server is broken. Ideally there would be a notification at the
|
|||||||
point where these things are used instead of this though.
|
point where these things are used instead of this though.
|
||||||
|
|
||||||
To test access over something like an HTTP domain or an IP address (not
|
To test access over something like an HTTP domain or an IP address (not
|
||||||
localhost).
|
localhost). For example:
|
||||||
|
|
||||||
|
1. run code-server
|
||||||
|
2. use ngrok to expose code-server
|
||||||
|
3. access via HTTP
|
||||||
|
4. look for notification in bottom right
|
||||||
|
|
||||||
Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts
|
Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts
|
||||||
===================================================================
|
===================================================================
|
||||||
@ -15,7 +20,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts
|
|||||||
import { Disposable } from 'vs/base/common/lifecycle';
|
import { Disposable } from 'vs/base/common/lifecycle';
|
||||||
+import { localize } from 'vs/nls';
|
+import { localize } from 'vs/nls';
|
||||||
+import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
|
+import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
|
||||||
|
|
||||||
export class CodeServerClient extends Disposable {
|
export class CodeServerClient extends Disposable {
|
||||||
constructor (
|
constructor (
|
||||||
+ @INotificationService private notificationService: INotificationService,
|
+ @INotificationService private notificationService: INotificationService,
|
||||||
|
@ -21,7 +21,7 @@ Index: code-server/lib/vscode/src/vs/server/node/server.main.ts
|
|||||||
import product from 'vs/platform/product/common/product';
|
import product from 'vs/platform/product/common/product';
|
||||||
import * as perf from 'vs/base/common/performance';
|
import * as perf from 'vs/base/common/performance';
|
||||||
|
|
||||||
@@ -33,37 +33,42 @@ const errorReporter: ErrorReporter = {
|
@@ -33,38 +33,43 @@ const errorReporter: ErrorReporter = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -34,6 +34,7 @@ Index: code-server/lib/vscode/src/vs/server/node/server.main.ts
|
|||||||
-const USER_DATA_PATH = join(REMOTE_DATA_FOLDER, 'data');
|
-const USER_DATA_PATH = join(REMOTE_DATA_FOLDER, 'data');
|
||||||
-const APP_SETTINGS_HOME = join(USER_DATA_PATH, 'User');
|
-const APP_SETTINGS_HOME = join(USER_DATA_PATH, 'User');
|
||||||
-const GLOBAL_STORAGE_HOME = join(APP_SETTINGS_HOME, 'globalStorage');
|
-const GLOBAL_STORAGE_HOME = join(APP_SETTINGS_HOME, 'globalStorage');
|
||||||
|
-const LOCAL_HISTORY_HOME = join(APP_SETTINGS_HOME, 'History');
|
||||||
-const MACHINE_SETTINGS_HOME = join(USER_DATA_PATH, 'Machine');
|
-const MACHINE_SETTINGS_HOME = join(USER_DATA_PATH, 'Machine');
|
||||||
-args['user-data-dir'] = USER_DATA_PATH;
|
-args['user-data-dir'] = USER_DATA_PATH;
|
||||||
-const APP_ROOT = dirname(FileAccess.asFileUri('', require).fsPath);
|
-const APP_ROOT = dirname(FileAccess.asFileUri('', require).fsPath);
|
||||||
@ -41,7 +42,7 @@ Index: code-server/lib/vscode/src/vs/server/node/server.main.ts
|
|||||||
-args['builtin-extensions-dir'] = BUILTIN_EXTENSIONS_FOLDER_PATH;
|
-args['builtin-extensions-dir'] = BUILTIN_EXTENSIONS_FOLDER_PATH;
|
||||||
-args['extensions-dir'] = args['extensions-dir'] || join(REMOTE_DATA_FOLDER, 'extensions');
|
-args['extensions-dir'] = args['extensions-dir'] || join(REMOTE_DATA_FOLDER, 'extensions');
|
||||||
-
|
-
|
||||||
-[REMOTE_DATA_FOLDER, args['extensions-dir'], USER_DATA_PATH, APP_SETTINGS_HOME, MACHINE_SETTINGS_HOME, GLOBAL_STORAGE_HOME].forEach(f => {
|
-[REMOTE_DATA_FOLDER, args['extensions-dir'], USER_DATA_PATH, APP_SETTINGS_HOME, MACHINE_SETTINGS_HOME, GLOBAL_STORAGE_HOME, LOCAL_HISTORY_HOME].forEach(f => {
|
||||||
- try {
|
- try {
|
||||||
- if (!fs.existsSync(f)) {
|
- if (!fs.existsSync(f)) {
|
||||||
- fs.mkdirSync(f, { mode: 0o700 });
|
- fs.mkdirSync(f, { mode: 0o700 });
|
||||||
@ -53,6 +54,7 @@ Index: code-server/lib/vscode/src/vs/server/node/server.main.ts
|
|||||||
+ const USER_DATA_PATH = args['user-data-dir'] || join(REMOTE_DATA_FOLDER, 'data');
|
+ const USER_DATA_PATH = args['user-data-dir'] || join(REMOTE_DATA_FOLDER, 'data');
|
||||||
+ const APP_SETTINGS_HOME = join(USER_DATA_PATH, 'User');
|
+ const APP_SETTINGS_HOME = join(USER_DATA_PATH, 'User');
|
||||||
+ const GLOBAL_STORAGE_HOME = join(APP_SETTINGS_HOME, 'globalStorage');
|
+ const GLOBAL_STORAGE_HOME = join(APP_SETTINGS_HOME, 'globalStorage');
|
||||||
|
+ const LOCAL_HISTORY_HOME = join(APP_SETTINGS_HOME, 'History');
|
||||||
+ const MACHINE_SETTINGS_HOME = join(USER_DATA_PATH, 'Machine');
|
+ const MACHINE_SETTINGS_HOME = join(USER_DATA_PATH, 'Machine');
|
||||||
+ args['user-data-dir'] = USER_DATA_PATH;
|
+ args['user-data-dir'] = USER_DATA_PATH;
|
||||||
+ const APP_ROOT = dirname(FileAccess.asFileUri('', require).fsPath);
|
+ const APP_ROOT = dirname(FileAccess.asFileUri('', require).fsPath);
|
||||||
@ -60,14 +62,14 @@ Index: code-server/lib/vscode/src/vs/server/node/server.main.ts
|
|||||||
+ args['builtin-extensions-dir'] = BUILTIN_EXTENSIONS_FOLDER_PATH;
|
+ args['builtin-extensions-dir'] = BUILTIN_EXTENSIONS_FOLDER_PATH;
|
||||||
+ args['extensions-dir'] = args['extensions-dir'] || join(REMOTE_DATA_FOLDER, 'extensions');
|
+ args['extensions-dir'] = args['extensions-dir'] || join(REMOTE_DATA_FOLDER, 'extensions');
|
||||||
+
|
+
|
||||||
+ [REMOTE_DATA_FOLDER, args['extensions-dir'], USER_DATA_PATH, APP_SETTINGS_HOME, MACHINE_SETTINGS_HOME, GLOBAL_STORAGE_HOME].forEach(f => {
|
+ [REMOTE_DATA_FOLDER, args['extensions-dir'], USER_DATA_PATH, APP_SETTINGS_HOME, MACHINE_SETTINGS_HOME, GLOBAL_STORAGE_HOME, LOCAL_HISTORY_HOME].forEach(f => {
|
||||||
+ try {
|
+ try {
|
||||||
+ if (!fs.existsSync(f)) {
|
+ if (!fs.existsSync(f)) {
|
||||||
+ fs.mkdirSync(f, { mode: 0o700 });
|
+ fs.mkdirSync(f, { mode: 0o700 });
|
||||||
+ }
|
+ }
|
||||||
+ } catch (err) { console.error(err); }
|
+ } catch (err) { console.error(err); }
|
||||||
+ });
|
+ });
|
||||||
+ return REMOTE_DATA_FOLDER
|
+ return REMOTE_DATA_FOLDER;
|
||||||
+}
|
+}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -261,9 +263,9 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/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
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
@@ -279,6 +279,7 @@ export class WebClientServer {
|
@@ -285,6 +285,7 @@ export class WebClientServer {
|
||||||
developmentOptions: { enableSmokeTestDriver: this._environmentService.driverHandle === 'web' ? true : undefined },
|
folderUri: resolveWorkspaceURI(this._environmentService.args['default-folder']),
|
||||||
settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
|
workspaceUri: resolveWorkspaceURI(this._environmentService.args['default-workspace']),
|
||||||
productConfiguration: <Partial<IProductConfiguration>>{
|
productConfiguration: <Partial<IProductConfiguration>>{
|
||||||
+ codeServerVersion: this._productService.codeServerVersion,
|
+ codeServerVersion: this._productService.codeServerVersion,
|
||||||
embedderIdentifier: 'server-distro',
|
embedderIdentifier: 'server-distro',
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
Remove last opened functionality
|
|
||||||
|
|
||||||
This conflicts with our own handling of the last opened workspace. If we wanted
|
|
||||||
to switch to this we would need to pass through the disable-last-opened flag and
|
|
||||||
respect it here then remove our own redirction code that handles this.
|
|
||||||
|
|
||||||
Our version might be better anyway since it puts the workspace in the URL.
|
|
||||||
|
|
@ -20,19 +20,19 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/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
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
@@ -289,6 +289,7 @@ export class WebClientServer {
|
@@ -292,6 +292,7 @@ export class WebClientServer {
|
||||||
enableSmokeTestDriver: this._environmentService.driverHandle === 'web' ? true : undefined,
|
enableSmokeTestDriver: this._environmentService.driverHandle === 'web' ? true : undefined,
|
||||||
logLevel: this._logService.getLevel(),
|
logLevel: this._logService.getLevel(),
|
||||||
},
|
},
|
||||||
+ userDataPath: this._environmentService.userDataPath,
|
+ userDataPath: this._environmentService.userDataPath,
|
||||||
settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
|
settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
|
||||||
productConfiguration: <Partial<IProductConfiguration>>{
|
enableWorkspaceTrust: !this._environmentService.args['disable-workspace-trust'],
|
||||||
rootEndpoint: base,
|
folderUri: resolveWorkspaceURI(this._environmentService.args['default-folder']),
|
||||||
Index: code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
Index: code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/browser/web.api.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/browser/web.api.ts
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
+++ code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
||||||
@@ -205,6 +205,11 @@ export interface IWorkbenchConstructionO
|
@@ -210,6 +210,11 @@ export interface IWorkbenchConstructionO
|
||||||
*/
|
*/
|
||||||
readonly configurationDefaults?: Record<string, any>;
|
readonly configurationDefaults?: Record<string, any>;
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/environment/browser/envi
|
|||||||
get logFile(): URI { return joinPath(this.logsHome, 'window.log'); }
|
get logFile(): URI { return joinPath(this.logsHome, 'window.log'); }
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
- get userRoamingDataHome(): URI { return URI.file('/User').with({ scheme: Schemas.userData }); }
|
- get userRoamingDataHome(): URI { return URI.file('/User').with({ scheme: Schemas.vscodeUserData }); }
|
||||||
+ get userRoamingDataHome(): URI { return joinPath(URI.file(this.userDataPath).with({ scheme: Schemas.vscodeRemote }), 'User'); }
|
+ get userRoamingDataHome(): URI { return joinPath(URI.file(this.userDataPath).with({ scheme: Schemas.vscodeRemote }), 'User'); }
|
||||||
+
|
+
|
||||||
+ get userDataPath(): string {
|
+ get userDataPath(): string {
|
||||||
|
@ -7,7 +7,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.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
@@ -285,7 +285,10 @@ export class WebClientServer {
|
@@ -288,7 +288,10 @@ export class WebClientServer {
|
||||||
remoteAuthority,
|
remoteAuthority,
|
||||||
webviewEndpoint: vscodeBase + '/static/out/vs/workbench/contrib/webview/browser/pre',
|
webviewEndpoint: vscodeBase + '/static/out/vs/workbench/contrib/webview/browser/pre',
|
||||||
_wrapWebWorkerExtHostInIframe,
|
_wrapWebWorkerExtHostInIframe,
|
||||||
@ -17,5 +17,5 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|||||||
+ logLevel: this._logService.getLevel(),
|
+ logLevel: this._logService.getLevel(),
|
||||||
+ },
|
+ },
|
||||||
settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
|
settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
|
||||||
productConfiguration: <Partial<IProductConfiguration>>{
|
enableWorkspaceTrust: !this._environmentService.args['disable-workspace-trust'],
|
||||||
rootEndpoint: base,
|
folderUri: resolveWorkspaceURI(this._environmentService.args['default-folder']),
|
||||||
|
@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|||||||
|
|
||||||
/* ----- server setup ----- */
|
/* ----- server setup ----- */
|
||||||
|
|
||||||
@@ -88,6 +89,7 @@ export const serverOptions: OptionDescri
|
@@ -92,6 +93,7 @@ export const serverOptions: OptionDescri
|
||||||
export interface ServerParsedArgs {
|
export interface ServerParsedArgs {
|
||||||
/* ----- code-server ----- */
|
/* ----- code-server ----- */
|
||||||
'disable-update-check'?: boolean;
|
'disable-update-check'?: boolean;
|
||||||
@ -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.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
@@ -287,6 +287,7 @@ export class WebClientServer {
|
@@ -293,6 +293,7 @@ export class WebClientServer {
|
||||||
productConfiguration: <Partial<IProductConfiguration>>{
|
productConfiguration: <Partial<IProductConfiguration>>{
|
||||||
rootEndpoint: base,
|
rootEndpoint: base,
|
||||||
updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
|
updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
|
||||||
|
@ -32,7 +32,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.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
@@ -287,14 +287,14 @@ export class WebClientServer {
|
@@ -293,14 +293,14 @@ export class WebClientServer {
|
||||||
rootEndpoint: base,
|
rootEndpoint: base,
|
||||||
codeServerVersion: this._productService.codeServerVersion,
|
codeServerVersion: this._productService.codeServerVersion,
|
||||||
embedderIdentifier: 'server-distro',
|
embedderIdentifier: 'server-distro',
|
||||||
|
@ -1,107 +0,0 @@
|
|||||||
Patch the Node version to use the current version of Node
|
|
||||||
|
|
||||||
Previously it would use the yarnrc which results in builds that cannot run with
|
|
||||||
the version of Node they were built with because the native modules are
|
|
||||||
targeting the wrong version.
|
|
||||||
|
|
||||||
One way test this is to build in a fresh Docker container, run the build, then
|
|
||||||
try opening the built-in terminal.
|
|
||||||
|
|
||||||
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
|
|
||||||
@@ -124,9 +124,7 @@ const serverWithWebEntryPoints = [
|
|
||||||
];
|
|
||||||
|
|
||||||
function getNodeVersion() {
|
|
||||||
- const yarnrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.yarnrc'), 'utf8');
|
|
||||||
- const target = /^target "(.*)"$/m.exec(yarnrc)[1];
|
|
||||||
- return target;
|
|
||||||
+ return process.versions.node;
|
|
||||||
}
|
|
||||||
|
|
||||||
const nodeVersion = getNodeVersion();
|
|
||||||
Index: code-server/lib/vscode/build/lib/node.js
|
|
||||||
===================================================================
|
|
||||||
--- code-server.orig/lib/vscode/build/lib/node.js
|
|
||||||
+++ code-server/lib/vscode/build/lib/node.js
|
|
||||||
@@ -7,9 +7,7 @@ Object.defineProperty(exports, "__esModu
|
|
||||||
const path = require("path");
|
|
||||||
const fs = require("fs");
|
|
||||||
const root = path.dirname(path.dirname(__dirname));
|
|
||||||
-const yarnrcPath = path.join(root, 'remote', '.yarnrc');
|
|
||||||
-const yarnrc = fs.readFileSync(yarnrcPath, 'utf8');
|
|
||||||
-const version = /^target\s+"([^"]+)"$/m.exec(yarnrc)[1];
|
|
||||||
+const version = process.versions.node;
|
|
||||||
const platform = process.platform;
|
|
||||||
const arch = platform === 'darwin' ? 'x64' : process.arch;
|
|
||||||
const node = platform === 'win32' ? 'node.exe' : 'node';
|
|
||||||
Index: code-server/lib/vscode/build/lib/node.ts
|
|
||||||
===================================================================
|
|
||||||
--- code-server.orig/lib/vscode/build/lib/node.ts
|
|
||||||
+++ code-server/lib/vscode/build/lib/node.ts
|
|
||||||
@@ -7,9 +7,7 @@ import * as path from 'path';
|
|
||||||
import * as fs from 'fs';
|
|
||||||
|
|
||||||
const root = path.dirname(path.dirname(__dirname));
|
|
||||||
-const yarnrcPath = path.join(root, 'remote', '.yarnrc');
|
|
||||||
-const yarnrc = fs.readFileSync(yarnrcPath, 'utf8');
|
|
||||||
-const version = /^target\s+"([^"]+)"$/m.exec(yarnrc)![1];
|
|
||||||
+const version = process.versions.node;
|
|
||||||
|
|
||||||
const platform = process.platform;
|
|
||||||
const arch = platform === 'darwin' ? 'x64' : process.arch;
|
|
||||||
Index: code-server/lib/vscode/build/lib/util.js
|
|
||||||
===================================================================
|
|
||||||
--- code-server.orig/lib/vscode/build/lib/util.js
|
|
||||||
+++ code-server/lib/vscode/build/lib/util.js
|
|
||||||
@@ -298,9 +298,7 @@ function streamToPromise(stream) {
|
|
||||||
}
|
|
||||||
exports.streamToPromise = streamToPromise;
|
|
||||||
function getElectronVersion() {
|
|
||||||
- const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
|
|
||||||
- const target = /^target "(.*)"$/m.exec(yarnrc)[1];
|
|
||||||
- return target;
|
|
||||||
+ return process.versions.node;
|
|
||||||
}
|
|
||||||
exports.getElectronVersion = getElectronVersion;
|
|
||||||
function acquireWebNodePaths() {
|
|
||||||
Index: code-server/lib/vscode/build/lib/util.ts
|
|
||||||
===================================================================
|
|
||||||
--- code-server.orig/lib/vscode/build/lib/util.ts
|
|
||||||
+++ code-server/lib/vscode/build/lib/util.ts
|
|
||||||
@@ -371,9 +371,7 @@ export function streamToPromise(stream:
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getElectronVersion(): string {
|
|
||||||
- const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
|
|
||||||
- const target = /^target "(.*)"$/m.exec(yarnrc)![1];
|
|
||||||
- return target;
|
|
||||||
+ return process.versions.node;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function acquireWebNodePaths() {
|
|
||||||
@@ -455,4 +453,3 @@ export function buildWebNodePaths(outDir
|
|
||||||
result.taskName = 'build-web-node-paths';
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
Index: code-server/lib/vscode/remote/.yarnrc
|
|
||||||
===================================================================
|
|
||||||
--- code-server.orig/lib/vscode/remote/.yarnrc
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,4 +0,0 @@
|
|
||||||
-disturl "http://nodejs.org/dist"
|
|
||||||
-target "14.16.0"
|
|
||||||
-runtime "node"
|
|
||||||
-build_from_source "true"
|
|
||||||
Index: code-server/lib/vscode/.yarnrc
|
|
||||||
===================================================================
|
|
||||||
--- code-server.orig/lib/vscode/.yarnrc
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,4 +0,0 @@
|
|
||||||
-disturl "https://electronjs.org/headers"
|
|
||||||
-target "13.5.2"
|
|
||||||
-runtime "electron"
|
|
||||||
-build_from_source "true"
|
|
24
patches/parent-origin.diff
Normal file
24
patches/parent-origin.diff
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
Remove parentOriginHash checko
|
||||||
|
|
||||||
|
This fixes webviews from not working properly due to a change upstream.
|
||||||
|
Upstream added a check to ensure parent authority is encoded into the webview
|
||||||
|
origin. Since our webview origin is the parent authority, we can bypass this
|
||||||
|
check.
|
||||||
|
|
||||||
|
Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/main.js
|
||||||
|
===================================================================
|
||||||
|
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/main.js
|
||||||
|
+++ code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/main.js
|
||||||
|
@@ -317,6 +317,12 @@ const hostMessaging = new class HostMess
|
||||||
|
const id = searchParams.get('id');
|
||||||
|
|
||||||
|
const hostname = location.hostname;
|
||||||
|
+
|
||||||
|
+ // It is safe to run if we are on the same host.
|
||||||
|
+ const parent = new URL(parentOrigin)
|
||||||
|
+ if (parent.hostname == location.hostname) {
|
||||||
|
+ return start(parentOrigin)
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (!crypto.subtle) {
|
||||||
|
// cannot validate, not running in a secure context
|
@ -1,26 +0,0 @@
|
|||||||
Replace rimraf with fs.rmSync in postinstall
|
|
||||||
|
|
||||||
The postinstall gets ran when you install with npm but rimraf is a development
|
|
||||||
dependency so it will not exist.
|
|
||||||
|
|
||||||
Index: code-server/lib/vscode/extensions/postinstall.js
|
|
||||||
===================================================================
|
|
||||||
--- code-server.orig/lib/vscode/extensions/postinstall.js
|
|
||||||
+++ code-server/lib/vscode/extensions/postinstall.js
|
|
||||||
@@ -8,7 +8,6 @@
|
|
||||||
|
|
||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
-const rimraf = require('rimraf');
|
|
||||||
|
|
||||||
const root = path.join(__dirname, 'node_modules', 'typescript');
|
|
||||||
|
|
||||||
@@ -21,7 +20,7 @@ function processRoot() {
|
|
||||||
if (!toKeep.has(name)) {
|
|
||||||
const filePath = path.join(root, name);
|
|
||||||
console.log(`Removed ${filePath}`);
|
|
||||||
- rimraf.sync(filePath);
|
|
||||||
+ fs.rmSync(filePath, { recursive: true });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,7 +9,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/extensions/common/abstra
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.ts
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.ts
|
+++ code-server/lib/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.ts
|
||||||
@@ -1163,7 +1163,7 @@ class ProposedApiController {
|
@@ -1471,7 +1471,7 @@ class ProposedApiController {
|
||||||
|
|
||||||
this._envEnabledExtensions = new Set((_environmentService.extensionEnabledProposedApi ?? []).map(id => ExtensionIdentifier.toKey(id)));
|
this._envEnabledExtensions = new Set((_environmentService.extensionEnabledProposedApi ?? []).map(id => ExtensionIdentifier.toKey(id)));
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/extensions/common/extens
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/services/extensions/common/extensions.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/services/extensions/common/extensions.ts
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/services/extensions/common/extensions.ts
|
+++ code-server/lib/vscode/src/vs/workbench/services/extensions/common/extensions.ts
|
||||||
@@ -134,10 +134,7 @@ export interface IExtensionHost {
|
@@ -163,10 +163,7 @@ export interface IExtensionHost {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isProposedApiEnabled(extension: IExtensionDescription, proposal: ApiProposalName): boolean {
|
export function isProposedApiEnabled(extension: IExtensionDescription, proposal: ApiProposalName): boolean {
|
||||||
|
@ -68,7 +68,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.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
@@ -288,6 +288,7 @@ export class WebClientServer {
|
@@ -294,6 +294,7 @@ export class WebClientServer {
|
||||||
rootEndpoint: base,
|
rootEndpoint: base,
|
||||||
updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
|
updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
|
||||||
logoutEndpoint: this._environmentService.args['auth'] ? base + '/logout' : undefined,
|
logoutEndpoint: this._environmentService.args['auth'] ? base + '/logout' : undefined,
|
||||||
@ -93,7 +93,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/terminal/common/terminalE
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts
|
+++ code-server/lib/vscode/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts
|
||||||
@@ -390,7 +390,7 @@ export function createTerminalEnvironmen
|
@@ -388,7 +388,7 @@ export function createTerminalEnvironmen
|
||||||
|
|
||||||
// Sanitize the environment, removing any undesirable VS Code and Electron environment
|
// Sanitize the environment, removing any undesirable VS Code and Electron environment
|
||||||
// variables
|
// variables
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
integration.diff
|
integration.diff
|
||||||
node-version.diff
|
|
||||||
base-path.diff
|
base-path.diff
|
||||||
proposed-api.diff
|
proposed-api.diff
|
||||||
marketplace.diff
|
marketplace.diff
|
||||||
webview.diff
|
webview.diff
|
||||||
|
disable-builtin-ext-update.diff
|
||||||
insecure-notification.diff
|
insecure-notification.diff
|
||||||
update-check.diff
|
update-check.diff
|
||||||
logout.diff
|
logout.diff
|
||||||
@ -12,7 +12,6 @@ proxy-uri.diff
|
|||||||
display-language.diff
|
display-language.diff
|
||||||
github-auth.diff
|
github-auth.diff
|
||||||
unique-db.diff
|
unique-db.diff
|
||||||
post-install.diff
|
|
||||||
log-level.diff
|
log-level.diff
|
||||||
local-storage.diff
|
local-storage.diff
|
||||||
service-worker.diff
|
service-worker.diff
|
||||||
|
@ -21,7 +21,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.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
@@ -298,6 +298,10 @@ export class WebClientServer {
|
@@ -304,6 +304,10 @@ export class WebClientServer {
|
||||||
proxyEndpointTemplate: base + '/proxy/{{port}}',
|
proxyEndpointTemplate: base + '/proxy/{{port}}',
|
||||||
codeServerVersion: this._productService.codeServerVersion,
|
codeServerVersion: this._productService.codeServerVersion,
|
||||||
embedderIdentifier: 'server-distro',
|
embedderIdentifier: 'server-distro',
|
||||||
|
@ -10,7 +10,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/build/gulpfile.reh.js
|
--- code-server.orig/lib/vscode/build/gulpfile.reh.js
|
||||||
+++ code-server/lib/vscode/build/gulpfile.reh.js
|
+++ code-server/lib/vscode/build/gulpfile.reh.js
|
||||||
@@ -197,8 +197,7 @@ function packageTask(type, platform, arc
|
@@ -191,8 +191,7 @@ function packageTask(type, platform, arc
|
||||||
|
|
||||||
const src = gulp.src(sourceFolderName + '/**', { base: '.' })
|
const src = gulp.src(sourceFolderName + '/**', { base: '.' })
|
||||||
.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); }))
|
.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 workspaceExtensionPoints = ['debuggers', 'jsonValidation'];
|
||||||
const isUIExtension = (manifest) => {
|
const isUIExtension = (manifest) => {
|
||||||
@@ -237,9 +236,9 @@ function packageTask(type, platform, arc
|
@@ -231,9 +230,9 @@ function packageTask(type, platform, arc
|
||||||
.map(name => `.build/extensions/${name}/**`);
|
.map(name => `.build/extensions/${name}/**`);
|
||||||
|
|
||||||
const extensions = gulp.src(extensionPaths, { base: '.build', dot: true });
|
const extensions = gulp.src(extensionPaths, { base: '.build', dot: true });
|
||||||
@ -32,7 +32,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js
|
|||||||
|
|
||||||
let version = packageJson.version;
|
let version = packageJson.version;
|
||||||
const quality = product.quality;
|
const quality = product.quality;
|
||||||
@@ -374,7 +373,7 @@ function tweakProductForServerWeb(produc
|
@@ -368,7 +367,7 @@ function tweakProductForServerWeb(produc
|
||||||
const minifyTask = task.define(`minify-vscode-${type}`, task.series(
|
const minifyTask = task.define(`minify-vscode-${type}`, task.series(
|
||||||
optimizeTask,
|
optimizeTask,
|
||||||
util.rimraf(`out-vscode-${type}-min`),
|
util.rimraf(`out-vscode-${type}-min`),
|
||||||
|
@ -3,6 +3,12 @@ Store a static reference to the IPC socket
|
|||||||
This lets us use it to open files inside code-server from outside of
|
This lets us use it to open files inside code-server from outside of
|
||||||
code-server.
|
code-server.
|
||||||
|
|
||||||
|
To test this:
|
||||||
|
1. run code-server
|
||||||
|
2. open file outside of code-server i.e. `code-server <path-to-file`
|
||||||
|
|
||||||
|
It should open in your existing code-server instance.
|
||||||
|
|
||||||
Index: code-server/lib/vscode/src/vs/workbench/api/node/extHostExtensionService.ts
|
Index: code-server/lib/vscode/src/vs/workbench/api/node/extHostExtensionService.ts
|
||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/api/node/extHostExtensionService.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/api/node/extHostExtensionService.ts
|
||||||
|
@ -3,6 +3,11 @@ 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
|
The easiest way to test this is probably to change the version in your
|
||||||
package.json and delete the last notification storage item.
|
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
|
Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts
|
||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/browser/client.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/browser/client.ts
|
||||||
@ -14,7 +19,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts
|
|||||||
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
|
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
|
||||||
+import { IProductService } from 'vs/platform/product/common/productService';
|
+import { IProductService } from 'vs/platform/product/common/productService';
|
||||||
+import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
+import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
||||||
|
|
||||||
export class CodeServerClient extends Disposable {
|
export class CodeServerClient extends Disposable {
|
||||||
constructor (
|
constructor (
|
||||||
+ @ILogService private logService: ILogService,
|
+ @ILogService private logService: ILogService,
|
||||||
@ -93,15 +98,15 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts
|
|||||||
readonly codeServerVersion?: string
|
readonly codeServerVersion?: string
|
||||||
readonly rootEndpoint?: string
|
readonly rootEndpoint?: string
|
||||||
+ readonly updateEndpoint?: string
|
+ readonly updateEndpoint?: string
|
||||||
|
|
||||||
readonly version: string;
|
readonly version: string;
|
||||||
readonly date?: string;
|
readonly date?: string;
|
||||||
Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/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
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
@@ -286,6 +286,7 @@ export class WebClientServer {
|
@@ -292,6 +292,7 @@ export class WebClientServer {
|
||||||
settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
|
workspaceUri: resolveWorkspaceURI(this._environmentService.args['default-workspace']),
|
||||||
productConfiguration: <Partial<IProductConfiguration>>{
|
productConfiguration: <Partial<IProductConfiguration>>{
|
||||||
rootEndpoint: base,
|
rootEndpoint: base,
|
||||||
+ updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
|
+ updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
|
||||||
@ -114,19 +119,19 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|||||||
+++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
+++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
||||||
@@ -11,6 +11,8 @@ import { refineServiceDecorator } from '
|
@@ -11,6 +11,8 @@ import { refineServiceDecorator } from '
|
||||||
import { IEnvironmentService, INativeEnvironmentService } from 'vs/platform/environment/common/environment';
|
import { IEnvironmentService, INativeEnvironmentService } from 'vs/platform/environment/common/environment';
|
||||||
|
|
||||||
export const serverOptions: OptionDescriptions<ServerParsedArgs> = {
|
export const serverOptions: OptionDescriptions<ServerParsedArgs> = {
|
||||||
+ /* ----- code-server ----- */
|
+ /* ----- code-server ----- */
|
||||||
+ 'disable-update-check': { type: 'boolean' },
|
+ 'disable-update-check': { type: 'boolean' },
|
||||||
|
|
||||||
/* ----- server setup ----- */
|
/* ----- server setup ----- */
|
||||||
|
|
||||||
@@ -84,6 +86,8 @@ export const serverOptions: OptionDescri
|
@@ -88,6 +90,8 @@ export const serverOptions: OptionDescri
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface ServerParsedArgs {
|
export interface ServerParsedArgs {
|
||||||
+ /* ----- code-server ----- */
|
+ /* ----- code-server ----- */
|
||||||
+ 'disable-update-check'?: boolean;
|
+ 'disable-update-check'?: boolean;
|
||||||
|
|
||||||
/* ----- server setup ----- */
|
/* ----- server setup ----- */
|
||||||
|
|
||||||
|
@ -15,13 +15,16 @@ Since this code exists only for the authentication case we can just skip it when
|
|||||||
it is served from the current host as authentication is not a problem if the
|
it is served from the current host as authentication is not a problem if the
|
||||||
request is not cross-origin.
|
request is not cross-origin.
|
||||||
|
|
||||||
|
There is also an origin check we bypass (this seems to be related to how the
|
||||||
|
webview host is separate by default but we serve on the same host).
|
||||||
|
|
||||||
To test, open a few types of webviews (images, markdown, extension details, etc).
|
To test, open a few types of webviews (images, markdown, extension details, etc).
|
||||||
|
|
||||||
Index: code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
Index: code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
+++ code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
||||||
@@ -176,7 +176,7 @@ export class BrowserWorkbenchEnvironment
|
@@ -179,7 +179,7 @@ export class BrowserWorkbenchEnvironment
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
get webviewExternalEndpoint(): string {
|
get webviewExternalEndpoint(): string {
|
||||||
@ -34,7 +37,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.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
||||||
@@ -280,6 +280,7 @@ export class WebClientServer {
|
@@ -283,6 +283,7 @@ export class WebClientServer {
|
||||||
const data = (await util.promisify(fs.readFile)(filePath)).toString()
|
const data = (await util.promisify(fs.readFile)(filePath)).toString()
|
||||||
.replace('{{WORKBENCH_WEB_CONFIGURATION}}', escapeAttribute(JSON.stringify({
|
.replace('{{WORKBENCH_WEB_CONFIGURATION}}', escapeAttribute(JSON.stringify({
|
||||||
remoteAuthority,
|
remoteAuthority,
|
||||||
@ -46,7 +49,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/webview.ts
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/common/webview.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/common/webview.ts
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/common/webview.ts
|
+++ code-server/lib/vscode/src/vs/workbench/common/webview.ts
|
||||||
@@ -24,7 +24,7 @@ export const webviewResourceBaseHost = '
|
@@ -22,7 +22,7 @@ export const webviewResourceBaseHost = '
|
||||||
|
|
||||||
export const webviewRootResourceAuthority = `vscode-resource.${webviewResourceBaseHost}`;
|
export const webviewRootResourceAuthority = `vscode-resource.${webviewResourceBaseHost}`;
|
||||||
|
|
||||||
@ -74,3 +77,20 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/servi
|
|||||||
switch (event.request.method) {
|
switch (event.request.method) {
|
||||||
case 'GET':
|
case 'GET':
|
||||||
case 'HEAD':
|
case 'HEAD':
|
||||||
|
Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/main.js
|
||||||
|
===================================================================
|
||||||
|
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/main.js
|
||||||
|
+++ code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/main.js
|
||||||
|
@@ -318,6 +318,12 @@ const hostMessaging = new class HostMess
|
||||||
|
|
||||||
|
const hostname = location.hostname;
|
||||||
|
|
||||||
|
+ // It is safe to run if we are on the same host.
|
||||||
|
+ const parent = new URL(parentOrigin)
|
||||||
|
+ if (parent.hostname === location.hostname) {
|
||||||
|
+ return start(parentOrigin)
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (!crypto.subtle) {
|
||||||
|
// cannot validate, not running in a secure context
|
||||||
|
throw new Error(`Cannot validate in current context!`);
|
||||||
|
@ -77,7 +77,7 @@ export class SocketProxyProvider {
|
|||||||
this.proxyPipe = pipe
|
this.proxyPipe = pipe
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
fs.mkdir(path.dirname(this.proxyPipe), { recursive: true }),
|
fs.mkdir(path.dirname(this.proxyPipe), { recursive: true }),
|
||||||
fs.rmdir(this.proxyPipe, { recursive: true }),
|
fs.rm(this.proxyPipe, { force: true, recursive: true }),
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
@ -81,6 +81,9 @@ export class CodeServer {
|
|||||||
path.join(dir, "User/settings.json"),
|
path.join(dir, "User/settings.json"),
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
"workbench.startupEditor": "none",
|
"workbench.startupEditor": "none",
|
||||||
|
// NOTE@jsjoeio - needed to prevent Trust Policy prompt
|
||||||
|
// in end-to-end tests.
|
||||||
|
"security.workspace.trust.enabled": false,
|
||||||
}),
|
}),
|
||||||
"utf8",
|
"utf8",
|
||||||
)
|
)
|
||||||
|
@ -458,7 +458,7 @@ describe("cli", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
delete process.env.VSCODE_IPC_HOOK_CLI
|
delete process.env.VSCODE_IPC_HOOK_CLI
|
||||||
await fs.rmdir(vscodeIpcPath, { recursive: true })
|
await fs.rm(vscodeIpcPath, { force: true, recursive: true })
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should use existing if inside code-server", async () => {
|
it("should use existing if inside code-server", async () => {
|
||||||
|
@ -53,7 +53,7 @@ describe("SocketProxyProvider", () => {
|
|||||||
|
|
||||||
await fs.mkdir(path.join(tmpdir, "tests"), { recursive: true })
|
await fs.mkdir(path.join(tmpdir, "tests"), { recursive: true })
|
||||||
const socketPath = await provider.findFreeSocketPath(path.join(tmpdir, "tests/tls-socket-proxy"))
|
const socketPath = await provider.findFreeSocketPath(path.join(tmpdir, "tests/tls-socket-proxy"))
|
||||||
await fs.rmdir(socketPath, { recursive: true })
|
await fs.rm(socketPath, { force: true, recursive: true })
|
||||||
|
|
||||||
return new Promise<void>((_resolve) => {
|
return new Promise<void>((_resolve) => {
|
||||||
const resolved: { [key: string]: boolean } = { client: false, server: false }
|
const resolved: { [key: string]: boolean } = { client: false, server: false }
|
||||||
|
@ -29,7 +29,7 @@ export function mockLogger() {
|
|||||||
*/
|
*/
|
||||||
export async function clean(testName: string): Promise<void> {
|
export async function clean(testName: string): Promise<void> {
|
||||||
const dir = path.join(os.tmpdir(), `code-server/tests/${testName}`)
|
const dir = path.join(os.tmpdir(), `code-server/tests/${testName}`)
|
||||||
await fs.rmdir(dir, { recursive: true })
|
await fs.rm(dir, { force: true, recursive: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user