diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..94143827ed065ca0d7d5be1b765d255c5c32cd9a --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..ec4554594811dd280c102932a58cdfeb6ac6867c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +FROM node:8.15.0 + +# Install VS Code's deps. These are the only two it seems we need. +RUN apt-get update +RUN apt-get install -y libxkbfile-dev libsecret-1-dev + +# Ensure latest yarn. +RUN npm install -g yarn + +# In the future, we can use https://github.com/yarnpkg/rfcs/pull/53 to make it use the node_modules +# directly which should be faster. +WORKDIR /src +COPY . . +RUN yarn +RUN yarn task build:server:binary + +# We deploy with ubuntu so that devs have a familiar environemnt. +FROM ubuntu:18.10 +RUN apt-get update +RUN apt-get install -y openssl +RUN apt-get install -y net-tools +WORKDIR /root/project +COPY --from=0 /src/packages/server/cli-linux /usr/local/bin/code-server +EXPOSE 8443 +# Unfortunately `.` does not work with code-server. +CMD code-server $PWD diff --git a/README.md b/README.md index 5a52b6d2ad4a6b5a69efa1f6d88c3c69bef41246..800bc8ec166c7283deae321c08ba638498acc667 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,11 @@ `code-server` is [VS Code](https://github.com/Microsoft/vscode) running on a remote server, accessible through the browser. +Try it out: +```bash +docker run -p localhost:8443:8443 -v "${PWD}:/root/project" codercom/code-server code-server --allow-http --no-auth +``` + - Code on your Chromebook, tablet, and laptop with a consistent dev environment. - If you have a Windows or Mac workstation, more easily develop for Linux. - Take advantage of large cloud servers to speed up tests, compilations, downloads, and more. @@ -18,9 +23,15 @@ ## Getting Started +### Hosted + [Try `code-server` now](https://coder.com/signup) for free at coder.com. -**OR** +### Docker + +See docker oneliner mentioned above. Dockerfile is at [/Dockerfile](/Dockerfile). + +### Binaries 1. [Download a binary](https://github.com/codercom/code-server/releases) (Linux and OSX supported. Windows coming soon) 2. Start the binary with the project directory as the first argument diff --git a/packages/runner/src/runner.ts b/packages/runner/src/runner.ts index 93bea4837a203bfee43d6f567ebd91f0e7981968..e926b94632a695eb587585256118aada71dabae0 100644 --- a/packages/runner/src/runner.ts +++ b/packages/runner/src/runner.ts @@ -1,5 +1,5 @@ import * as cp from "child_process"; -import { logger, Logger, field, time } from "@coder/logger"; +import {field, Logger, logger, time} from "@coder/logger"; export interface CommandResult { readonly exitCode: number; @@ -9,7 +9,9 @@ export interface CommandResult { const execute = (command: string, args: string[] = [], options: cp.SpawnOptions, logger: Logger): Promise => { let resolve: (result: CommandResult) => void; - const prom = new Promise(res => resolve = res); + const prom = new Promise((res): void => { + resolve = res; + }); const stdout: string[] = []; const stderr: string[] = []; @@ -45,6 +47,7 @@ export type TaskFunction = (runner: Runner, ...args: any[]) => void | Promise; } @@ -91,10 +94,22 @@ export const run = (name: string = process.argv[2]): void | Promise => { cwd = path; }, execute(command: string, args: string[] = [], env?: object): Promise { - return execute(command, args, { + const prom = execute(command, args, { cwd, env: env as NodeJS.ProcessEnv, }, log); + + return prom.then((result: CommandResult) => { + if (result.exitCode != 0) { + log.error("failed", + field("exitCode", result.exitCode), + field("stdout", result.stdout), + field("stderr", result.stderr) + ); + } + + return result; + }); }, }, ...process.argv.slice(3)); diff --git a/scripts/build.sh b/scripts/build.sh index 7cb6f1c2805d55e37790df76b92ee00a5cbf2121..3d954fee6c971c3339a626084dd50c6075cbfc9b 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,5 +1,4 @@ #!/bin/bash set -e -npm install -g cross-env yarn task build:server:binary