Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit b9d79dc

Browse files
committedSep 15, 2021
Add vscode via vendor package.
- Use yarn for vscode vendoring. - Grab hash from package.
1 parent 8e08775 commit b9d79dc

32 files changed

+1546
-253
lines changed
 

‎.github/codeql-config.yml

-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1 @@
11
name: "code-server CodeQL config"
2-
3-
paths-ignore:
4-
- lib/vscode

‎.github/workflows/ci.yaml

+8-8
Original file line numberDiff line numberDiff line change
@@ -124,26 +124,26 @@ jobs:
124124
- name: Build code-server
125125
run: yarn build
126126

127-
# Parse the hash of the latest commit inside lib/vscode
127+
# Parse the hash of the latest commit inside vendor/modules/code-oss-dev
128128
# use this to avoid rebuilding it if nothing changed
129129
# How it works: the `git log` command fetches the hash of the last commit
130-
# that changed a file inside `lib/vscode`. If a commit changes any file in there,
130+
# that changed a file inside `vendor/modules/code-oss-dev`. If a commit changes any file in there,
131131
# the hash returned will change, and we rebuild vscode. If the hash did not change,
132132
# (for example, a change to `src/` or `docs/`), we reuse the same build as last time.
133133
# This saves a lot of time in CI, as compiling VSCode can take anywhere from 5-10 minutes.
134-
- name: Get latest lib/vscode rev
134+
- name: Get latest vendor/modules/code-oss-dev rev
135135
id: vscode-rev
136-
run: echo "::set-output name=rev::$(git log -1 --format='%H' ./lib/vscode)"
136+
run: echo "::set-output name=rev::$(jq -r '.devDependencies["code-oss-dev"]' vendor/package.json | sed -r 's|.*#(.*)$|\1|')"
137137

138138
- name: Attempt to fetch vscode build from cache
139139
id: cache-vscode
140140
uses: actions/cache@v2
141141
with:
142142
path: |
143-
lib/vscode/.build
144-
lib/vscode/out-build
145-
lib/vscode/out-vscode
146-
lib/vscode/out-vscode-min
143+
vendor/modules/code-oss-dev/.build
144+
vendor/modules/code-oss-dev/out-build
145+
vendor/modules/code-oss-dev/out-vscode
146+
vendor/modules/code-oss-dev/out-vscode-min
147147
key: vscode-build-${{ steps.vscode-rev.outputs.rev }}
148148

149149
- name: Build vscode

‎.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ release-packages/
88
release-gcp/
99
release-images/
1010
node_modules
11-
/lib/vscode/node_modules.asar
11+
vendor/modules
1212
node-*
1313
/plugins
1414
/lib/coder-cloud-agent

‎.tours/contributing.tour

+2-2
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@
143143
"description": "Static images and the manifest live here in `src/browser/media` (see the explorer)."
144144
},
145145
{
146-
"directory": "lib/vscode",
146+
"directory": "vendor/modules/code-oss-dev",
147147
"line": 1,
148148
"description": "code-server makes use of VS Code's frontend web/remote support. Most of the modifications implement the remote server since that portion of the code is closed source and not released with VS Code.\n\nWe also have a few bug fixes and have added some features (like client-side extensions). See [https://github.com/cdr/code-server/blob/master/docs/CONTRIBUTING.md#modifications-to-vs-code](https://github.com/cdr/code-server/blob/master/docs/CONTRIBUTING.md#modifications-to-vs-code) for a list.\n\nWe make an effort to keep the modifications as few as possible."
149149
}
150150
]
151-
}
151+
}

‎ci/build/build-release.sh

+4-3
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ KEEP_MODULES="${KEEP_MODULES-0}"
1212

1313
main() {
1414
cd "$(dirname "${0}")/../.."
15+
1516
source ./ci/lib.sh
1617

17-
VSCODE_SRC_PATH="lib/vscode"
18-
VSCODE_OUT_PATH="$RELEASE_PATH/lib/vscode"
18+
VSCODE_SRC_PATH="vendor/modules/code-oss-dev"
19+
VSCODE_OUT_PATH="$RELEASE_PATH/vendor/modules/code-oss-dev"
1920

2021
mkdir -p "$RELEASE_PATH"
2122

@@ -24,7 +25,7 @@ main() {
2425

2526
rsync ./docs/README.md "$RELEASE_PATH"
2627
rsync LICENSE.txt "$RELEASE_PATH"
27-
rsync ./lib/vscode/ThirdPartyNotices.txt "$RELEASE_PATH"
28+
rsync ./vendor/modules/code-oss-dev/ThirdPartyNotices.txt "$RELEASE_PATH"
2829
}
2930

3031
bundle_code_server() {

‎ci/build/build-standalone-release.sh

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export npm_config_build_from_source=true
77

88
main() {
99
cd "$(dirname "${0}")/../.."
10+
1011
source ./ci/lib.sh
1112

1213
rsync "$RELEASE_PATH/" "$RELEASE_PATH-standalone"
@@ -19,6 +20,7 @@ main() {
1920
node_path="$(yarn -s node <<< 'console.info(process.execPath)')"
2021

2122
mkdir -p "$RELEASE_PATH/bin"
23+
mkdir -p "$RELEASE_PATH/lib"
2224
rsync ./ci/build/code-server.sh "$RELEASE_PATH/bin/code-server"
2325
rsync "$node_path" "$RELEASE_PATH/lib/node"
2426

@@ -32,7 +34,7 @@ main() {
3234
# leaves a few stray symlinks. Clean them up so nfpm does not fail.
3335
# Remove this line when its no longer needed.
3436

35-
rm -fr "$RELEASE_PATH/lib/vscode/extensions/node_modules/.bin"
37+
rm -fr "$RELEASE_PATH/vendor/modules/code-oss-dev/extensions/node_modules/.bin"
3638
}
3739

3840
main "$@"

‎ci/build/build-vscode.sh

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
#!/usr/bin/env bash
22
set -euo pipefail
33

4-
# Builds vscode into lib/vscode/out-vscode.
4+
# Builds vscode into vendor/modules/code-oss-dev/out-vscode.
55

66
# MINIFY controls whether a minified version of vscode is built.
77
MINIFY=${MINIFY-true}
88

99
main() {
1010
cd "$(dirname "${0}")/../.."
11-
cd lib/vscode
11+
12+
cd vendor/modules/code-oss-dev
1213

1314
yarn gulp compile-build compile-extensions-build compile-extension-media
1415
yarn gulp optimize --gulpfile ./coder.js

‎ci/build/clean.sh

-4
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ main() {
66
source ./ci/lib.sh
77

88
git clean -Xffd
9-
10-
pushd lib/vscode
11-
git clean -xffd
12-
popd
139
}
1410

1511
main "$@"

‎ci/build/npm-postinstall.sh

+3-1
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,15 @@ symlink_asar() {
8787
}
8888

8989
vscode_yarn() {
90-
cd lib/vscode
90+
echo 'Installing vendor dependencies...'
91+
cd vendor/modules/code-oss-dev
9192
yarn --production --frozen-lockfile
9293

9394
symlink_asar
9495

9596
cd extensions
9697
yarn --production --frozen-lockfile
98+
9799
for ext in */; do
98100
ext="${ext%/}"
99101
echo "extensions/$ext: installing dependencies"

‎ci/dev/fmt.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ main() {
1919
"*.sh"
2020
)
2121
prettier --write --loglevel=warn $(
22-
git ls-files "${prettierExts[@]}" | grep -v "lib/vscode" | grep -v 'helm-chart'
22+
git ls-files "${prettierExts[@]}" | grep -v "lib/vscode" | grep -v "vendor/modules/code-oss-dev" | grep -v 'helm-chart'
2323
)
2424

2525
doctoc --title '# FAQ' docs/FAQ.md > /dev/null
@@ -32,6 +32,7 @@ main() {
3232
doctoc --title '# iPad' docs/ipad.md > /dev/null
3333
doctoc --title '# Termux' docs/termux.md > /dev/null
3434

35+
# TODO: replace with a method that generates fewer false positives.
3536
if [[ ${CI-} && $(git ls-files --other --modified --exclude-standard) ]]; then
3637
echo "Files need generation or are formatted incorrectly:"
3738
git -c color.ui=always status | grep --color=no '\[31m'

‎ci/dev/lint.sh

+3-6
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,14 @@ set -euo pipefail
44
main() {
55
cd "$(dirname "$0")/../.."
66

7-
eslint --max-warnings=0 --fix $(git ls-files "*.ts" "*.tsx" "*.js" | grep -v "lib/vscode")
8-
stylelint $(git ls-files "*.css" | grep -v "lib/vscode")
7+
eslint --max-warnings=0 --fix $(git ls-files "*.ts" "*.tsx" "*.js" | grep -v "vendor/modules/code-oss-dev" | grep -v "lib/vscode")
8+
stylelint $(git ls-files "*.css" | grep -v "vendor/modules/code-oss-dev" | grep -v "lib/vscode")
99
tsc --noEmit --skipLibCheck
10-
shellcheck -e SC2046,SC2164,SC2154,SC1091,SC1090,SC2002 $(git ls-files "*.sh" | grep -v "lib/vscode")
10+
shellcheck -e SC2046,SC2164,SC2154,SC1091,SC1090,SC2002 $(git ls-files "*.sh" | grep -v "vendor/modules/code-oss-dev" | grep -v "lib/vscode")
1111
if command -v helm && helm kubeval --help > /dev/null; then
1212
helm kubeval ci/helm-chart
1313
fi
1414

15-
cd lib/vscode
16-
# Run this periodically in vanilla VS code to make sure we don't add any more warnings.
17-
yarn -s eslint --max-warnings=3
1815
cd "$OLDPWD"
1916
}
2017

‎ci/dev/postinstall.sh

+17-6
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,28 @@ set -euo pipefail
33

44
main() {
55
cd "$(dirname "$0")/../.."
6-
source ./ci/lib.sh
76

8-
# This installs the dependencies needed for testing
7+
echo 'Installing code-server test dependencies...'
8+
99
cd test
10-
yarn
10+
yarn install
1111
cd ..
1212

13-
cd lib/vscode
14-
yarn ${CI+--frozen-lockfile}
13+
cd vendor
14+
echo 'Installing vendor dependencies...'
15+
16+
# * We install in 'modules' instead of 'node_modules' because VS Code's extensions
17+
# use a webpack config which cannot differentiate between its own node_modules
18+
# and itself being in a directory with the same name.
19+
#
20+
# * We ignore scripts because NPM/Yarn's default behavior is to assume that
21+
# devDependencies are not needed, and that even git repo based packages are
22+
# assumed to be compiled. Because the default behavior for VS Code's `postinstall`
23+
# assumes we're also compiled, this needs to be ignored.
24+
yarn install --modules-folder modules --ignore-scripts --frozen-lockfile
1525

16-
symlink_asar
26+
# Finally, run the vendor `postinstall`
27+
yarn run postinstall
1728
}
1829

1930
main "$@"

‎ci/dev/test-e2e.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ set -euo pipefail
33

44
main() {
55
cd "$(dirname "$0")/../.."
6+
67
source ./ci/lib.sh
78

89
local dir="$PWD"
@@ -24,7 +25,7 @@ main() {
2425
exit 1
2526
fi
2627

27-
if [[ ! -d $dir/lib/vscode/out ]]; then
28+
if [[ ! -d $dir/vendor/modules/code-oss-dev/out ]]; then
2829
echo >&2 "No VS Code build detected"
2930
echo >&2 "You can build it with 'yarn build:vscode' or 'yarn watch'"
3031
exit 1

‎ci/dev/update-vscode.sh

-133
This file was deleted.

‎ci/dev/watch.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ async function main(): Promise<void> {
1616

1717
class Watcher {
1818
private readonly rootPath = path.resolve(__dirname, "../..")
19-
private readonly vscodeSourcePath = path.join(this.rootPath, "lib/vscode")
19+
private readonly vscodeSourcePath = path.join(this.rootPath, "vendor/modules/code-oss-dev")
2020

2121
private static log(message: string, skipNewline = false): void {
2222
process.stdout.write(message)

‎ci/lib.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pkg_json_version() {
1414
}
1515

1616
vscode_version() {
17-
jq -r .version lib/vscode/package.json
17+
jq -r .version vendor/modules/code-oss-dev/package.json
1818
}
1919

2020
os() {

‎docs/CONTRIBUTING.md

+59-58
Large diffs are not rendered by default.

‎docs/termux.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ There is a known issue with search not working on Android because it's missing
4545

4646
```sh
4747
# run this command inside the code-server directory
48-
ln -s $PREFIX/bin/rg ./lib/vscode/node_modules/vscode-ripgrep/bin/rg
48+
ln -s $PREFIX/bin/rg ./vendor/modules/code-oss-dev/vscode-ripgrep/bin/rg
4949
```
5050

5151
### Backspace doesn't work

‎package.json

+1-3
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
"test:scripts": "./ci/dev/test-scripts.sh",
2424
"package": "./ci/build/build-packages.sh",
2525
"postinstall": "./ci/dev/postinstall.sh",
26-
"update:vscode": "./ci/dev/update-vscode.sh",
27-
"_____": "",
2826
"_audit": "./ci/dev/audit.sh",
2927
"fmt": "./ci/dev/fmt.sh",
3028
"lint": "./ci/dev/lint.sh",
@@ -130,6 +128,7 @@
130128
"testEnvironment": "node",
131129
"testPathIgnorePatterns": [
132130
"/node_modules/",
131+
"/vendor/",
133132
"/lib/",
134133
"/out/",
135134
"test/e2e"
@@ -154,7 +153,6 @@
154153
}
155154
},
156155
"modulePathIgnorePatterns": [
157-
"<rootDir>/lib/vscode",
158156
"<rootDir>/release-packages",
159157
"<rootDir>/release",
160158
"<rootDir>/release-standalone",

‎renovate.json

-4
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@
66
"matchUpdateTypes": ["minor", "patch", "digest"],
77
"automerge": true,
88
"groupName": "Minor dependency updates"
9-
},
10-
{
11-
"matchPaths": ["lib/vscode/"],
12-
"enabled": false
139
}
1410
],
1511
"vulnerabilityAlerts": {

‎src/browser/pages/vscode.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<link rel="alternate icon" href="{{CS_STATIC_BASE}}/src/browser/media/favicon.ico" />
2828
<link rel="manifest" href="{{CS_STATIC_BASE}}/src/browser/media/manifest.json" crossorigin="use-credentials" />
2929
<!-- PROD_ONLY
30-
<link data-name="vs/workbench/workbench.web.api" rel="stylesheet" href="{{CS_STATIC_BASE}}/lib/vscode/out/vs/workbench/workbench.web.api.css">
30+
<link data-name="vs/workbench/workbench.web.api" rel="stylesheet" href="{{CS_STATIC_BASE}}/vendor/modules/code-oss-dev/out/vs/workbench/workbench.web.api.css">
3131
END_PROD_ONLY -->
3232
<link rel="apple-touch-icon" sizes="192x192" href="{{CS_STATIC_BASE}}/src/browser/media/pwa-icon-192.png" />
3333
<link rel="apple-touch-icon" sizes="512x512" href="{{CS_STATIC_BASE}}/src/browser/media/pwa-icon-512.png" />
@@ -40,13 +40,13 @@
4040

4141
<!-- Startup (do not modify order of script tags!) -->
4242
<script data-cfasync="false" src="{{CS_STATIC_BASE}}/out/browser/pages/vscode.browserified.js"></script>
43-
<script data-cfasync="false" src="{{CS_STATIC_BASE}}/lib/vscode/out/vs/loader.js"></script>
43+
<script data-cfasync="false" src="{{CS_STATIC_BASE}}/vendor/modules/code-oss-dev/out/vs/loader.js"></script>
4444
<script>
4545
performance.mark("code/willLoadWorkbenchMain")
4646
</script>
4747
<!-- PROD_ONLY
48-
<script data-cfasync="false" src="{{CS_STATIC_BASE}}/lib/vscode/out/vs/workbench/workbench.web.api.nls.js"></script>
49-
<script data-cfasync="false" src="{{CS_STATIC_BASE}}/lib/vscode/out/vs/workbench/workbench.web.api.js"></script>
48+
<script data-cfasync="false" src="{{CS_STATIC_BASE}}/vendor/modules/code-oss-dev/out/vs/workbench/workbench.web.api.nls.js"></script>
49+
<script data-cfasync="false" src="{{CS_STATIC_BASE}}/vendor/modules/code-oss-dev/out/vs/workbench/workbench.web.api.js"></script>
5050
END_PROD_ONLY -->
5151
<script>
5252
require(["vs/code/browser/workbench/workbench"], function () {})

‎src/browser/pages/vscode.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ export function _createScriptURL(value: string, origin: string): string {
140140
export function getConfigurationForLoader({ nlsConfig, options, _window }: GetLoaderParams) {
141141
const loader: Loader = {
142142
// Without the full URL VS Code will try to load file://.
143-
baseUrl: `${window.location.origin}${options.csStaticBase}/lib/vscode/out`,
143+
baseUrl: `${window.location.origin}${options.csStaticBase}/vendor/modules/code-oss-dev/out`,
144144
recordStats: true,
145145
trustedTypesPolicy: (_window as FixMeLater).trustedTypes?.createPolicy("amdLoader", {
146146
createScriptURL(value: string): string {

‎src/node/entry.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ async function entry(): Promise<void> {
4949
console.log({
5050
codeServer: version,
5151
commit,
52-
vscode: require("../../lib/vscode/package.json").version,
52+
vscode: require("../../vendor/modules/code-oss-dev/package.json").version,
5353
})
5454
} else {
5555
console.log(version, commit)

‎src/node/main.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { humanPath, isFile, open } from "./util"
1313

1414
export const runVsCodeCli = (args: DefaultedArgs): void => {
1515
logger.debug("forking vs code cli...")
16-
const vscode = cp.fork(path.resolve(__dirname, "../../lib/vscode/out/vs/server/fork"), [], {
16+
const vscode = cp.fork(path.resolve(__dirname, "../../vendor/modules/code-oss-dev/out/vs/server/fork"), [], {
1717
env: {
1818
...process.env,
1919
CODE_SERVER_PARENT_PID: process.pid.toString(),

‎src/node/routes/vscode.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ router.get("/callback", ensureAuthenticated, async (req, res) => {
166166
callbacks.set(id, callback)
167167
callbackEmitter.emit({ id, callback })
168168

169-
res.sendFile(path.join(rootPath, "lib/vscode/resources/web/callback.html"))
169+
res.sendFile(path.join(rootPath, "vendor/modules/code-oss-dev/resources/web/callback.html"))
170170
})
171171

172172
router.get("/fetch-callback", ensureAuthenticated, async (req, res) => {

‎src/node/vscode.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export class VscodeProvider {
1717
private readonly socketProvider = new SocketProxyProvider()
1818

1919
public constructor() {
20-
this.vsRootPath = path.resolve(rootPath, "lib/vscode")
20+
this.vsRootPath = path.resolve(rootPath, "vendor/modules/code-oss-dev")
2121
this.serverRootPath = path.join(this.vsRootPath, "out/vs/server")
2222
wrapper.onDispose(() => this.dispose())
2323
}

‎test/unit/browser/pages/vscode.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ describe("vscode", () => {
253253
})
254254

255255
expect(loader).toStrictEqual({
256-
baseUrl: "http://localhost//lib/vscode/out",
256+
baseUrl: "http://localhost//vendor/modules/code-oss-dev/out",
257257
paths: {
258258
"iconv-lite-umd": "../node_modules/iconv-lite-umd/lib/iconv-lite-umd.js",
259259
jschardet: "../node_modules/jschardet/dist/jschardet.min.js",

‎test/unit/node/proxy.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import bodyParser from "body-parser"
22
import * as express from "express"
3-
import * as nodeFetch from "node-fetch"
43
import * as http from "http"
4+
import * as nodeFetch from "node-fetch"
55
import { HttpCode } from "../../../src/common/http"
66
import { proxy } from "../../../src/node/proxy"
7+
import { getAvailablePort } from "../../utils/helpers"
78
import * as httpserver from "../../utils/httpserver"
89
import * as integration from "../../utils/integration"
9-
import { getAvailablePort } from "../../utils/helpers"
1010

1111
describe("proxy", () => {
1212
const nhooyrDevServer = new httpserver.HttpServer()

‎test/utils/helpers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { promises as fs } from "fs"
2+
import * as net from "net"
23
import * as os from "os"
34
import * as path from "path"
4-
import * as net from "net"
55

66
/**
77
* Return a mock of @coder/logger.

‎vendor/package.json

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"name": "vendor",
3+
"version": "1.0.0",
4+
"license": "MIT",
5+
"private": true,
6+
"scripts": {
7+
"postinstall": "./postinstall.sh"
8+
},
9+
"devDependencies": {
10+
"code-oss-dev": "cdr/vscode#96a09a7846538c3bbedb6a2aeca729537bb8202b"
11+
}
12+
}

‎vendor/postinstall.sh

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
main() {
5+
echo 'Installing VS Code dependencies...'
6+
cd modules/code-oss-dev
7+
yarn install --frozen-lockfile
8+
}
9+
10+
main "$@"

‎vendor/yarn.lock

+1,400
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)
Please sign in to comment.