mirror of
https://github.com/coder/code-server.git
synced 2026-05-06 20:41:59 +02:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6809ded1da | ||
|
|
d31b934991 | ||
|
|
8bb8fb74cf | ||
|
|
bfd2231b4d | ||
|
|
0fcaff8740 | ||
|
|
9640bdd15a | ||
|
|
9c58360aac | ||
|
|
9f1ef13946 | ||
|
|
36f6149be1 | ||
|
|
a7777ffa42 | ||
|
|
5028169e63 | ||
|
|
3fb38414dd | ||
|
|
b486354d6e | ||
|
|
a1cf4b9ea5 | ||
|
|
64822d0f64 | ||
|
|
74017ecc65 | ||
|
|
da03a648c2 | ||
|
|
6742e945cc | ||
|
|
4e9ed56580 | ||
|
|
8a227d9fa1 |
2
.github/workflows/ci.yaml
vendored
2
.github/workflows/ci.yaml
vendored
@@ -25,7 +25,7 @@ jobs:
|
|||||||
prebuild:
|
prebuild:
|
||||||
name: Pre-build checks
|
name: Pre-build checks
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 15
|
timeout-minutes: 20
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|||||||
2
.github/workflows/publish.yaml
vendored
2
.github/workflows/publish.yaml
vendored
@@ -147,7 +147,7 @@ jobs:
|
|||||||
run: echo "::set-output name=version::$(jq -r .version package.json)"
|
run: echo "::set-output name=version::$(jq -r .version package.json)"
|
||||||
|
|
||||||
- name: Download release artifacts
|
- name: Download release artifacts
|
||||||
uses: robinraju/release-downloader@v1.4
|
uses: robinraju/release-downloader@v1.5
|
||||||
with:
|
with:
|
||||||
repository: "coder/code-server"
|
repository: "coder/code-server"
|
||||||
tag: v${{ steps.version.outputs.version }}
|
tag: v${{ steps.version.outputs.version }}
|
||||||
|
|||||||
24
CHANGELOG.md
24
CHANGELOG.md
@@ -20,14 +20,30 @@ Code v99.99.999
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## [4.6.1](https://github.com/coder/code-server/releases/tag/v4.6.1) - 2022-08-31
|
## [4.7.0](https://github.com/coder/code-server/releases/tag/v4.7.0) - 2022-09-09
|
||||||
|
|
||||||
|
Code v1.71.0
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Updated Code to 1.71.0
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- Dropped heartbeat patch because it was implemented upstream
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Add flags --unsafe-perm --legacy-peer-deps in `npm-postinstsall.sh` which ensures installing with npm works correctly
|
||||||
|
|
||||||
|
## [4.6.1](https://github.com/coder/code-server/releases/tag/v4.6.1) - 2022-09-31
|
||||||
|
|
||||||
Code v1.70.2
|
Code v1.70.2
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Updated Code to 1.70.2.
|
- Updated Code to 1.70.2
|
||||||
- Updated `argon2` to 0.29.0 which should fix issues on FreeBSD.
|
- Updated `argon2` to 0.29.0 which should fix issues on FreeBSD
|
||||||
- Updated docs to suggest using `npm` instead of `yarn`
|
- Updated docs to suggest using `npm` instead of `yarn`
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
@@ -36,7 +52,7 @@ Code v1.70.2
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fixed preservation of `process.execArgv` which means you can pass `--prof` to profile code-server.
|
- Fixed preservation of `process.execArgv` which means you can pass `--prof` to profile code-server
|
||||||
|
|
||||||
## [4.6.0](https://github.com/coder/code-server/releases/tag/v4.6.0) - 2022-08-17
|
## [4.6.0](https://github.com/coder/code-server/releases/tag/v4.6.0) - 2022-08-17
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ main() {
|
|||||||
ln -s "./lib/node" "$RELEASE_PATH/node"
|
ln -s "./lib/node" "$RELEASE_PATH/node"
|
||||||
|
|
||||||
pushd "$RELEASE_PATH"
|
pushd "$RELEASE_PATH"
|
||||||
yarn --production --frozen-lockfile
|
npm install --unsafe-perm --omit=dev
|
||||||
popd
|
popd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -140,7 +140,10 @@ install_with_yarn_or_npm() {
|
|||||||
echo "yarn.lock file present, running in development mode. use yarn to install code-server!"
|
echo "yarn.lock file present, running in development mode. use yarn to install code-server!"
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
npm install --omit=dev
|
# HACK: NPM's use of semver doesn't like resolving some peerDependencies that vscode (upstream) brings in the form of pre-releases.
|
||||||
|
# The legacy behavior doesn't complain about pre-releases being used, falling back to that for now.
|
||||||
|
# See https://github.com//pull/5071
|
||||||
|
npm install --unsafe-perm --legacy-peer-deps --omit=dev
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
|||||||
@@ -9,6 +9,9 @@
|
|||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
CHECKMARK="\xE2\x9C\x94"
|
||||||
|
DASH="-"
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
if [ "${DRY_RUN-}" = 1 ]; then
|
if [ "${DRY_RUN-}" = 1 ]; then
|
||||||
echo "Performing a dry run..."
|
echo "Performing a dry run..."
|
||||||
@@ -76,11 +79,12 @@ main() {
|
|||||||
CODE_SERVER_CURRENT_VERSION=$(node -pe "require('./package.json').version")
|
CODE_SERVER_CURRENT_VERSION=$(node -pe "require('./package.json').version")
|
||||||
# Ask which version we should update to
|
# Ask which version we should update to
|
||||||
# In the future, we'll automate this and determine the latest version automatically
|
# In the future, we'll automate this and determine the latest version automatically
|
||||||
echo "Current version: ${CODE_SERVER_CURRENT_VERSION}"
|
echo -e "$DASH Current version: ${CODE_SERVER_CURRENT_VERSION}"
|
||||||
# The $'\n' adds a line break. See: https://stackoverflow.com/a/39581815/3015595
|
# The $'\n' adds a line break. See: https://stackoverflow.com/a/39581815/3015595
|
||||||
read -r -p "What version of code-server do you want to update to?"$'\n' CODE_SERVER_VERSION_TO_UPDATE
|
CODE_SERVER_VERSION_TO_UPDATE=$(git rev-parse --abbrev-ref HEAD | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/')
|
||||||
|
echo -e "$CHECKMARK Version in branch name"
|
||||||
|
echo -e "$CHECKMARK Updating to: $CODE_SERVER_VERSION_TO_UPDATE"
|
||||||
|
|
||||||
echo -e "Great! We'll prep a PR for updating to $CODE_SERVER_VERSION_TO_UPDATE\n"
|
|
||||||
$CMD rg -g '!yarn.lock' -g '!*.svg' -g '!CHANGELOG.md' -g '!lib/vscode/**' --files-with-matches --fixed-strings "${CODE_SERVER_CURRENT_VERSION}" | $CMD xargs sd "$CODE_SERVER_CURRENT_VERSION" "$CODE_SERVER_VERSION_TO_UPDATE"
|
$CMD rg -g '!yarn.lock' -g '!*.svg' -g '!CHANGELOG.md' -g '!lib/vscode/**' --files-with-matches --fixed-strings "${CODE_SERVER_CURRENT_VERSION}" | $CMD xargs sd "$CODE_SERVER_CURRENT_VERSION" "$CODE_SERVER_VERSION_TO_UPDATE"
|
||||||
|
|
||||||
$CMD git commit --no-verify -am "chore(release): bump version to $CODE_SERVER_VERSION_TO_UPDATE"
|
$CMD git commit --no-verify -am "chore(release): bump version to $CODE_SERVER_VERSION_TO_UPDATE"
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ type: application
|
|||||||
# This is the chart version. This version number should be incremented each time you make changes
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
# to the chart and its templates, including the app version.
|
# to the chart and its templates, including the app version.
|
||||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
version: 3.2.1
|
version: 3.2.2
|
||||||
|
|
||||||
# This is the version number of the application being deployed. This version number should be
|
# This is the version number of the application being deployed. This version number should be
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
appVersion: 4.6.1
|
appVersion: 4.7.0
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
- [Workflow](#workflow)
|
- [Workflow](#workflow)
|
||||||
- [Milestones](#milestones)
|
- [Milestones](#milestones)
|
||||||
- [Triage](#triage)
|
- [Triage](#triage)
|
||||||
- [Project boards](#project-boards)
|
|
||||||
- [Versioning](#versioning)
|
- [Versioning](#versioning)
|
||||||
- [Pull requests](#pull-requests)
|
- [Pull requests](#pull-requests)
|
||||||
- [Merge strategies](#merge-strategies)
|
- [Merge strategies](#merge-strategies)
|
||||||
@@ -42,7 +41,7 @@ Occasionally, other Coder employees may step in time to time to assist with code
|
|||||||
|
|
||||||
To onboard a new maintainer to the project, please make sure to do the following:
|
To onboard a new maintainer to the project, please make sure to do the following:
|
||||||
|
|
||||||
- [ ] Add to [coder/code-server-reviewers](https://github.com/orgs/coder/teams/code-server-reviewers)
|
- [ ] Add to [coder/code-server](https://github.com/orgs/coder/teams/code-server)
|
||||||
- [ ] Add as Admin under [Repository Settings > Access](https://github.com/coder/code-server/settings/access)
|
- [ ] Add as Admin under [Repository Settings > Access](https://github.com/coder/code-server/settings/access)
|
||||||
- [ ] Add to [npm Coder org](https://www.npmjs.com/org/coder)
|
- [ ] Add to [npm Coder org](https://www.npmjs.com/org/coder)
|
||||||
- [ ] Add as [AUR maintainer](https://aur.archlinux.org/packages/code-server/) (talk to Colin)
|
- [ ] Add as [AUR maintainer](https://aur.archlinux.org/packages/code-server/) (talk to Colin)
|
||||||
@@ -72,7 +71,7 @@ Here are the milestones we use and how we use them:
|
|||||||
- "On Deck" -> Work under consideration for upcoming milestones.
|
- "On Deck" -> Work under consideration for upcoming milestones.
|
||||||
- "Backlog Candidates" -> Work that is not yet accepted for the backlog. We wait
|
- "Backlog Candidates" -> Work that is not yet accepted for the backlog. We wait
|
||||||
for the community to weigh in.
|
for the community to weigh in.
|
||||||
- "<0.0.0>" -> Work to be done for a specific version.
|
- "<Month>" -> Work to be done for said month.
|
||||||
|
|
||||||
With this flow, any un-assigned issues are essentially in triage state. Once
|
With this flow, any un-assigned issues are essentially in triage state. Once
|
||||||
triaged, issues are either "Backlog" or "Backlog Candidates". They will
|
triaged, issues are either "Backlog" or "Backlog Candidates". They will
|
||||||
@@ -91,19 +90,6 @@ We use the following process for triaging GitHub issues:
|
|||||||
2. If not urgent, add to "Backlog"
|
2. If not urgent, add to "Backlog"
|
||||||
3. Otherwise, add to "Backlog Candidate" for future consideration
|
3. Otherwise, add to "Backlog Candidate" for future consideration
|
||||||
|
|
||||||
### Project boards
|
|
||||||
|
|
||||||
We use project boards for projects or goals that span multiple milestones.
|
|
||||||
|
|
||||||
Think of this as a place to put miscellaneous things (like testing, clean up
|
|
||||||
stuff, etc). As a maintainer, random tasks may come up here and there. The
|
|
||||||
project boards give you places to add temporary notes before opening a new
|
|
||||||
issue. Given that our release milestones function off of issues, we believe
|
|
||||||
tasks should have dedicated issues.
|
|
||||||
|
|
||||||
Project boards also give us a way to separate the issue triage from
|
|
||||||
bigger-picture, long-term work.
|
|
||||||
|
|
||||||
## Versioning
|
## Versioning
|
||||||
|
|
||||||
`<major.minor.patch>`
|
`<major.minor.patch>`
|
||||||
|
|||||||
@@ -60,6 +60,6 @@ As `code-server` is based on VS Code, you can follow the steps described on Duck
|
|||||||
code-server --enable-proposed-api genuitecllc.codetogether
|
code-server --enable-proposed-api genuitecllc.codetogether
|
||||||
```
|
```
|
||||||
|
|
||||||
Another option would be to add a value in code-server's [config file](https://coder.com/docs/code-server/v4.6.1/FAQ#how-does-the-config-file-work).
|
Another option would be to add a value in code-server's [config file](https://coder.com/docs/code-server/latest/FAQ#how-does-the-config-file-work).
|
||||||
|
|
||||||
3. Refresh code-server and navigate to the CodeTogether icon in the sidebar to host or join a coding session.
|
3. Refresh code-server and navigate to the CodeTogether icon in the sidebar to host or join a coding session.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# code-server Helm Chart
|
# code-server Helm Chart
|
||||||
|
|
||||||
[](https://img.shields.io/badge/Version-1.0.0-informational?style=flat-square) [](https://img.shields.io/badge/Type-application-informational?style=flat-square) [](https://img.shields.io/badge/AppVersion-4.6.1-informational?style=flat-square)
|
[](https://img.shields.io/badge/Version-1.0.0-informational?style=flat-square) [](https://img.shields.io/badge/Type-application-informational?style=flat-square) [](https://img.shields.io/badge/AppVersion-4.7.0-informational?style=flat-square)
|
||||||
|
|
||||||
[code-server](https://github.com/coder/code-server) code-server is VS Code running
|
[code-server](https://github.com/coder/code-server) code-server is VS Code running
|
||||||
on a remote server, accessible through the browser.
|
on a remote server, accessible through the browser.
|
||||||
@@ -73,7 +73,7 @@ and their default values.
|
|||||||
| hostnameOverride | string | `""` |
|
| hostnameOverride | string | `""` |
|
||||||
| image.pullPolicy | string | `"Always"` |
|
| image.pullPolicy | string | `"Always"` |
|
||||||
| image.repository | string | `"codercom/code-server"` |
|
| image.repository | string | `"codercom/code-server"` |
|
||||||
| image.tag | string | `"4.6.1"` |
|
| image.tag | string | `"4.7.0"` |
|
||||||
| imagePullSecrets | list | `[]` |
|
| imagePullSecrets | list | `[]` |
|
||||||
| ingress.enabled | bool | `false` |
|
| ingress.enabled | bool | `false` |
|
||||||
| nameOverride | string | `""` |
|
| nameOverride | string | `""` |
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ We recommend installing with `npm` when:
|
|||||||
|
|
||||||
Installing code-server with `npm` builds native modules on install.
|
Installing code-server with `npm` builds native modules on install.
|
||||||
|
|
||||||
This process requires C dependencies; see our guide on [installing with npm][./npm.md](./npm.md) for more information.
|
This process requires C dependencies; see our guide on [installing with npm](./npm.md) for more information.
|
||||||
|
|
||||||
## Standalone releases
|
## Standalone releases
|
||||||
|
|
||||||
@@ -154,8 +154,8 @@ code-server
|
|||||||
> upgrade or [build with npm](#npm).
|
> upgrade or [build with npm](#npm).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -fOL https://github.com/coder/code-server/releases/download/v$VERSION/code-server_$VERSION_amd64.deb
|
curl -fOL https://github.com/coder/code-server/releases/download/v$VERSION/code-server_${VERSION}_amd64.deb
|
||||||
sudo dpkg -i code-server_$VERSION_amd64.deb
|
sudo dpkg -i code-server_${VERSION}_amd64.deb
|
||||||
sudo systemctl enable --now code-server@$USER
|
sudo systemctl enable --now code-server@$USER
|
||||||
# Now visit http://127.0.0.1:8080. Your password is in ~/.config/code-server/config.yaml
|
# Now visit http://127.0.0.1:8080. Your password is in ~/.config/code-server/config.yaml
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"versions": ["v4.6.1"],
|
"versions": ["v4.7.0"],
|
||||||
"routes": [
|
"routes": [
|
||||||
{
|
{
|
||||||
"title": "Home",
|
"title": "Home",
|
||||||
|
|||||||
Submodule lib/vscode updated: e4503b30fc...784b0177c5
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "code-server",
|
"name": "code-server",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"version": "4.6.1",
|
"version": "4.7.0",
|
||||||
"description": "Run VS Code on a remote server.",
|
"description": "Run VS Code on a remote server.",
|
||||||
"homepage": "https://github.com/coder/code-server",
|
"homepage": "https://github.com/coder/code-server",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
"@types/node": "^16.0.0"
|
"@types/node": "^16.0.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@coder/logger": "1.1.16",
|
"@coder/logger": "^3.0.0",
|
||||||
"argon2": "^0.29.0",
|
"argon2": "^0.29.0",
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
"cookie-parser": "^1.4.5",
|
"cookie-parser": "^1.4.5",
|
||||||
|
|||||||
@@ -13,62 +13,15 @@ To test:
|
|||||||
The file or directory should only open from the instance attached to that
|
The file or directory should only open from the instance attached to that
|
||||||
terminal.
|
terminal.
|
||||||
|
|
||||||
Index: code-server/lib/vscode/src/vs/server/node/remoteTerminalChannel.ts
|
|
||||||
===================================================================
|
|
||||||
--- code-server.orig/lib/vscode/src/vs/server/node/remoteTerminalChannel.ts
|
|
||||||
+++ code-server/lib/vscode/src/vs/server/node/remoteTerminalChannel.ts
|
|
||||||
@@ -89,7 +89,7 @@ export class RemoteTerminalChannel exten
|
|
||||||
uriTransformer: IURITransformer;
|
|
||||||
}>();
|
|
||||||
|
|
||||||
- private readonly _onExecuteCommand = this._register(new Emitter<{ reqId: number; commandId: string; commandArgs: any[] }>());
|
|
||||||
+ private readonly _onExecuteCommand = this._register(new Emitter<{ reqId: number; terminalId: number; commandId: string; commandArgs: any[] }>());
|
|
||||||
readonly onExecuteCommand = this._onExecuteCommand.event;
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
@@ -241,20 +241,20 @@ export class RemoteTerminalChannel exten
|
|
||||||
const ipcHandlePath = createRandomIPCHandle();
|
|
||||||
env.VSCODE_IPC_HOOK_CLI = ipcHandlePath;
|
|
||||||
const commandsExecuter: ICommandsExecuter = {
|
|
||||||
- executeCommand: <T>(id: string, ...args: any[]): Promise<T> => this._executeCommand(id, args, uriTransformer)
|
|
||||||
+ executeCommand: <T>(commandId: string, ...args: any[]): Promise<T> => this._executeCommand(terminalId, commandId, args, uriTransformer)
|
|
||||||
};
|
|
||||||
const cliServer = new CLIServerBase(commandsExecuter, this._logService, ipcHandlePath);
|
|
||||||
|
|
||||||
- const id = await this._ptyService.createProcess(shellLaunchConfig, initialCwd, args.cols, args.rows, args.unicodeVersion, env, baseEnv, args.options, args.shouldPersistTerminal, args.workspaceId, args.workspaceName);
|
|
||||||
- this._ptyService.onProcessExit(e => e.id === id && cliServer.dispose());
|
|
||||||
+ const terminalId = await this._ptyService.createProcess(shellLaunchConfig, initialCwd, args.cols, args.rows, args.unicodeVersion, env, baseEnv, args.options, args.shouldPersistTerminal, args.workspaceId, args.workspaceName);
|
|
||||||
+ this._ptyService.onProcessExit(e => e.id === terminalId && cliServer.dispose());
|
|
||||||
|
|
||||||
return {
|
|
||||||
- persistentTerminalId: id,
|
|
||||||
+ persistentTerminalId: terminalId,
|
|
||||||
resolvedShellLaunchConfig: shellLaunchConfig
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
- private _executeCommand<T>(commandId: string, commandArgs: any[], uriTransformer: IURITransformer): Promise<T> {
|
|
||||||
+ private _executeCommand<T>(terminalId: number, commandId: string, commandArgs: any[], uriTransformer: IURITransformer): Promise<T> {
|
|
||||||
let resolve!: (data: any) => void;
|
|
||||||
let reject!: (err: any) => void;
|
|
||||||
const result = new Promise<T>((_resolve, _reject) => {
|
|
||||||
@@ -277,6 +277,7 @@ export class RemoteTerminalChannel exten
|
|
||||||
});
|
|
||||||
this._onExecuteCommand.fire({
|
|
||||||
reqId,
|
|
||||||
+ terminalId,
|
|
||||||
commandId,
|
|
||||||
commandArgs: serializedCommandArgs
|
|
||||||
});
|
|
||||||
Index: code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts
|
Index: code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts
|
||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts
|
+++ code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts
|
||||||
@@ -94,10 +94,14 @@ class RemoteTerminalBackend extends Base
|
@@ -99,10 +99,14 @@ class RemoteTerminalBackend extends Base
|
||||||
this._remoteTerminalChannel.onExecuteCommand(async e => {
|
}
|
||||||
const reqId = e.reqId;
|
const reqId = e.reqId;
|
||||||
const commandId = e.commandId;
|
const commandId = e.commandId;
|
||||||
+ const terminalId = e.terminalId;
|
+ const terminalId = e.persistentProcessId;
|
||||||
if (!allowedCommands.includes(commandId)) {
|
if (!allowedCommands.includes(commandId)) {
|
||||||
this._remoteTerminalChannel.sendCommandResult(reqId, true, 'Invalid remote cli command: ' + commandId);
|
this._remoteTerminalChannel.sendCommandResult(reqId, true, 'Invalid remote cli command: ' + commandId);
|
||||||
return;
|
return;
|
||||||
@@ -79,18 +32,3 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTe
|
|||||||
const commandArgs = e.commandArgs.map(arg => revive(arg));
|
const commandArgs = e.commandArgs.map(arg => revive(arg));
|
||||||
try {
|
try {
|
||||||
const result = await this._commandService.executeCommand(e.commandId, ...commandArgs);
|
const result = await this._commandService.executeCommand(e.commandId, ...commandArgs);
|
||||||
Index: code-server/lib/vscode/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts
|
|
||||||
===================================================================
|
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts
|
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts
|
|
||||||
@@ -88,8 +88,8 @@ export class RemoteTerminalChannelClient
|
|
||||||
get onProcessOrphanQuestion(): Event<{ id: number }> {
|
|
||||||
return this._channel.listen<{ id: number }>('$onProcessOrphanQuestion');
|
|
||||||
}
|
|
||||||
- get onExecuteCommand(): Event<{ reqId: number; commandId: string; commandArgs: any[] }> {
|
|
||||||
- return this._channel.listen<{ reqId: number; commandId: string; commandArgs: any[] }>('$onExecuteCommand');
|
|
||||||
+ get onExecuteCommand(): Event<{ reqId: number; terminalId: number; commandId: string; commandArgs: any[] }> {
|
|
||||||
+ return this._channel.listen<{ reqId: number; terminalId: number; commandId: string; commandArgs: any[] }>('$onExecuteCommand');
|
|
||||||
}
|
|
||||||
get onDidRequestDetach(): Event<{ requestId: number; workspaceId: string; instanceId: number }> {
|
|
||||||
return this._channel.listen<{ requestId: number; workspaceId: string; instanceId: number }>('$onDidRequestDetach');
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/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
|
+++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts
|
||||||
@@ -237,6 +237,10 @@ export class Extension implements IExten
|
@@ -236,6 +236,10 @@ export class Extension implements IExten
|
||||||
if (this.type === ExtensionType.System && this.productService.quality === 'stable') {
|
if (this.type === ExtensionType.System && this.productService.quality === 'stable') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -18,7 +18,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens
|
|||||||
if (!this.local.preRelease && this.gallery.properties.isPreReleaseVersion) {
|
if (!this.local.preRelease && this.gallery.properties.isPreReleaseVersion) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1122,6 +1126,10 @@ export class ExtensionsWorkbenchService
|
@@ -1121,6 +1125,10 @@ export class ExtensionsWorkbenchService
|
||||||
// Skip if check updates only for builtin extensions and current extension is not builtin.
|
// Skip if check updates only for builtin extensions and current extension is not builtin.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
Preserve process.execArgv
|
Preserve process.execArgv
|
||||||
|
|
||||||
This ensures flags like --prof are passed down so we can profile everything.
|
This ensures flags like `--prof` are passed down to the code-server process so
|
||||||
|
we can profile everything.
|
||||||
|
|
||||||
|
To test this:
|
||||||
|
1. run `./lib/node --prof .`
|
||||||
|
2. in another terminal, run `ps -ejww`
|
||||||
|
|
||||||
|
You should see `--prof` next to every code-server process.
|
||||||
|
|
||||||
Index: code-server/lib/vscode/src/vs/server/node/extensionHostConnection.ts
|
Index: code-server/lib/vscode/src/vs/server/node/extensionHostConnection.ts
|
||||||
===================================================================
|
===================================================================
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
Add a heartbeat to web socket connections
|
|
||||||
|
|
||||||
This prevents them from being killed when they are idle. To test run behind
|
|
||||||
NGINX, make sure the sockets are idle (check dev tools), then wait 60+ seconds.
|
|
||||||
|
|
||||||
Index: code-server/lib/vscode/src/vs/base/parts/ipc/common/ipc.net.ts
|
|
||||||
===================================================================
|
|
||||||
--- code-server.orig/lib/vscode/src/vs/base/parts/ipc/common/ipc.net.ts
|
|
||||||
+++ code-server/lib/vscode/src/vs/base/parts/ipc/common/ipc.net.ts
|
|
||||||
@@ -7,6 +7,7 @@ import { VSBuffer } from 'vs/base/common
|
|
||||||
import { Emitter, Event } from 'vs/base/common/event';
|
|
||||||
import { Disposable, dispose, IDisposable } from 'vs/base/common/lifecycle';
|
|
||||||
import { IIPCLogger, IMessagePassingProtocol, IPCClient } from 'vs/base/parts/ipc/common/ipc';
|
|
||||||
+import { isWeb } from 'vs/base/common/platform';
|
|
||||||
|
|
||||||
export const enum SocketDiagnosticsEventType {
|
|
||||||
Created = 'created',
|
|
||||||
@@ -829,6 +830,19 @@ export class PersistentProtocol implemen
|
|
||||||
this._socketDisposables.push(this._socketWriter);
|
|
||||||
this._socketReader = new ProtocolReader(this._socket);
|
|
||||||
this._socketDisposables.push(this._socketReader);
|
|
||||||
+ // Send empty messages to keep the socket alive. We only need this on the
|
|
||||||
+ // web where sockets can be killed by reverse proxies for inactivity.
|
|
||||||
+ if (isWeb) {
|
|
||||||
+ const timer = setInterval(() => {
|
|
||||||
+ const msg = new ProtocolMessage(ProtocolMessageType.None, 0, 0, getEmptyBuffer());
|
|
||||||
+ this._socketWriter.write(msg);
|
|
||||||
+ }, 45000); // NGINX has a 60 second default timeout so try 45 seconds.
|
|
||||||
+ this._socketDisposables.push({
|
|
||||||
+ dispose: () => {
|
|
||||||
+ clearInterval(timer);
|
|
||||||
+ },
|
|
||||||
+ });
|
|
||||||
+ }
|
|
||||||
this._socketDisposables.push(this._socketReader.onMessage(msg => this._receiveMessage(msg)));
|
|
||||||
this._socketDisposables.push(this._socket.onClose((e) => this._onSocketClose.fire(e)));
|
|
||||||
if (initialChunk) {
|
|
||||||
@@ -27,7 +27,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts
|
|||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
@@ -42,5 +45,32 @@ export class CodeServerClient extends Di
|
@@ -42,5 +45,31 @@ export class CodeServerClient extends Di
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -49,7 +49,6 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts
|
|||||||
+ class: undefined,
|
+ class: undefined,
|
||||||
+ enabled: true,
|
+ enabled: true,
|
||||||
+ checked: true,
|
+ checked: true,
|
||||||
+ dispose: () => undefined,
|
|
||||||
+ run: () => {
|
+ run: () => {
|
||||||
+ return Promise.resolve();
|
+ return Promise.resolve();
|
||||||
+ },
|
+ },
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -1460,7 +1460,7 @@ class ProposedApiController {
|
@@ -1458,7 +1458,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)));
|
||||||
|
|
||||||
|
|||||||
@@ -35,19 +35,19 @@ Index: code-server/lib/vscode/src/vs/platform/remote/browser/remoteAuthorityReso
|
|||||||
import { getRemoteServerRootPath, parseAuthorityWithOptionalPort } from 'vs/platform/remote/common/remoteHosts';
|
import { getRemoteServerRootPath, parseAuthorityWithOptionalPort } from 'vs/platform/remote/common/remoteHosts';
|
||||||
|
|
||||||
export class RemoteAuthorityResolverService extends Disposable implements IRemoteAuthorityResolverService {
|
export class RemoteAuthorityResolverService extends Disposable implements IRemoteAuthorityResolverService {
|
||||||
@@ -22,7 +22,7 @@ export class RemoteAuthorityResolverServ
|
@@ -23,7 +23,7 @@ export class RemoteAuthorityResolverServ
|
||||||
private readonly _connectionToken: string | undefined;
|
private readonly _connectionToken: Promise<string> | string | undefined;
|
||||||
private readonly _connectionTokens: Map<string, string>;
|
private readonly _connectionTokens: Map<string, string>;
|
||||||
|
|
||||||
- constructor(@IProductService productService: IProductService, connectionToken: string | undefined, resourceUriProvider: ((uri: URI) => URI) | undefined) {
|
- constructor(@IProductService productService: IProductService, connectionToken: Promise<string> | string | undefined, resourceUriProvider: ((uri: URI) => URI) | undefined) {
|
||||||
+ constructor(@IProductService productService: IProductService, connectionToken: string | undefined, resourceUriProvider: ((uri: URI) => URI) | undefined, private readonly proxyEndpointTemplate?: string) {
|
+ constructor(@IProductService productService: IProductService, connectionToken: Promise<string> | string | undefined, resourceUriProvider: ((uri: URI) => URI) | undefined, private readonly proxyEndpointTemplate?: string) {
|
||||||
super();
|
super();
|
||||||
this._cache = new Map<string, ResolverResult>();
|
|
||||||
this._connectionToken = connectionToken;
|
this._connectionToken = connectionToken;
|
||||||
@@ -62,9 +62,14 @@ export class RemoteAuthorityResolverServ
|
this._connectionTokens = new Map<string, string>();
|
||||||
|
@@ -61,9 +61,14 @@ export class RemoteAuthorityResolverServ
|
||||||
|
|
||||||
private _doResolveAuthority(authority: string): ResolverResult {
|
private async _doResolveAuthority(authority: string): Promise<ResolverResult> {
|
||||||
const connectionToken = this._connectionTokens.get(authority) || this._connectionToken;
|
const connectionToken = await Promise.resolve(this._connectionTokens.get(authority) || this._connectionToken);
|
||||||
+ let options: ResolvedOptions | undefined;
|
+ let options: ResolvedOptions | undefined;
|
||||||
+ if (this.proxyEndpointTemplate) {
|
+ if (this.proxyEndpointTemplate) {
|
||||||
+ const proxyUrl = new URL(this.proxyEndpointTemplate, window.location.href);
|
+ const proxyUrl = new URL(this.proxyEndpointTemplate, window.location.href);
|
||||||
@@ -55,11 +55,11 @@ Index: code-server/lib/vscode/src/vs/platform/remote/browser/remoteAuthorityReso
|
|||||||
+ }
|
+ }
|
||||||
const defaultPort = (/^https:/.test(window.location.href) ? 443 : 80);
|
const defaultPort = (/^https:/.test(window.location.href) ? 443 : 80);
|
||||||
const { host, port } = parseAuthorityWithOptionalPort(authority, defaultPort);
|
const { host, port } = parseAuthorityWithOptionalPort(authority, defaultPort);
|
||||||
- return { authority: { authority, host: host, port: port, connectionToken } };
|
- const result: ResolverResult = { authority: { authority, host: host, port: port, connectionToken } };
|
||||||
+ return { authority: { authority, host: host, port: port, connectionToken }, options };
|
+ const result: ResolverResult = { authority: { authority, host: host, port: port, connectionToken }, options };
|
||||||
}
|
RemoteAuthorities.set(authority, result.authority.host, result.authority.port);
|
||||||
|
this._cache.set(authority, result);
|
||||||
_clearResolvedAuthority(authority: string): void {
|
this._onDidChangeConnectionData.fire();
|
||||||
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
|
||||||
@@ -76,7 +76,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.main.ts
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/browser/web.main.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/browser/web.main.ts
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/browser/web.main.ts
|
+++ code-server/lib/vscode/src/vs/workbench/browser/web.main.ts
|
||||||
@@ -239,7 +239,7 @@ export class BrowserMain extends Disposa
|
@@ -247,7 +247,7 @@ export class BrowserMain extends Disposa
|
||||||
|
|
||||||
// Remote
|
// Remote
|
||||||
const connectionToken = environmentService.options.connectionToken || getCookieValue(connectionTokenCookieName);
|
const connectionToken = environmentService.options.connectionToken || getCookieValue(connectionTokenCookieName);
|
||||||
|
|||||||
13
patches/safari-console.diff
Normal file
13
patches/safari-console.diff
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
Index: code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts
|
||||||
|
===================================================================
|
||||||
|
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts
|
||||||
|
+++ code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts
|
||||||
|
@@ -286,7 +286,7 @@ export class XtermTerminal extends Dispo
|
||||||
|
}
|
||||||
|
|
||||||
|
private _shouldLoadCanvas(): boolean {
|
||||||
|
- return (this._configHelper.config.gpuAcceleration === 'auto' && (XtermTerminal._suggestedRendererType === undefined || XtermTerminal._suggestedRendererType === 'canvas')) || this._configHelper.config.gpuAcceleration === 'canvas';
|
||||||
|
+ return !isSafari && (this._configHelper.config.gpuAcceleration === 'auto' && (XtermTerminal._suggestedRendererType === undefined || XtermTerminal._suggestedRendererType === 'canvas')) || this._configHelper.config.gpuAcceleration === 'canvas';
|
||||||
|
}
|
||||||
|
|
||||||
|
forceRedraw() {
|
||||||
@@ -20,5 +20,5 @@ disable-downloads.diff
|
|||||||
telemetry.diff
|
telemetry.diff
|
||||||
display-language.diff
|
display-language.diff
|
||||||
cli-window-open.diff
|
cli-window-open.diff
|
||||||
heartbeat.diff
|
|
||||||
exec-argv.diff
|
exec-argv.diff
|
||||||
|
safari-console.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.orig/lib/vscode/build/gulpfile.reh.js
|
||||||
+++ code-server/lib/vscode/build/gulpfile.reh.js
|
+++ code-server/lib/vscode/build/gulpfile.reh.js
|
||||||
@@ -194,8 +194,7 @@ function packageTask(type, platform, arc
|
@@ -196,8 +196,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) => {
|
||||||
@@ -234,9 +233,9 @@ function packageTask(type, platform, arc
|
@@ -236,9 +235,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;
|
||||||
@@ -371,7 +370,7 @@ function tweakProductForServerWeb(produc
|
@@ -373,7 +372,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`),
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
Add support for telemetry endpoint
|
Add support for telemetry endpoint
|
||||||
|
|
||||||
|
Contains some fixes included in https://github.com/microsoft/vscode/commit/b108bc8294ce920fcf2ee8d53f97c3bcf3316e1c
|
||||||
|
|
||||||
|
To test:
|
||||||
|
1. Look inside a build of code-server, inside `lib/vscode/vs/server/node/server.main.js`
|
||||||
|
2. Search for a `JSON.stringify` near `TelemetryClient`
|
||||||
|
3. throw in a `console.log()` before it and make sure it logs telemetry data
|
||||||
|
|
||||||
Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts
|
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
|
||||||
@@ -86,12 +93,45 @@ Index: code-server/lib/vscode/src/vs/workbench/services/telemetry/browser/teleme
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- code-server.orig/lib/vscode/src/vs/workbench/services/telemetry/browser/telemetryService.ts
|
--- code-server.orig/lib/vscode/src/vs/workbench/services/telemetry/browser/telemetryService.ts
|
||||||
+++ code-server/lib/vscode/src/vs/workbench/services/telemetry/browser/telemetryService.ts
|
+++ code-server/lib/vscode/src/vs/workbench/services/telemetry/browser/telemetryService.ts
|
||||||
@@ -38,26 +38,30 @@ export class TelemetryService extends Di
|
@@ -15,7 +15,7 @@ import { ClassifiedEvent, IGDPRProperty,
|
||||||
|
import { ITelemetryData, ITelemetryInfo, ITelemetryService, TelemetryLevel, TELEMETRY_SETTING_ID } from 'vs/platform/telemetry/common/telemetry';
|
||||||
|
import { TelemetryLogAppender } from 'vs/platform/telemetry/common/telemetryLogAppender';
|
||||||
|
import { ITelemetryServiceConfig, TelemetryService as BaseTelemetryService } from 'vs/platform/telemetry/common/telemetryService';
|
||||||
|
-import { isInternalTelemetry, ITelemetryAppender, NullTelemetryService, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils';
|
||||||
|
+import { getTelemetryLevel, isInternalTelemetry, ITelemetryAppender, NullTelemetryService, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils';
|
||||||
|
import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService';
|
||||||
|
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||||
|
import { resolveWorkbenchCommonProperties } from 'vs/workbench/services/telemetry/browser/workbenchCommonProperties';
|
||||||
|
@@ -24,7 +24,7 @@ export class TelemetryService extends Di
|
||||||
|
|
||||||
|
declare readonly _serviceBrand: undefined;
|
||||||
|
|
||||||
|
- private impl: ITelemetryService;
|
||||||
|
+ private impl: ITelemetryService = NullTelemetryService;
|
||||||
|
public readonly sendErrorTelemetry = true;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
@@ -37,11 +37,7 @@ export class TelemetryService extends Di
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
- if (supportsTelemetry(productService, environmentService) && productService.aiConfig?.ariaKey) {
|
- if (supportsTelemetry(productService, environmentService) && productService.aiConfig?.ariaKey) {
|
||||||
+ if (supportsTelemetry(productService, environmentService)) {
|
- this.impl = this.initializeService(environmentService, loggerService, configurationService, storageService, productService, remoteAgentService);
|
||||||
|
- } else {
|
||||||
|
- this.impl = NullTelemetryService;
|
||||||
|
- }
|
||||||
|
+ this.impl = this.initializeService(environmentService, loggerService, configurationService, storageService, productService, remoteAgentService);
|
||||||
|
|
||||||
|
// When the level changes it could change from off to on and we want to make sure telemetry is properly intialized
|
||||||
|
this._register(configurationService.onDidChangeConfiguration(e => {
|
||||||
|
@@ -64,23 +60,28 @@ export class TelemetryService extends Di
|
||||||
|
productService: IProductService,
|
||||||
|
remoteAgentService: IRemoteAgentService
|
||||||
|
) {
|
||||||
|
- const telemetrySupported = supportsTelemetry(productService, environmentService) && productService.aiConfig?.ariaKey;
|
||||||
|
- if (telemetrySupported && this.impl === NullTelemetryService && this.telemetryLevel.value !== TelemetryLevel.NONE) {
|
||||||
|
+ const telemetrySupported = supportsTelemetry(productService, environmentService);
|
||||||
|
+ if (telemetrySupported && getTelemetryLevel(configurationService) !== TelemetryLevel.NONE && this.impl === NullTelemetryService) {
|
||||||
// If remote server is present send telemetry through that, else use the client side appender
|
// If remote server is present send telemetry through that, else use the client side appender
|
||||||
const appenders = [];
|
const appenders = [];
|
||||||
const isInternal = isInternalTelemetry(productService, configurationService);
|
const isInternal = isInternalTelemetry(productService, configurationService);
|
||||||
@@ -103,14 +143,6 @@ Index: code-server/lib/vscode/src/vs/workbench/services/telemetry/browser/teleme
|
|||||||
- commonProperties: resolveWorkbenchCommonProperties(storageService, productService.commit, productService.version, isInternal, environmentService.remoteAuthority, productService.embedderIdentifier, productService.removeTelemetryMachineId, environmentService.options && environmentService.options.resolveCommonTelemetryProperties),
|
- commonProperties: resolveWorkbenchCommonProperties(storageService, productService.commit, productService.version, isInternal, environmentService.remoteAuthority, productService.embedderIdentifier, productService.removeTelemetryMachineId, environmentService.options && environmentService.options.resolveCommonTelemetryProperties),
|
||||||
- sendErrorTelemetry: this.sendErrorTelemetry,
|
- sendErrorTelemetry: this.sendErrorTelemetry,
|
||||||
- };
|
- };
|
||||||
- this.impl = this._register(new BaseTelemetryService(config, configurationService, productService));
|
|
||||||
-
|
|
||||||
- if (getTelemetryLevel(configurationService) !== TelemetryLevel.NONE) {
|
|
||||||
- // If we cannot fetch the endpoint it means it is down and we should not send any telemetry.
|
|
||||||
- // This is most likely due to ad blockers
|
|
||||||
- fetch(telemetryEndpointUrl, { method: 'POST' }).catch(err => {
|
|
||||||
- this.impl = NullTelemetryService;
|
|
||||||
- });
|
|
||||||
+ const telemetryProvider: ITelemetryAppender | undefined = remoteAgentService.getConnection() !== null ? { log: remoteAgentService.logTelemetry.bind(remoteAgentService), flush: remoteAgentService.flushTelemetry.bind(remoteAgentService) } : productService.aiConfig?.ariaKey ? new OneDataSystemWebAppender(isInternal, 'monacoworkbench', null, productService.aiConfig?.ariaKey) : undefined;
|
+ const telemetryProvider: ITelemetryAppender | undefined = remoteAgentService.getConnection() !== null ? { log: remoteAgentService.logTelemetry.bind(remoteAgentService), flush: remoteAgentService.flushTelemetry.bind(remoteAgentService) } : productService.aiConfig?.ariaKey ? new OneDataSystemWebAppender(isInternal, 'monacoworkbench', null, productService.aiConfig?.ariaKey) : undefined;
|
||||||
+ if (telemetryProvider) {
|
+ if (telemetryProvider) {
|
||||||
+ appenders.push(telemetryProvider);
|
+ appenders.push(telemetryProvider);
|
||||||
@@ -120,20 +152,19 @@ Index: code-server/lib/vscode/src/vs/workbench/services/telemetry/browser/teleme
|
|||||||
+ commonProperties: resolveWorkbenchCommonProperties(storageService, productService.commit, productService.version, isInternal, environmentService.remoteAuthority, productService.embedderIdentifier, productService.removeTelemetryMachineId, environmentService.options && environmentService.options.resolveCommonTelemetryProperties),
|
+ commonProperties: resolveWorkbenchCommonProperties(storageService, productService.commit, productService.version, isInternal, environmentService.remoteAuthority, productService.embedderIdentifier, productService.removeTelemetryMachineId, environmentService.options && environmentService.options.resolveCommonTelemetryProperties),
|
||||||
+ sendErrorTelemetry: this.sendErrorTelemetry,
|
+ sendErrorTelemetry: this.sendErrorTelemetry,
|
||||||
+ };
|
+ };
|
||||||
+ this.impl = this._register(new BaseTelemetryService(config, configurationService, productService));
|
|
||||||
+
|
+
|
||||||
+ if (remoteAgentService.getConnection() === null && getTelemetryLevel(configurationService) !== TelemetryLevel.NONE) {
|
+ return this._register(new BaseTelemetryService(config, configurationService, productService));
|
||||||
+ // If we cannot fetch the endpoint it means it is down and we should not send any telemetry.
|
|
||||||
+ // This is most likely due to ad blockers
|
|
||||||
+ fetch(telemetryEndpointUrl, { method: 'POST' }).catch(err => {
|
|
||||||
+ this.impl = NullTelemetryService;
|
|
||||||
+ });
|
|
||||||
+ }
|
|
||||||
+ } else {
|
+ } else {
|
||||||
+ this.impl = NullTelemetryService;
|
+ return this.impl;
|
||||||
}
|
+ }
|
||||||
} else {
|
|
||||||
this.impl = NullTelemetryService;
|
- return this._register(new BaseTelemetryService(config, configurationService, productService));
|
||||||
|
}
|
||||||
|
- return NullTelemetryService;
|
||||||
|
+ return this.impl;
|
||||||
|
}
|
||||||
|
|
||||||
|
setExperimentProperty(name: string, value: string): void {
|
||||||
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
|
||||||
|
|||||||
@@ -501,7 +501,7 @@ export async function setDefaults(cliArgs: UserProvidedArgs, configArgs?: Config
|
|||||||
args.verbose = false
|
args.verbose = false
|
||||||
break
|
break
|
||||||
case LogLevel.Warn:
|
case LogLevel.Warn:
|
||||||
logger.level = Level.Warning
|
logger.level = Level.Warn
|
||||||
args.verbose = false
|
args.verbose = false
|
||||||
break
|
break
|
||||||
case LogLevel.Error:
|
case LogLevel.Error:
|
||||||
|
|||||||
14
test/e2e/displayLang.test.ts
Normal file
14
test/e2e/displayLang.test.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import * as path from "path"
|
||||||
|
import { describe, test, expect } from "./baseFixture"
|
||||||
|
|
||||||
|
// Given a code-server environment with Spanish Language Pack extension installed
|
||||||
|
// and a languagepacks.json in the data-dir
|
||||||
|
describe("--locale es", ["--extensions-dir", path.join(__dirname, "./extensions"), "--locale", "es"], {}, () => {
|
||||||
|
test("should load code-server in Spanish", async ({ codeServerPage }) => {
|
||||||
|
// When
|
||||||
|
const visible = await codeServerPage.page.isVisible("text=Explorador")
|
||||||
|
|
||||||
|
// Then
|
||||||
|
expect(visible).toBe(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"name": "vscode-language-pack-es",
|
||||||
|
"displayName": "Spanish Language Pack for Visual Studio Code",
|
||||||
|
"description": "Language pack extension for Spanish",
|
||||||
|
"version": "1.70.0",
|
||||||
|
"publisher": "MS-CEINTL",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/Microsoft/vscode-loc"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"vscode": "^1.70.0"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"Language Packs"
|
||||||
|
],
|
||||||
|
"contributes": {
|
||||||
|
"localizations": [
|
||||||
|
{
|
||||||
|
"languageId": "es",
|
||||||
|
"languageName": "Spanish",
|
||||||
|
"localizedLanguageName": "español",
|
||||||
|
"translations": [
|
||||||
|
{
|
||||||
|
"id": "vscode",
|
||||||
|
"path": "./translations/main.i18n.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"": [
|
||||||
|
"--------------------------------------------------------------------------------------------",
|
||||||
|
"Copyright (c) Microsoft Corporation. All rights reserved.",
|
||||||
|
"Licensed under the MIT License. See License.txt in the project root for license information.",
|
||||||
|
"--------------------------------------------------------------------------------------------",
|
||||||
|
"Do not edit this file. It is machine generated."
|
||||||
|
],
|
||||||
|
"version": "1.0.0",
|
||||||
|
"contents": {
|
||||||
|
"vs/workbench/contrib/files/browser/explorerViewlet": {
|
||||||
|
"explore": "Explorador"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
"description": "code-server test extension",
|
"description": "code-server test extension",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"publisher": "coder",
|
"publisher": "coder",
|
||||||
|
"license": "MIT",
|
||||||
"activationEvents": [
|
"activationEvents": [
|
||||||
"onStartupFinished"
|
"onStartupFinished"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -88,6 +88,30 @@ export class CodeServer {
|
|||||||
}),
|
}),
|
||||||
"utf8",
|
"utf8",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const extensionsDir = path.join(__dirname, "../extensions")
|
||||||
|
const languagepacksContent = {
|
||||||
|
es: {
|
||||||
|
hash: "8d919a946475223861fa0c62665a4c50",
|
||||||
|
extensions: [
|
||||||
|
{
|
||||||
|
extensionIdentifier: {
|
||||||
|
id: "ms-ceintl.vscode-language-pack-es",
|
||||||
|
uuid: "47e020a1-33db-4cc0-a1b4-42f97781749a",
|
||||||
|
},
|
||||||
|
version: "1.70.0",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
translations: {
|
||||||
|
vscode: `${extensionsDir}/ms-ceintl.vscode-language-pack-es-1.70.0/translations/main.i18n.json`,
|
||||||
|
},
|
||||||
|
label: "español",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE@jsjoeio - code-server should automatically generate the languagepacks.json for
|
||||||
|
// using different display languages. This is a temporary workaround until we fix that.
|
||||||
|
await fs.writeFile(path.join(dir, "languagepacks.json"), JSON.stringify(languagepacksContent))
|
||||||
return dir
|
return dir
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"name": "test-plugin",
|
"name": "test-plugin",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"code-server": "^4.0.1"
|
"code-server": "^4.7.0"
|
||||||
},
|
},
|
||||||
"main": "out/index.js",
|
"main": "out/index.js",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@@ -201,10 +201,10 @@
|
|||||||
lodash "^4.17.19"
|
lodash "^4.17.19"
|
||||||
to-fast-properties "^2.0.0"
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
"@coder/logger@1.1.16":
|
"@coder/logger@^3.0.0":
|
||||||
version "1.1.16"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@coder/logger/-/logger-1.1.16.tgz#ee5b1b188f680733f35c11b065bbd139d618c1e1"
|
resolved "https://registry.yarnpkg.com/@coder/logger/-/logger-3.0.0.tgz#fd4d2332ca375412c75cb5ba7767d3290b106dec"
|
||||||
integrity sha512-X6VB1++IkosYY6amRAiMvuvCf12NA4+ooX+gOuu5bJIkdjmh4Lz7QpJcWRdgxesvo1msriDDr9E/sDbIWf6vsQ==
|
integrity sha512-a0TYwulM+LiKBDKK7ZtKrOmOaEDR1yonCEOZbA+lNfVpmn7gWJBRdgg1O5Jj7ElKd4s9/w9udPVJfVxciyHfhA==
|
||||||
|
|
||||||
"@eslint/eslintrc@^0.4.3":
|
"@eslint/eslintrc@^0.4.3":
|
||||||
version "0.4.3"
|
version "0.4.3"
|
||||||
|
|||||||
Reference in New Issue
Block a user