Add linkup command to improve link functionality
This commit is contained in:
parent
6eda7ae81f
commit
2504f6fce4
1
.gitignore
vendored
1
.gitignore
vendored
@ -12,6 +12,7 @@ vendor/modules
|
|||||||
node-*
|
node-*
|
||||||
/plugins
|
/plugins
|
||||||
/lib/coder-cloud-agent
|
/lib/coder-cloud-agent
|
||||||
|
/lib/linkup
|
||||||
.home
|
.home
|
||||||
coverage
|
coverage
|
||||||
**/.DS_Store
|
**/.DS_Store
|
||||||
|
@ -15,20 +15,29 @@ main() {
|
|||||||
chmod +x out/node/entry.js
|
chmod +x out/node/entry.js
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! [ -f ./lib/coder-cloud-agent ]; then
|
|
||||||
echo "Downloading the cloud agent..."
|
|
||||||
|
|
||||||
# for arch; we do not use OS from lib.sh and get our own.
|
# for arch; we do not use OS from lib.sh and get our own.
|
||||||
# lib.sh normalizes macos to darwin - but cloud-agent's binaries do not
|
# lib.sh normalizes macos to darwin - but cloud-agent's binaries do not
|
||||||
source ./ci/lib.sh
|
source ./ci/lib.sh
|
||||||
OS="$(uname | tr '[:upper:]' '[:lower:]')"
|
OS="$(uname | tr '[:upper:]' '[:lower:]')"
|
||||||
|
|
||||||
|
if ! [ -f ./lib/coder-cloud-agent ]; then
|
||||||
|
echo "Downloading the cloud agent..."
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
curl -fsSL "https://github.com/cdr/cloud-agent/releases/latest/download/cloud-agent-$OS-$ARCH" -o ./lib/coder-cloud-agent
|
curl -fsSL "https://github.com/cdr/cloud-agent/releases/latest/download/cloud-agent-$OS-$ARCH" -o ./lib/coder-cloud-agent
|
||||||
chmod +x ./lib/coder-cloud-agent
|
chmod +x ./lib/coder-cloud-agent
|
||||||
set -e
|
set -e
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! [ -f ./lib/linkup ]; then
|
||||||
|
echo "Downloading Link agent..."
|
||||||
|
|
||||||
|
set +e
|
||||||
|
curl -fsSL "https://storage.googleapis.com/coder-link-releases/latest/linkup-$OS-$ARCH" -o ./lib/linkup
|
||||||
|
chmod +x ./lib/linkup
|
||||||
|
set -e
|
||||||
|
fi
|
||||||
|
|
||||||
yarn browserify out/browser/register.js -o out/browser/register.browserified.js
|
yarn browserify out/browser/register.js -o out/browser/register.browserified.js
|
||||||
yarn browserify out/browser/pages/login.js -o out/browser/pages/login.browserified.js
|
yarn browserify out/browser/pages/login.js -o out/browser/pages/login.browserified.js
|
||||||
yarn browserify out/browser/pages/vscode.js -o out/browser/pages/vscode.browserified.js
|
yarn browserify out/browser/pages/vscode.js -o out/browser/pages/vscode.browserified.js
|
||||||
|
@ -61,6 +61,7 @@ EOF
|
|||||||
rsync node_modules/ "$RELEASE_PATH/node_modules"
|
rsync node_modules/ "$RELEASE_PATH/node_modules"
|
||||||
mkdir -p "$RELEASE_PATH/lib"
|
mkdir -p "$RELEASE_PATH/lib"
|
||||||
rsync ./lib/coder-cloud-agent "$RELEASE_PATH/lib"
|
rsync ./lib/coder-cloud-agent "$RELEASE_PATH/lib"
|
||||||
|
rsync ./lib/linkup "$RELEASE_PATH/lib"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,6 +63,12 @@ main() {
|
|||||||
echo "Failed to download cloud agent; --link will not work"
|
echo "Failed to download cloud agent; --link will not work"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if curl -fsSL "https://storage.googleapis.com/coder-link-releases/latest/linkup-$OS-$ARCH" -o ./lib/linkup; then
|
||||||
|
chmod +x ./lib/linkup
|
||||||
|
else
|
||||||
|
echo "Failed to download Link agent; the Link extension will not work"
|
||||||
|
fi
|
||||||
|
|
||||||
if ! vscode_yarn; then
|
if ! vscode_yarn; then
|
||||||
echo "You may not have the required dependencies to build the native modules."
|
echo "You may not have the required dependencies to build the native modules."
|
||||||
echo "Please see https://github.com/cdr/code-server/blob/master/docs/npm.md"
|
echo "Please see https://github.com/cdr/code-server/blob/master/docs/npm.md"
|
||||||
|
22
src/node/link.ts
Normal file
22
src/node/link.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import { logger } from "@coder/logger"
|
||||||
|
import { spawn } from "child_process"
|
||||||
|
import path from "path"
|
||||||
|
|
||||||
|
export function startLink(port: number): Promise<void> {
|
||||||
|
logger.debug(`running link targetting ${port}`)
|
||||||
|
|
||||||
|
const agent = spawn(path.resolve(__dirname, "../../lib/linkup"), ["--devurl", `code:${port}:code-server`], {
|
||||||
|
shell: false,
|
||||||
|
})
|
||||||
|
return new Promise((res, rej) => {
|
||||||
|
agent.on("error", rej)
|
||||||
|
agent.on("close", (code) => {
|
||||||
|
if (code !== 0) {
|
||||||
|
return rej({
|
||||||
|
message: `Link exited with ${code}`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
res()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
@ -8,6 +8,7 @@ import { createApp, ensureAddress } from "./app"
|
|||||||
import { AuthType, DefaultedArgs, Feature } from "./cli"
|
import { AuthType, DefaultedArgs, Feature } from "./cli"
|
||||||
import { coderCloudBind } from "./coder_cloud"
|
import { coderCloudBind } from "./coder_cloud"
|
||||||
import { commit, version } from "./constants"
|
import { commit, version } from "./constants"
|
||||||
|
import { startLink } from "./link"
|
||||||
import { register } from "./routes"
|
import { register } from "./routes"
|
||||||
import { humanPath, isFile, open } from "./util"
|
import { humanPath, isFile, open } from "./util"
|
||||||
|
|
||||||
@ -129,6 +130,15 @@ export const runCodeServer = async (args: DefaultedArgs): Promise<http.Server> =
|
|||||||
logger.info(" - Connected to cloud agent")
|
logger.info(" - Connected to cloud agent")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const port = parseInt(serverAddress.split(":").pop() as string, 10)
|
||||||
|
startLink(port).catch((ex) => {
|
||||||
|
logger.debug("Link daemon exited!", field("error", ex))
|
||||||
|
})
|
||||||
|
} catch (ex) {
|
||||||
|
logger.debug("Failed to start link daemon!", ex)
|
||||||
|
}
|
||||||
|
|
||||||
if (args.enable && args.enable.length > 0) {
|
if (args.enable && args.enable.length > 0) {
|
||||||
logger.info("Enabling the following experimental features:")
|
logger.info("Enabling the following experimental features:")
|
||||||
args.enable.forEach((feature) => {
|
args.enable.forEach((feature) => {
|
||||||
|
Reference in New Issue
Block a user