Skip to content

Commit

Permalink
Add linkup command to improve link functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
GirlBossRush committed Sep 29, 2021
1 parent 6eda7ae commit 2504f6f
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 5 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ vendor/modules
node-*
/plugins
/lib/coder-cloud-agent
/lib/linkup
.home
coverage
**/.DS_Store
Expand Down
19 changes: 14 additions & 5 deletions ci/build/build-code-server.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,29 @@ main() {
chmod +x out/node/entry.js
fi

# 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
source ./ci/lib.sh
OS="$(uname | tr '[:upper:]' '[:lower:]')"

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.
# lib.sh normalizes macos to darwin - but cloud-agent's binaries do not
source ./ci/lib.sh
OS="$(uname | tr '[:upper:]' '[:lower:]')"

set +e
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
set -e
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/pages/login.js -o out/browser/pages/login.browserified.js
yarn browserify out/browser/pages/vscode.js -o out/browser/pages/vscode.browserified.js
Expand Down
1 change: 1 addition & 0 deletions ci/build/build-release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ EOF
rsync node_modules/ "$RELEASE_PATH/node_modules"
mkdir -p "$RELEASE_PATH/lib"
rsync ./lib/coder-cloud-agent "$RELEASE_PATH/lib"
rsync ./lib/linkup "$RELEASE_PATH/lib"
fi
}

Expand Down
6 changes: 6 additions & 0 deletions ci/build/npm-postinstall.sh
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ main() {
echo "Failed to download cloud agent; --link will not work"
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
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"
Expand Down
22 changes: 22 additions & 0 deletions src/node/link.ts
Original file line number Diff line number Diff line change
@@ -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()
})
})
}
10 changes: 10 additions & 0 deletions src/node/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { createApp, ensureAddress } from "./app"
import { AuthType, DefaultedArgs, Feature } from "./cli"
import { coderCloudBind } from "./coder_cloud"
import { commit, version } from "./constants"
import { startLink } from "./link"
import { register } from "./routes"
import { humanPath, isFile, open } from "./util"

Expand Down Expand Up @@ -129,6 +130,15 @@ export const runCodeServer = async (args: DefaultedArgs): Promise<http.Server> =
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) {
logger.info("Enabling the following experimental features:")
args.enable.forEach((feature) => {
Expand Down

0 comments on commit 2504f6f

Please sign in to comment.