diff options
author | Martin Aeschlimann <martinae@microsoft.com> | 2022-03-15 13:35:23 +0300 |
---|---|---|
committer | Martin Aeschlimann <martinae@microsoft.com> | 2022-03-15 13:35:30 +0300 |
commit | 436b711622331f0567de6ad8df331d5c1ecff967 (patch) | |
tree | 9fe3e85eafd8bc9ea7b7db99d50008c88a82c076 | |
parent | 1dd72e5d6ebbbfc05704d9eb2fcace742d6ca737 (diff) |
Configure server using env vars. Fixes #141333
-rw-r--r-- | scripts/code-server.js | 76 | ||||
-rw-r--r-- | src/server-main.js | 8 |
2 files changed, 40 insertions, 44 deletions
diff --git a/scripts/code-server.js b/scripts/code-server.js index f4d34131cb3..8f2c630fc1f 100644 --- a/scripts/code-server.js +++ b/scripts/code-server.js @@ -8,23 +8,15 @@ const cp = require('child_process'); const path = require('path'); const opn = require('opn'); -const crypto = require('crypto'); const minimist = require('minimist'); -function main() { +async function main() { const args = minimist(process.argv.slice(2), { boolean: [ 'help', 'launch' - ], - string: [ - 'host', - 'port', - 'driver', - 'connection-token', - 'server-data-dir' - ], + ] }); if (args.help) { @@ -36,46 +28,42 @@ function main() { return; } - const serverArgs = process.argv.slice(2).filter(v => v !== '--launch'); - - const HOST = args['host'] ?? 'localhost'; - const PORT = args['port'] ?? '9888'; - const TOKEN = args['connection-token'] ?? String(crypto.randomInt(0xffffffff)); - - if (args['connection-token'] === undefined && args['connection-token-file'] === undefined && !args['without-connection-token']) { - serverArgs.push('--connection-token', TOKEN); - } - if (args['host'] === undefined) { - serverArgs.push('--host', HOST); - } - if (args['port'] === undefined) { - serverArgs.push('--port', PORT); - } + process.env['VSCODE_SERVER_PORT'] = '9888'; - startServer(serverArgs); + const serverArgs = process.argv.slice(2).filter(v => v !== '--launch'); + const addr = await startServer(serverArgs); if (args['launch']) { - opn(`http://${HOST}:${PORT}/?tkn=${TOKEN}`); + opn(addr); } } function startServer(programArgs) { - const env = { ...process.env }; - - const entryPoint = path.join(__dirname, '..', 'out', 'server-main.js'); - - console.log(`Starting server: ${entryPoint} ${programArgs.join(' ')}`); - const proc = cp.spawn(process.execPath, [entryPoint, ...programArgs], { env, stdio: 'inherit' }); - - proc.on('exit', (code) => process.exit(code)); - - process.on('exit', () => proc.kill()); - process.on('SIGINT', () => { - proc.kill(); - process.exit(128 + 2); // https://nodejs.org/docs/v14.16.0/api/process.html#process_signal_events - }); - process.on('SIGTERM', () => { - proc.kill(); - process.exit(128 + 15); // https://nodejs.org/docs/v14.16.0/api/process.html#process_signal_events + return new Promise((s, e) => { + const env = { ...process.env }; + const entryPoint = path.join(__dirname, '..', 'out', 'server-main.js'); + + console.log(`Starting server: ${entryPoint} ${programArgs.join(' ')}`); + const proc = cp.spawn(process.execPath, [entryPoint, ...programArgs], { env, stdio: [process.stdin, null, process.stderr] }); + proc.stdout.on('data', e => { + const data = e.toString(); + console.log(data); + const m = data.match(/Web UI available at (.*)/); + if (m) { + s(m[1]); + } + }); + + proc.on('exit', (code) => process.exit(code)); + + process.on('exit', () => proc.kill()); + process.on('SIGINT', () => { + proc.kill(); + process.exit(128 + 2); // https://nodejs.org/docs/v14.16.0/api/process.html#process_signal_events + }); + process.on('SIGTERM', () => { + proc.kill(); + process.exit(128 + 15); // https://nodejs.org/docs/v14.16.0/api/process.html#process_signal_events + }); }); } diff --git a/src/server-main.js b/src/server-main.js index 79f4d4d0112..d8e5fdd45dd 100644 --- a/src/server-main.js +++ b/src/server-main.js @@ -24,6 +24,14 @@ async function start() { string: ['install-extension', 'install-builtin-extension', 'uninstall-extension', 'locate-extension', 'socket-path', 'host', 'port', 'pick-port', 'compatibility'], alias: { help: 'h', version: 'v' } }); + ['host', 'port', 'accept-server-license-terms'].forEach(e => { + if (!parsedArgs[e]) { + const envValue = process.env[`VSCODE_SERVER_${e.toUpperCase().replace('-', '_')}`]; + if (envValue) { + parsedArgs[e] = envValue; + } + } + }); const extensionLookupArgs = ['list-extensions', 'locate-extension']; const extensionInstallArgs = ['install-extension', 'install-builtin-extension', 'uninstall-extension']; |