feat: proxy URI environment variable (#4681)
* Add test extension This will let us test extension-related features (like the proxy URI). I removed the environment variables in the script because they override the ones you set yourself. We still set defaults in constants.ts. * Add changelog entry for VSCODE_PROXY_URI * Add terminal test for VSCODE_PROXY_URI * Update VS Code This adds the VSCODE_PROXY_URI environment variable.
This commit is contained in:
parent
f04fcf2d64
commit
3d999986b2
@ -40,6 +40,10 @@ implementation (#4414).
|
|||||||
- The last opened folder/workspace is no longer stored separately in the
|
- The last opened folder/workspace is no longer stored separately in the
|
||||||
settings file (we rely on the already-existing query object instead).
|
settings file (we rely on the already-existing query object instead).
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `VSCODE_PROXY_URI` env var for use in the terminal and extensions.
|
||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
- `--link` is now deprecated (#4562).
|
- `--link` is now deprecated (#4562).
|
||||||
|
@ -3,20 +3,30 @@ set -euo pipefail
|
|||||||
|
|
||||||
main() {
|
main() {
|
||||||
cd "$(dirname "$0")/../.."
|
cd "$(dirname "$0")/../.."
|
||||||
|
source ./ci/lib.sh
|
||||||
|
|
||||||
echo "Installing code-server test dependencies..."
|
pushd test
|
||||||
|
echo "Installing dependencies for $PWD"
|
||||||
|
yarn install
|
||||||
|
popd
|
||||||
|
|
||||||
local args=(install)
|
local args=(install)
|
||||||
if [[ ${CI-} ]]; then
|
if [[ ${CI-} ]]; then
|
||||||
args+=(--frozen-lockfile)
|
args+=(--frozen-lockfile)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd test
|
pushd test
|
||||||
|
echo "Installing dependencies for $PWD"
|
||||||
yarn "${args[@]}"
|
yarn "${args[@]}"
|
||||||
cd ..
|
popd
|
||||||
|
|
||||||
cd vendor
|
pushd test/e2e/extensions/test-extension
|
||||||
echo "Installing vendor dependencies..."
|
echo "Installing dependencies for $PWD"
|
||||||
|
yarn "${args[@]}"
|
||||||
|
popd
|
||||||
|
|
||||||
|
pushd vendor
|
||||||
|
echo "Installing dependencies for $PWD"
|
||||||
|
|
||||||
# We install in 'modules' instead of 'node_modules' because VS Code's
|
# We install in 'modules' instead of 'node_modules' because VS Code's
|
||||||
# extensions use a webpack config which cannot differentiate between its own
|
# extensions use a webpack config which cannot differentiate between its own
|
||||||
@ -33,6 +43,8 @@ main() {
|
|||||||
|
|
||||||
# Finally, run the vendor `postinstall`
|
# Finally, run the vendor `postinstall`
|
||||||
yarn run postinstall
|
yarn run postinstall
|
||||||
|
|
||||||
|
popd
|
||||||
}
|
}
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
@ -13,6 +13,11 @@ main() {
|
|||||||
|
|
||||||
source ./ci/lib.sh
|
source ./ci/lib.sh
|
||||||
|
|
||||||
|
pushd test/e2e/extensions/test-extension
|
||||||
|
echo "Building test extension"
|
||||||
|
yarn build
|
||||||
|
popd
|
||||||
|
|
||||||
local dir="$PWD"
|
local dir="$PWD"
|
||||||
if [[ ! ${CODE_SERVER_TEST_ENTRY-} ]]; then
|
if [[ ! ${CODE_SERVER_TEST_ENTRY-} ]]; then
|
||||||
echo "Set CODE_SERVER_TEST_ENTRY to test another build of code-server"
|
echo "Set CODE_SERVER_TEST_ENTRY to test another build of code-server"
|
||||||
|
@ -6,6 +6,7 @@ main() {
|
|||||||
|
|
||||||
source ./ci/lib.sh
|
source ./ci/lib.sh
|
||||||
|
|
||||||
|
echo "Building test plugin"
|
||||||
pushd test/unit/node/test-plugin
|
pushd test/unit/node/test-plugin
|
||||||
make -s out/index.js
|
make -s out/index.js
|
||||||
popd
|
popd
|
||||||
|
12
test/e2e/extensions.test.ts
Normal file
12
test/e2e/extensions.test.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import { describe, test } from "./baseFixture"
|
||||||
|
|
||||||
|
describe("Extensions", true, () => {
|
||||||
|
// This will only work if the test extension is loaded into code-server.
|
||||||
|
test("should have access to VSCODE_PROXY_URI", async ({ codeServerPage }) => {
|
||||||
|
const address = await codeServerPage.address()
|
||||||
|
|
||||||
|
await codeServerPage.executeCommandViaMenus("code-server: Get proxy URI")
|
||||||
|
|
||||||
|
await codeServerPage.page.waitForSelector(`text=${address}/proxy/{{port}}`)
|
||||||
|
})
|
||||||
|
})
|
1
test/e2e/extensions/test-extension/.gitignore
vendored
Normal file
1
test/e2e/extensions/test-extension/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/extension.js
|
13
test/e2e/extensions/test-extension/extension.ts
Normal file
13
test/e2e/extensions/test-extension/extension.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import * as vscode from "vscode"
|
||||||
|
|
||||||
|
export function activate(context: vscode.ExtensionContext) {
|
||||||
|
context.subscriptions.push(
|
||||||
|
vscode.commands.registerCommand("codeServerTest.proxyUri", () => {
|
||||||
|
if (process.env.VSCODE_PROXY_URI) {
|
||||||
|
vscode.window.showInformationMessage(process.env.VSCODE_PROXY_URI)
|
||||||
|
} else {
|
||||||
|
vscode.window.showErrorMessage("No proxy URI was set")
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
}
|
29
test/e2e/extensions/test-extension/package.json
Normal file
29
test/e2e/extensions/test-extension/package.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"name": "code-server-extension",
|
||||||
|
"description": "code-server test extension",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"publisher": "cdr",
|
||||||
|
"activationEvents": [
|
||||||
|
"onCommand:codeServerTest.proxyUri"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"vscode": "^1.56.0"
|
||||||
|
},
|
||||||
|
"main": "./extension.js",
|
||||||
|
"contributes": {
|
||||||
|
"commands": [
|
||||||
|
{
|
||||||
|
"command": "codeServerTest.proxyUri",
|
||||||
|
"title": "Get proxy URI",
|
||||||
|
"category": "code-server"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/vscode": "^1.56.0",
|
||||||
|
"typescript": "^4.0.5"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc extension.ts"
|
||||||
|
}
|
||||||
|
}
|
10
test/e2e/extensions/test-extension/tsconfig.json
Normal file
10
test/e2e/extensions/test-extension/tsconfig.json
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "es2020",
|
||||||
|
"module": "commonjs",
|
||||||
|
"outDir": ".",
|
||||||
|
"strict": true,
|
||||||
|
"baseUrl": "./"
|
||||||
|
},
|
||||||
|
"include": ["./extension.ts"]
|
||||||
|
}
|
13
test/e2e/extensions/test-extension/yarn.lock
Normal file
13
test/e2e/extensions/test-extension/yarn.lock
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@types/vscode@^1.56.0":
|
||||||
|
version "1.57.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.57.0.tgz#cc648e0573b92f725cd1baf2621f8da9f8bc689f"
|
||||||
|
integrity sha512-FeznBFtIDCWRluojTsi9c3LLcCHOXP5etQfBK42+ixo1CoEAchkw39tuui9zomjZuKfUVL33KZUDIwHZ/xvOkQ==
|
||||||
|
|
||||||
|
typescript@^4.0.5:
|
||||||
|
version "4.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805"
|
||||||
|
integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==
|
@ -88,6 +88,8 @@ export class CodeServer {
|
|||||||
path.join(dir, "config.yaml"),
|
path.join(dir, "config.yaml"),
|
||||||
"--user-data-dir",
|
"--user-data-dir",
|
||||||
dir,
|
dir,
|
||||||
|
"--extensions-dir",
|
||||||
|
path.join(__dirname, "../extensions"),
|
||||||
// The last argument is the workspace to open.
|
// The last argument is the workspace to open.
|
||||||
dir,
|
dir,
|
||||||
],
|
],
|
||||||
|
@ -5,19 +5,14 @@ import { clean, tmpdir } from "../utils/helpers"
|
|||||||
import { describe, expect, test } from "./baseFixture"
|
import { describe, expect, test } from "./baseFixture"
|
||||||
|
|
||||||
describe("Integrated Terminal", true, () => {
|
describe("Integrated Terminal", true, () => {
|
||||||
// Create a new context with the saved storage state
|
|
||||||
// so we don't have to logged in
|
|
||||||
const testFileName = "pipe"
|
|
||||||
const testString = "new string test from e2e test"
|
|
||||||
|
|
||||||
const testName = "integrated-terminal"
|
const testName = "integrated-terminal"
|
||||||
test.beforeAll(async () => {
|
test.beforeAll(async () => {
|
||||||
await clean(testName)
|
await clean(testName)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("should echo a string to a file", async ({ codeServerPage }) => {
|
test("should have access to VSCODE_PROXY_URI", async ({ codeServerPage }) => {
|
||||||
const tmpFolderPath = await tmpdir(testName)
|
const tmpFolderPath = await tmpdir(testName)
|
||||||
const tmpFile = path.join(tmpFolderPath, testFileName)
|
const tmpFile = path.join(tmpFolderPath, "pipe")
|
||||||
|
|
||||||
const command = `mkfifo '${tmpFile}' && cat '${tmpFile}'`
|
const command = `mkfifo '${tmpFile}' && cat '${tmpFile}'`
|
||||||
const exec = util.promisify(cp.exec)
|
const exec = util.promisify(cp.exec)
|
||||||
@ -27,12 +22,12 @@ describe("Integrated Terminal", true, () => {
|
|||||||
await codeServerPage.focusTerminal()
|
await codeServerPage.focusTerminal()
|
||||||
|
|
||||||
await codeServerPage.page.waitForLoadState("load")
|
await codeServerPage.page.waitForLoadState("load")
|
||||||
await codeServerPage.page.keyboard.type(`echo ${testString} > ${tmpFile}`)
|
await codeServerPage.page.keyboard.type(`printenv VSCODE_PROXY_URI > ${tmpFile}`)
|
||||||
await codeServerPage.page.keyboard.press("Enter")
|
await codeServerPage.page.keyboard.press("Enter")
|
||||||
// It may take a second to process
|
// It may take a second to process
|
||||||
await codeServerPage.page.waitForTimeout(1000)
|
await codeServerPage.page.waitForTimeout(1000)
|
||||||
|
|
||||||
const { stdout } = await output
|
const { stdout } = await output
|
||||||
expect(stdout).toMatch(testString)
|
expect(stdout).toMatch(await codeServerPage.address())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -25,12 +25,10 @@ const config: PlaywrightTestConfig = {
|
|||||||
name: "Chromium",
|
name: "Chromium",
|
||||||
use: { browserName: "chromium" },
|
use: { browserName: "chromium" },
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
name: "Firefox",
|
name: "Firefox",
|
||||||
use: { browserName: "firefox" },
|
use: { browserName: "firefox" },
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
name: "WebKit",
|
name: "WebKit",
|
||||||
use: { browserName: "webkit" },
|
use: { browserName: "webkit" },
|
||||||
|
2
vendor/package.json
vendored
2
vendor/package.json
vendored
@ -7,6 +7,6 @@
|
|||||||
"postinstall": "./postinstall.sh"
|
"postinstall": "./postinstall.sh"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"code-oss-dev": "cdr/vscode#69a6ce45fc5b883aa8a950e10b79fd083eb0a7d7"
|
"code-oss-dev": "cdr/vscode#d4c3c65d5e17a240a95e735a349e311aaf721b60"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
4
vendor/yarn.lock
vendored
4
vendor/yarn.lock
vendored
@ -274,9 +274,9 @@ clone-response@^1.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
mimic-response "^1.0.0"
|
mimic-response "^1.0.0"
|
||||||
|
|
||||||
code-oss-dev@cdr/vscode#69a6ce45fc5b883aa8a950e10b79fd083eb0a7d7:
|
code-oss-dev@cdr/vscode#d4c3c65d5e17a240a95e735a349e311aaf721b60:
|
||||||
version "1.63.0"
|
version "1.63.0"
|
||||||
resolved "https://codeload.github.com/cdr/vscode/tar.gz/69a6ce45fc5b883aa8a950e10b79fd083eb0a7d7"
|
resolved "https://codeload.github.com/cdr/vscode/tar.gz/d4c3c65d5e17a240a95e735a349e311aaf721b60"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@microsoft/applicationinsights-web" "^2.6.4"
|
"@microsoft/applicationinsights-web" "^2.6.4"
|
||||||
"@parcel/watcher" "2.0.3"
|
"@parcel/watcher" "2.0.3"
|
||||||
|
Reference in New Issue
Block a user