diff --git a/.stylelintrc.yaml b/.stylelintrc.yaml index 9cc924cb..af5c94bc 100644 --- a/.stylelintrc.yaml +++ b/.stylelintrc.yaml @@ -1,2 +1,2 @@ extends: - - stylelint-config-standard + - stylelint-config-recommended diff --git a/.travis.yml b/.travis.yml index 603b00a2..17b1e1d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,36 +2,26 @@ language: minimal jobs: include: - - stage: Code - name: Format - script: ./ci/image/run.sh "yarn && yarn vscode && yarn fmt" - - name: Lint - script: ./ci/image/run.sh "yarn && yarn vscode && yarn lint" - name: Test - script: ./ci/image/run.sh "yarn && yarn vscode && yarn test" - - - stage: Release - name: Linux Release + script: ./ci/image/run.sh "yarn && yarn vscode && ./ci/ci.sh" + deploy: null + - name: Linux Release + if: tag IS present script: - travis_wait 60 ./ci/image/run.sh "yarn && yarn vscode && ci/release.sh" - ./ci/release-image/push.sh - name: Linux ARM64 Release + if: tag IS present script: - travis_wait 60 ./ci/image/run.sh "yarn && yarn vscode && ci/release.sh" - ./ci/release-image/push.sh arch: arm64 - name: MacOS Release + if: tag IS present os: osx language: node_js node_js: 12 script: yarn && yarn vscode && travis_wait 60 ci/release.sh - - name: Docker Release - script: ./ci/release-image/push.sh - -stages: - - name: Code - - name: Release - if: env(TRAVIS_TAG) IS present deploy: - provider: releases @@ -45,7 +35,6 @@ deploy: - release/*.zip on: tags: true - condition: $TRAVIS_BUILD_STAGE_NAME == Release cache: timeout: 600 diff --git a/README.md b/README.md index 1abcd938..4bdc10e7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# code-server · [![MIT license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/cdr/code-server/blob/master/LICENSE) [!["Latest Release"](https://img.shields.io/github/release/cdr/code-server.svg)](https://github.com/cdr/code-server/releases/latest) [![Build Status](https://img.shields.io/travis/com/cdr/code-server/master)](https://github.com/cdr/code-server) +# code-server `code-server` is [VS Code](https://github.com/Microsoft/vscode) running on a remote server, accessible through the browser. @@ -16,12 +16,7 @@ docker run -it -p 127.0.0.1:8080:8080 -v "$PWD:/home/coder/project" codercom/cod compilations, downloads, and more. Preserve battery life when you're on the go since all intensive computation runs on your server. -![Screenshot](/doc/assets/ide.gif) - -## VS Code - -- See [our VS Code readme](./src/vscode) for more information about how - code-server and VS Code work together. +![Example gif](/doc/assets/ide.gif) ## Getting Started @@ -33,16 +28,11 @@ docker run -it -p 127.0.0.1:8080:8080 -v "$PWD:/home/coder/project" codercom/cod - Secure connection over HTTPS or localhost (required for service workers and clipboard support). - For Linux: GLIBC 2.17 or later and GLIBCXX 3.4.15 or later. -- Docker (for Docker versions of `code-server`). ### Run over SSH Use [sshcode](https://github.com/codercom/sshcode) for a simple setup. -### Docker - -See the Docker one-liner mentioned above. Dockerfile is at [/Dockerfile](/Dockerfile). - ### Digital Ocean [![Create a Droplet](./doc/assets/droplet.svg)](https://marketplace.digitalocean.com/apps/code-server?action=deploy) @@ -57,87 +47,11 @@ See the Docker one-liner mentioned above. Dockerfile is at [/Dockerfile](/Docker - For self-hosting and other information see [doc/quickstart.md](doc/quickstart.md). - For hosting on cloud platforms see [doc/deploy.md](doc/deploy.md). -### Build +## FAQ -- [VS Code prerequisites](https://github.com/Microsoft/vscode/wiki/How-to-Contribute#prerequisites) - -```shell -yarn -yarn build -node build/out/entry.js # You can run the built JavaScript with Node. -yarn binary # Or you can package it into a binary. -``` - -If changes are made to the patch and you've built previously you must manually -reset VS Code then run `yarn patch:apply`. - -## Security - -### Authentication - -By default `code-server` enables password authentication using a randomly -generated password. You can set the `PASSWORD` environment variable to use your -own instead or use `--auth none` to disable password authentication. - -Do not expose `code-server` to the open internet without some form of -authentication. - -### Encrypting traffic with HTTPS - -If you aren't doing SSL termination elsewhere you can directly give -`code-server` a certificate with `code-server --cert` followed by the path to -your certificate. Additionally, you can use certificate keys with `--cert-key` -followed by the path to your key. If you pass `--cert` without any path -`code-server` will generate a self-signed certificate. - -If `code-server` has been passed a certificate it will also respond to HTTPS -requests and will redirect all HTTP requests to HTTPS. Otherwise it will respond -only to HTTP requests. - -You can use [Let's Encrypt](https://letsencrypt.org/) to get an SSL certificate -for free. - -Do not expose `code-server` to the open internet without SSL, whether built-in -or through a proxy. - -## Future - -- **Stay up to date!** Get notified about new releases of `code-server`. - ![Screenshot](/doc/assets/release.gif) -- Electron and Chrome OS applications to bridge the gap between local<->remote. - -## Telemetry - -Use the `--disable-telemetry` flag to completely disable telemetry. We use the -data collected to improve code-server. - -## Contributing - -### Development - -- [VS Code prerequisites](https://github.com/Microsoft/vscode/wiki/How-to-Contribute#prerequisites) - -```shell -yarn -yarn watch # Visit http://localhost:8080 once completed. -``` - -If you run into issues about a different version of Node being used, try running -`npm rebuild` in the VS Code directory. - -If changes are made to the patch and you've built previously you must manually -reset VS Code then run `yarn patch:apply`. - -## License - -[MIT](LICENSE) +See [./doc/FAQ.md](./doc/FAQ.md). ## Enterprise Visit [our enterprise page](https://coder.com) for more information about our -enterprise offering. - -## Commercialization - -If you would like to commercialize code-server, please contact -contact@coder.com. +enterprise offerings. diff --git a/ci/ci.sh b/ci/ci.sh new file mode 100755 index 00000000..79d489f0 --- /dev/null +++ b/ci/ci.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -euo pipefail + +main() { + cd "$(dirname "$0")/.." + + yarn fmt + yarn lint + yarn test +} + +main "$@" diff --git a/ci/image/Dockerfile b/ci/image/Dockerfile index 29496fc5..0be870a7 100644 --- a/ci/image/Dockerfile +++ b/ci/image/Dockerfile @@ -1,4 +1,4 @@ -FROM node:12 +FROM node:12.14.0 RUN apt-get update && apt-get install -y \ libxkbfile-dev \ diff --git a/ci/lib.sh b/ci/lib.sh new file mode 100644 index 00000000..7118ddd0 --- /dev/null +++ b/ci/lib.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -euo pipefail + +set_version() { + local code_server_version=${VERSION:-${TRAVIS_TAG:-}} + if [[ -z $code_server_version ]]; then + code_server_version=$(grep version ./package.json | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[:space:]') + fi + export VERSION=$code_server_version +} diff --git a/ci/lint.sh b/ci/lint.sh index e218d516..d6665edc 100755 --- a/ci/lint.sh +++ b/ci/lint.sh @@ -4,7 +4,7 @@ set -euo pipefail main() { eslint --max-warnings=0 --fix $(git ls-files "*.ts" "*.tsx" "*.js") - stylelint --fix $(git ls-files "*.css") + stylelint $(git ls-files "*.css") tsc --noEmit } diff --git a/ci/release-image/Dockerfile b/ci/release-image/Dockerfile index 95d75587..4fa4faf1 100644 --- a/ci/release-image/Dockerfile +++ b/ci/release-image/Dockerfile @@ -33,4 +33,4 @@ RUN rm -rf /var/lib/apt/lists/* EXPOSE 8080 USER coder WORKDIR /home/coder -ENTRYPOINT ["dumb-init", "fixuid", "-q", "code-server", "--host", "0.0.0.0"] +ENTRYPOINT ["dumb-init", "fixuid", "-q", "code-server", "--host=0.0.0.0", "--auth=none"] diff --git a/ci/release-image/push.sh b/ci/release-image/push.sh index 88924612..4734a120 100755 --- a/ci/release-image/push.sh +++ b/ci/release-image/push.sh @@ -4,6 +4,8 @@ set -euo pipefail main() { cd "$(dirname "$0")/../.." + soruce ./ci/lib.sh + set_version if [[ ${CI:-} ]]; then echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin diff --git a/ci/release.sh b/ci/release.sh index 152e8861..84d4d179 100755 --- a/ci/release.sh +++ b/ci/release.sh @@ -6,12 +6,9 @@ set -euo pipefail # This script assumes that yarn has already ran. function main() { cd "$(dirname "${0}")/.." + source ./ci/lib.sh - local code_server_version=${VERSION:-${TRAVIS_TAG:-}} - if [[ -z $code_server_version ]]; then - code_server_version=$(grep version ./package.json | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[:space:]') - fi - export VERSION=$code_server_version + set_version # Always minify and package on CI since that's when releases are pushed. if [[ ${CI:-} ]]; then diff --git a/doc/CONTRIBUTING.md b/doc/CONTRIBUTING.md new file mode 100644 index 00000000..0200a080 --- /dev/null +++ b/doc/CONTRIBUTING.md @@ -0,0 +1,33 @@ +# Contributing + +## Development Workflow + +- [VS Code prerequisites](https://github.com/Microsoft/vscode/wiki/How-to-Contribute#prerequisites) + +```shell +yarn +yarn vscode +yarn watch # Visit http://localhost:8080 once completed. +``` + +Any changes made to the source will be live reloaded. + +If you run into issues about a different version of Node being used, try running +`npm rebuild` in the VS Code directory. + +If changes are made to the patch and you've built previously you must manually +reset VS Code then run `yarn vscode:patch`. + +Some docs are available at [../src/node/app](../src/node/app) on how code-server +works internally. + +## Build + +- [VS Code prerequisites](https://github.com/Microsoft/vscode/wiki/How-to-Contribute#prerequisites) + +```shell +yarn +yarn build +node build/out/entry.js # You can run the built JavaScript with Node. +yarn binary # Or you can package it into a binary. +``` diff --git a/doc/FAQ.md b/doc/FAQ.md new file mode 100644 index 00000000..5c8588be --- /dev/null +++ b/doc/FAQ.md @@ -0,0 +1,49 @@ +# FAQ + +## What's the deal with extensions? + +Unfortunately, the Microsoft VS Code Marketplace is + +## How is this different from VS Code Online? + +VS Code Online is a closed source managed service by Microsoft and only runs on Azure. + +code-server is open source and can be freely ran on any machine. + +## How should I expose code-server to the internet? + +By far the most secure method of using code-server is via +[sshcode](https://github.com/codercom/sshcode) as it runs code-server and then forwards +its port over SSH and requires no setup on your part other than having a working SSH server. + +If you cannot use sshcode, then you will need to ensure there is some sort of authorization in +front of code-server and that you are using HTTPS to secure all connections. + +By default when listening externally, code-server enables password authentication using a +randomly generated password so you can use that. You can set the `PASSWORD` environment variable +to use your own instead. If you want to handle authentication yourself, use `--auth none` +to disable password authentication. + +For HTTPS, you can use a self signed certificate by passing in just `--cert` or pass in an existing +certificate by providing the path to `--cert` and the path to its key with `--cert-key`. + +If `code-server` has been passed a certificate it will also respond to HTTPS +requests and will redirect all HTTP requests to HTTPS. Otherwise it will respond +only to HTTP requests. + +You can use [Let's Encrypt](https://letsencrypt.org/) to get an SSL certificate +for free. + +## Why are there x86 releases? + +32 bit releases have been + +## Multi Tenancy + +If you want to run multiple code-server's on shared infrastructure, we recommend using +something like kubernetes and the code-server docker image. + +## How can I disable telemetry? + +Use the `--disable-telemetry` flag to completely disable telemetry. We use the +data collected only to improve code-server. diff --git a/package.json b/package.json index fb146626..e1c4009c 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "parcel-bundler": "^1.12.4", "prettier": "^1.18.2", "stylelint": "^13.0.0", - "stylelint-config-standard": "^19.0.0", + "stylelint-config-recommended": "^3.0.0", "ts-node": "^8.4.1", "typescript": "3.7.2" }, diff --git a/src/browser/pages/global.css b/src/browser/pages/global.css index 076808f3..96ab201f 100644 --- a/src/browser/pages/global.css +++ b/src/browser/pages/global.css @@ -10,17 +10,8 @@ body { background: #272727; color: #f4f4f4; margin: 0; - font-family: - -apple-system, - BlinkMacSystemFont, - "Segoe UI", - Roboto, - Helvetica, - Arial, - sans-serif, - "Apple Color Emoji", - "Segoe UI Emoji", - "Segoe UI Symbol"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol"; overflow: hidden; } diff --git a/yarn.lock b/yarn.lock index 24ae20e5..e9e614c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1848,12 +1848,7 @@ chokidar@^2.1.5: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^1.1.3: +chownr@^1.1.1, chownr@^1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -6847,13 +6842,6 @@ stylelint-config-recommended@^3.0.0: resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz#e0e547434016c5539fe2650afd58049a2fd1d657" integrity sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ== -stylelint-config-standard@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-19.0.0.tgz#66f0cf13f33b8a9e34965881493b38fc1313693a" - integrity sha512-VvcODsL1PryzpYteWZo2YaA5vU/pWfjqBpOvmeA8iB2MteZ/ZhI1O4hnrWMidsS4vmEJpKtjdhLdfGJmmZm6Cg== - dependencies: - stylelint-config-recommended "^3.0.0" - stylelint@^13.0.0: version "13.2.0" resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-13.2.0.tgz#b6f5b67b9a9a51f1fd105ab916952456d93826b4"