Shake CI and docs up
This commit is contained in:
parent
b8fa7da972
commit
80b1b1b672
@ -1,12 +0,0 @@
|
|||||||
Dockerfile
|
|
||||||
build
|
|
||||||
deployment
|
|
||||||
doc
|
|
||||||
.github
|
|
||||||
.gitignore
|
|
||||||
.node-version
|
|
||||||
.travis.yml
|
|
||||||
LICENSE
|
|
||||||
README.md
|
|
||||||
node_modules
|
|
||||||
release
|
|
331
.drone.yml
331
.drone.yml
@ -1,331 +0,0 @@
|
|||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: amd64:linux
|
|
||||||
|
|
||||||
platform:
|
|
||||||
arch: amd64
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: cache:restore
|
|
||||||
image: codercom/nbin:centos
|
|
||||||
commands:
|
|
||||||
- yum install -y libxkbfile-devel libsecret-devel
|
|
||||||
- . /opt/rh/devtoolset-6/enable
|
|
||||||
- ./scripts/cacher.sh
|
|
||||||
|
|
||||||
- name: lint
|
|
||||||
image: node:12
|
|
||||||
commands:
|
|
||||||
- yarn lint
|
|
||||||
|
|
||||||
- name: test
|
|
||||||
image: codercom/nbin:centos
|
|
||||||
commands:
|
|
||||||
- yum install -y openssl
|
|
||||||
- yarn test
|
|
||||||
|
|
||||||
- name: build
|
|
||||||
image: codercom/nbin:centos
|
|
||||||
commands:
|
|
||||||
- yum install -y libxkbfile-devel libsecret-devel
|
|
||||||
- . /opt/rh/devtoolset-6/enable
|
|
||||||
- timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing to preserve cache for the next run'
|
|
||||||
|
|
||||||
- name: cache:package
|
|
||||||
image: node:12
|
|
||||||
commands:
|
|
||||||
- ./scripts/cacher.sh
|
|
||||||
when:
|
|
||||||
event: push
|
|
||||||
|
|
||||||
- name: cache:push
|
|
||||||
image: plugins/gcs
|
|
||||||
settings:
|
|
||||||
source: cache-upload/
|
|
||||||
target: codesrv-ci.cdr.sh
|
|
||||||
token:
|
|
||||||
from_secret: gcs-token
|
|
||||||
when:
|
|
||||||
event: push
|
|
||||||
|
|
||||||
- name: test:build
|
|
||||||
image: codercom/nbin:centos
|
|
||||||
commands:
|
|
||||||
- yarn test:build
|
|
||||||
|
|
||||||
- name: publish:github
|
|
||||||
image: plugins/github-release
|
|
||||||
settings:
|
|
||||||
api_key:
|
|
||||||
from_secret: github_token
|
|
||||||
files: release/*.tar.gz
|
|
||||||
draft: true
|
|
||||||
overwrite: true
|
|
||||||
title: ${DRONE_TAG}
|
|
||||||
when:
|
|
||||||
event: tag
|
|
||||||
|
|
||||||
- name: publish:docker
|
|
||||||
image: plugins/docker
|
|
||||||
settings:
|
|
||||||
username:
|
|
||||||
from_secret: docker_user
|
|
||||||
password:
|
|
||||||
from_secret: docker_pass
|
|
||||||
repo: codercom/code-server
|
|
||||||
dockerfile: scripts/ci.dockerfile
|
|
||||||
tags:
|
|
||||||
- ${DRONE_TAG}
|
|
||||||
when:
|
|
||||||
event: tag
|
|
||||||
|
|
||||||
- name: publish:gcs
|
|
||||||
image: plugins/gcs
|
|
||||||
settings:
|
|
||||||
source: binary-upload
|
|
||||||
target: codesrv-ci.cdr.sh/
|
|
||||||
token:
|
|
||||||
from_secret: gcs-token
|
|
||||||
when:
|
|
||||||
event: tag
|
|
||||||
|
|
||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: amd64:alpine
|
|
||||||
|
|
||||||
platform:
|
|
||||||
arch: amd64
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: cache:restore
|
|
||||||
image: node:12-alpine
|
|
||||||
commands:
|
|
||||||
- apk add libxkbfile-dev libsecret-dev build-base git bash python
|
|
||||||
- ./scripts/cacher.sh
|
|
||||||
|
|
||||||
- name: lint
|
|
||||||
image: node:12-alpine
|
|
||||||
commands:
|
|
||||||
- yarn lint
|
|
||||||
|
|
||||||
- name: test
|
|
||||||
image: node:12-alpine
|
|
||||||
commands:
|
|
||||||
- apk add openssl
|
|
||||||
- yarn test
|
|
||||||
|
|
||||||
- name: build
|
|
||||||
image: node:12-alpine
|
|
||||||
commands:
|
|
||||||
- apk add libxkbfile-dev libsecret-dev build-base git bash python
|
|
||||||
- timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing to preserve cache for the next run'
|
|
||||||
|
|
||||||
- name: cache:package
|
|
||||||
image: node:12-alpine
|
|
||||||
commands:
|
|
||||||
- ./scripts/cacher.sh
|
|
||||||
when:
|
|
||||||
event: push
|
|
||||||
|
|
||||||
- name: cache:push
|
|
||||||
image: plugins/gcs
|
|
||||||
settings:
|
|
||||||
source: cache-upload/
|
|
||||||
target: codesrv-ci.cdr.sh
|
|
||||||
token:
|
|
||||||
from_secret: gcs-token
|
|
||||||
when:
|
|
||||||
event: push
|
|
||||||
|
|
||||||
- name: test:build
|
|
||||||
image: node:12-alpine
|
|
||||||
commands:
|
|
||||||
- yarn test:build
|
|
||||||
|
|
||||||
- name: publish:github
|
|
||||||
image: plugins/github-release
|
|
||||||
settings:
|
|
||||||
api_key:
|
|
||||||
from_secret: github_token
|
|
||||||
files: release/*.tar.gz
|
|
||||||
draft: true
|
|
||||||
overwrite: true
|
|
||||||
title: ${DRONE_TAG}
|
|
||||||
when:
|
|
||||||
event: tag
|
|
||||||
|
|
||||||
- name: publish:gcs
|
|
||||||
image: plugins/gcs
|
|
||||||
settings:
|
|
||||||
source: binary-upload
|
|
||||||
target: codesrv-ci.cdr.sh/
|
|
||||||
token:
|
|
||||||
from_secret: gcs-token
|
|
||||||
when:
|
|
||||||
event: tag
|
|
||||||
|
|
||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: arm64:linux
|
|
||||||
|
|
||||||
platform:
|
|
||||||
arch: arm64
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: cache:restore
|
|
||||||
image: node:12
|
|
||||||
commands:
|
|
||||||
- apt update && apt install -y build-essential git libsecret-1-dev libx11-dev libxkbfile-dev
|
|
||||||
- ./scripts/cacher.sh
|
|
||||||
|
|
||||||
- name: lint
|
|
||||||
image: node:12
|
|
||||||
commands:
|
|
||||||
- yarn lint
|
|
||||||
|
|
||||||
- name: test
|
|
||||||
image: node:12
|
|
||||||
commands:
|
|
||||||
- yarn test
|
|
||||||
|
|
||||||
- name: build
|
|
||||||
image: node:12
|
|
||||||
commands:
|
|
||||||
- apt update && apt install -y build-essential git libsecret-1-dev libx11-dev libxkbfile-dev
|
|
||||||
- timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing to preserve cache for the next run'
|
|
||||||
|
|
||||||
- name: cache:package
|
|
||||||
image: node:12
|
|
||||||
commands:
|
|
||||||
- ./scripts/cacher.sh
|
|
||||||
when:
|
|
||||||
event: push
|
|
||||||
|
|
||||||
- name: cache:push
|
|
||||||
image: plugins/gcs
|
|
||||||
settings:
|
|
||||||
source: cache-upload/
|
|
||||||
target: codesrv-ci.cdr.sh
|
|
||||||
token:
|
|
||||||
from_secret: gcs-token
|
|
||||||
when:
|
|
||||||
event: push
|
|
||||||
|
|
||||||
- name: test:build
|
|
||||||
image: node:12
|
|
||||||
commands:
|
|
||||||
- yarn test:build
|
|
||||||
|
|
||||||
- name: publish:github
|
|
||||||
image: plugins/github-release
|
|
||||||
settings:
|
|
||||||
api_key:
|
|
||||||
from_secret: github_token
|
|
||||||
files: release/*.tar.gz
|
|
||||||
draft: true
|
|
||||||
overwrite: true
|
|
||||||
title: ${DRONE_TAG}
|
|
||||||
when:
|
|
||||||
event: tag
|
|
||||||
|
|
||||||
- name: publish:docker
|
|
||||||
image: plugins/docker
|
|
||||||
settings:
|
|
||||||
username:
|
|
||||||
from_secret: docker_user
|
|
||||||
password:
|
|
||||||
from_secret: docker_pass
|
|
||||||
repo: codercom/code-server
|
|
||||||
dockerfile: scripts/ci.dockerfile
|
|
||||||
tags:
|
|
||||||
- ${DRONE_TAG}-arm64
|
|
||||||
when:
|
|
||||||
event: tag
|
|
||||||
|
|
||||||
- name: publish:gcs
|
|
||||||
image: plugins/gcs
|
|
||||||
settings:
|
|
||||||
source: binary-upload
|
|
||||||
target: codesrv-ci.cdr.sh/
|
|
||||||
token:
|
|
||||||
from_secret: gcs-token
|
|
||||||
when:
|
|
||||||
event: tag
|
|
||||||
|
|
||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: arm64:alpine
|
|
||||||
|
|
||||||
platform:
|
|
||||||
arch: arm64
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: cache:restore
|
|
||||||
image: node:12-alpine
|
|
||||||
commands:
|
|
||||||
- apk add libxkbfile-dev libsecret-dev build-base git bash python
|
|
||||||
- ./scripts/cacher.sh
|
|
||||||
|
|
||||||
- name: lint
|
|
||||||
image: node:12-alpine
|
|
||||||
commands:
|
|
||||||
- yarn lint
|
|
||||||
|
|
||||||
- name: test
|
|
||||||
image: node:12-alpine
|
|
||||||
commands:
|
|
||||||
- apk add openssl
|
|
||||||
- yarn test
|
|
||||||
|
|
||||||
- name: build
|
|
||||||
image: node:12-alpine
|
|
||||||
commands:
|
|
||||||
- apk add libxkbfile-dev libsecret-dev build-base git bash python
|
|
||||||
- timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing to preserve cache for the next run'
|
|
||||||
|
|
||||||
- name: cache:package
|
|
||||||
image: node:12-alpine
|
|
||||||
commands:
|
|
||||||
- ./scripts/cacher.sh
|
|
||||||
when:
|
|
||||||
event: push
|
|
||||||
|
|
||||||
- name: cache:push
|
|
||||||
image: plugins/gcs
|
|
||||||
settings:
|
|
||||||
source: cache-upload/
|
|
||||||
target: codesrv-ci.cdr.sh
|
|
||||||
token:
|
|
||||||
from_secret: gcs-token
|
|
||||||
when:
|
|
||||||
event: push
|
|
||||||
|
|
||||||
- name: test:build
|
|
||||||
image: node:12-alpine
|
|
||||||
commands:
|
|
||||||
- yarn test:build
|
|
||||||
|
|
||||||
- name: publish:github
|
|
||||||
image: plugins/github-release
|
|
||||||
settings:
|
|
||||||
api_key:
|
|
||||||
from_secret: github_token
|
|
||||||
files: release/*.tar.gz
|
|
||||||
draft: true
|
|
||||||
overwrite: true
|
|
||||||
title: ${DRONE_TAG}
|
|
||||||
when:
|
|
||||||
event: tag
|
|
||||||
|
|
||||||
- name: publish:gcs
|
|
||||||
image: plugins/gcs
|
|
||||||
settings:
|
|
||||||
source: binary-upload
|
|
||||||
target: codesrv-ci.cdr.sh/
|
|
||||||
token:
|
|
||||||
from_secret: gcs-token
|
|
||||||
when:
|
|
||||||
event: tag
|
|
@ -1,6 +0,0 @@
|
|||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
indent_style = space
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
indent_size = 2
|
|
3
.github/CODEOWNERS
vendored
3
.github/CODEOWNERS
vendored
@ -1,2 +1 @@
|
|||||||
* @code-asher @kylecarbs
|
* @code-asher @nhooyr
|
||||||
Dockerfile @nhooyr
|
|
||||||
|
22
.github/ISSUE_TEMPLATE/bug_report.md
vendored
22
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -1,22 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug Report
|
|
||||||
about: Report problems and unexpected behavior.
|
|
||||||
title: ''
|
|
||||||
labels: 'bug'
|
|
||||||
assignees: ''
|
|
||||||
---
|
|
||||||
|
|
||||||
<!-- Please search existing issues to avoid creating duplicates. -->
|
|
||||||
<!-- All extension-specific issues should be created with the `Extension Bug` template. -->
|
|
||||||
|
|
||||||
- `code-server` version: <!-- The version of code-server -->
|
|
||||||
- OS Version: <!-- OS version, cloud provider, -->
|
|
||||||
|
|
||||||
## Description
|
|
||||||
|
|
||||||
<!-- Describes the problem here -->
|
|
||||||
|
|
||||||
## Steps to Reproduce
|
|
||||||
|
|
||||||
1. <!-- step 1: click ... -->
|
|
||||||
1. <!-- step 2: ... -->
|
|
22
.github/ISSUE_TEMPLATE/extension_bug.md
vendored
22
.github/ISSUE_TEMPLATE/extension_bug.md
vendored
@ -1,22 +0,0 @@
|
|||||||
---
|
|
||||||
name: Extension Bug
|
|
||||||
about: Report problems and unexpected behavior with extensions.
|
|
||||||
title: ''
|
|
||||||
labels: 'extension-specific'
|
|
||||||
assignees: ''
|
|
||||||
---
|
|
||||||
|
|
||||||
<!-- Please search existing issues to avoid creating duplicates. -->
|
|
||||||
|
|
||||||
- `code-server` version: <!-- The version of code-server -->
|
|
||||||
- OS Version: <!-- OS version, cloud provider, -->
|
|
||||||
- Extension: <!-- Link to extension -->
|
|
||||||
|
|
||||||
## Description
|
|
||||||
|
|
||||||
<!-- Describes the problem here -->
|
|
||||||
|
|
||||||
## Steps to Reproduce
|
|
||||||
|
|
||||||
1. <!-- step 1: click ... -->
|
|
||||||
1. <!-- step 2: ... -->
|
|
11
.github/ISSUE_TEMPLATE/feature_request.md
vendored
11
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -1,11 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature Request
|
|
||||||
about: Suggest an idea for this project.
|
|
||||||
title: ''
|
|
||||||
labels: 'feature'
|
|
||||||
assignees: ''
|
|
||||||
---
|
|
||||||
|
|
||||||
<!-- Please search existing issues to avoid creating duplicates. -->
|
|
||||||
|
|
||||||
<!-- Describe the feature you'd like. -->
|
|
4
.github/issue_template.md
vendored
Normal file
4
.github/issue_template.md
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<!--
|
||||||
|
Please file all questions and support requests at https://www.reddit.com/r/codeserver/
|
||||||
|
The issue tracker is only for bugs.
|
||||||
|
-->
|
10
.github/pull_request_template.md
vendored
10
.github/pull_request_template.md
vendored
@ -1,6 +1,4 @@
|
|||||||
<!-- Please answer these questions before submitting your PR. Thanks! -->
|
<!--
|
||||||
|
Please link to the issue this PR solves.
|
||||||
### Describe in detail the problem you had and how this PR fixes it
|
If there is no existing issue, please first create one unless the fix is minor.
|
||||||
|
-->
|
||||||
### Is there an open issue you can link to?
|
|
||||||
|
|
||||||
|
24
.github/workflows/ci.yml
vendored
Normal file
24
.github/workflows/ci.yml
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
name: ci
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: get yarn cache directory path
|
||||||
|
id: yarn-cache-dir-path
|
||||||
|
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||||
|
- uses: actions/cache@v1
|
||||||
|
id: yarn-cache
|
||||||
|
with:
|
||||||
|
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||||
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-yarn-
|
||||||
|
|
||||||
|
- name: yarn lint
|
||||||
|
uses: ./ci/image
|
||||||
|
with:
|
||||||
|
args: yarn && yarn lint
|
6
.gitignore
vendored
6
.gitignore
vendored
@ -1,11 +1,7 @@
|
|||||||
*.tsbuildinfo
|
*.tsbuildinfo
|
||||||
.cache
|
.cache
|
||||||
binaries
|
|
||||||
*-upload
|
|
||||||
build
|
build
|
||||||
dist*
|
dist*
|
||||||
node_modules
|
|
||||||
out*
|
out*
|
||||||
release
|
release
|
||||||
source
|
node_modules
|
||||||
yarn-cache
|
|
||||||
|
@ -1 +0,0 @@
|
|||||||
12.14.0
|
|
@ -1,7 +1,4 @@
|
|||||||
printWidth: 120
|
printWidth: 120
|
||||||
semi: false
|
semi: false
|
||||||
tabWidth: 2
|
trailingComma: all
|
||||||
singleQuote: false
|
|
||||||
trailingComma: es5
|
|
||||||
useTabs: false
|
|
||||||
arrowParens: always
|
arrowParens: always
|
||||||
|
37
.travis.yml
37
.travis.yml
@ -1,37 +0,0 @@
|
|||||||
language: node_js
|
|
||||||
node_js:
|
|
||||||
- 12.14.0
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
include:
|
|
||||||
- name: "MacOS build"
|
|
||||||
os: osx
|
|
||||||
script: travis_wait 60 scripts/ci.bash
|
|
||||||
|
|
||||||
git:
|
|
||||||
depth: 3
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
- provider: releases
|
|
||||||
file_glob: true
|
|
||||||
draft: true
|
|
||||||
tag_name: "$TRAVIS_TAG"
|
|
||||||
target_commitish: "$TRAVIS_COMMIT"
|
|
||||||
name: "$TRAVIS_TAG"
|
|
||||||
skip_cleanup: true
|
|
||||||
api_key:
|
|
||||||
secure: YL/x24KjYjgYXPcJWk3FV7FGxI79Mh6gBECQEcdlf3fkLEoKFVgzHBoUNWrFPzyR4tgLyWNAgcpD9Lkme1TRWTom7UPjXcwMNyLcLa+uec7ciSAnYD9ntLTpiCuPDD1u0LtRGclSi/EHQ+F8YVq+HZJpXTsJeAmOmihma3GVbGKSZr+BRum+0YZSG4w+o4TOlYzw/4bLWS52MogZcwpjd+hemBbgXLuGU2ziKv2vEKCZFbEeA16II4x1WLI4mutDdCeh7+3aLzGLwDa49NxtsVYNjyNFF75JhCTCNA55e2YMiLz9Uq69IXe/mi5F7xUaFfhIqqLNyKBnKeEOzu3dYnc+8n3LjnQ+00PmkF05nx9kBn3UfV1kwQGh6QbyDmTtBP07rtUMyI14aeQqHjxsaVRdMnwj9Q2DjXRr8UDqESZF0rmK3pHCXS2fBhIzLE8tLVW5Heiba2pQRFMHMZW+KBE97FzcFh7is90Ait3T8enfcd/PWFPYoBejDAdjwxwOkezh5N5ZkYquEfDYuWrFi6zRFCktsruaAcA+xGtTf9oilBBzUqu8Ie+YFWH5me83xakcblJWdaW/D2rLJAJH3m6LFm8lBqyUgDX5t/etob6CpDuYHu5D1J3XINOj/+aLAcadq6qlh70PMZS3zYffUu3JlzaD2amlSHIT8b5YXFc=
|
|
||||||
file:
|
|
||||||
- release/*.tar.gz
|
|
||||||
- release/*.zip
|
|
||||||
on:
|
|
||||||
repo: cdr/code-server
|
|
||||||
tags: true
|
|
||||||
|
|
||||||
cache:
|
|
||||||
timeout: 1000
|
|
||||||
yarn: true
|
|
||||||
directories:
|
|
||||||
- source
|
|
57
Dockerfile
57
Dockerfile
@ -1,57 +0,0 @@
|
|||||||
FROM node:12.14.0
|
|
||||||
ARG tag
|
|
||||||
ARG githubToken
|
|
||||||
|
|
||||||
# Install VS Code's deps. These are the only two it seems we need.
|
|
||||||
RUN apt-get update && apt-get install -y \
|
|
||||||
libxkbfile-dev \
|
|
||||||
libsecret-1-dev
|
|
||||||
|
|
||||||
WORKDIR /src
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
RUN yarn \
|
|
||||||
&& DRONE_TAG="$tag" MINIFY=true STRIP_BIN_TARGET=true GITHUB_TOKEN="$githubToken" ./scripts/ci.bash \
|
|
||||||
&& rm -r /src/build \
|
|
||||||
&& rm -r /src/source
|
|
||||||
|
|
||||||
# We deploy with Ubuntu so that devs have a familiar environment.
|
|
||||||
FROM ubuntu:18.04
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y \
|
|
||||||
openssl \
|
|
||||||
net-tools \
|
|
||||||
git \
|
|
||||||
locales \
|
|
||||||
sudo \
|
|
||||||
dumb-init \
|
|
||||||
vim \
|
|
||||||
curl \
|
|
||||||
wget \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN locale-gen en_US.UTF-8
|
|
||||||
# We cannot use update-locale because docker will not use the env variables
|
|
||||||
# configured in /etc/default/locale so we need to set it manually.
|
|
||||||
ENV LC_ALL=en_US.UTF-8 \
|
|
||||||
SHELL=/bin/bash
|
|
||||||
|
|
||||||
RUN adduser --gecos '' --disabled-password coder && \
|
|
||||||
echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd
|
|
||||||
|
|
||||||
USER coder
|
|
||||||
# Create first so these directories will be owned by coder instead of root
|
|
||||||
# (workdir and mounting appear to both default to root).
|
|
||||||
RUN mkdir -p /home/coder/project
|
|
||||||
RUN mkdir -p /home/coder/.local/share/code-server
|
|
||||||
|
|
||||||
WORKDIR /home/coder/project
|
|
||||||
|
|
||||||
# This ensures we have a volume mounted even if the user forgot to do bind
|
|
||||||
# mount. So that they do not lose their data if they delete the container.
|
|
||||||
VOLUME [ "/home/coder/project" ]
|
|
||||||
|
|
||||||
COPY --from=0 /src/binaries/code-server /usr/local/bin/code-server
|
|
||||||
EXPOSE 8080
|
|
||||||
|
|
||||||
ENTRYPOINT ["dumb-init", "code-server", "--host", "0.0.0.0"]
|
|
37
ci/Dockerfile
Normal file
37
ci/Dockerfile
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
FROM debian:10
|
||||||
|
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install -y curl
|
||||||
|
|
||||||
|
ARG DOWNLOAD_URL=https://github.com/cdr/code-server/releases/download/2.1698/code-server2.1698-vsc1.41.1-linux-x86_64.tar.gz
|
||||||
|
|
||||||
|
RUN cd /tmp && curl -L "$DOWNLOAD_URL" | \
|
||||||
|
tar -xz && \
|
||||||
|
cp code-server*/code-server /usr/local/bin/code-server
|
||||||
|
|
||||||
|
# https://wiki.debian.org/Locale#Manually
|
||||||
|
RUN apt-get install -y locales
|
||||||
|
RUN sed -i "s/# en_US.UTF-8/en_US.UTF-8/" /etc/locale.gen
|
||||||
|
RUN locale-gen
|
||||||
|
ENV LANG=en_US.UTF-8
|
||||||
|
|
||||||
|
RUN chsh -s /bin/bash
|
||||||
|
ENV SHELL=/bin/bash
|
||||||
|
|
||||||
|
RUN apt-get install -y dumb-init sudo
|
||||||
|
RUN apt-get install -y man procps vim nano htop ssh git
|
||||||
|
|
||||||
|
RUN adduser --gecos '' --disabled-password coder && \
|
||||||
|
echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd
|
||||||
|
|
||||||
|
RUN curl -SsL https://github.com/boxboat/fixuid/releases/download/v0.4/fixuid-0.4-linux-amd64.tar.gz | tar -C /usr/local/bin -xzf - && \
|
||||||
|
chown root:root /usr/local/bin/fixuid && \
|
||||||
|
chmod 4755 /usr/local/bin/fixuid && \
|
||||||
|
mkdir -p /etc/fixuid && \
|
||||||
|
printf "user: coder\ngroup: coder\n" > /etc/fixuid/config.yml
|
||||||
|
|
||||||
|
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"]
|
11
ci/clean.sh
Executable file
11
ci/clean.sh
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
main() {
|
||||||
|
git clean -xffd
|
||||||
|
git submodule foreach --recursive git clean -xffd
|
||||||
|
git submodule foreach --recursive git reset --hard
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
17
ci/fmt.sh
Executable file
17
ci/fmt.sh
Executable file
@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
main() {
|
||||||
|
shfmt -i 2 -w -s -sr $$(git ls-files "*.sh")
|
||||||
|
prettier --write --loglevel=warn $$(git ls-files "*.js" "*.ts" "*.tsx" "*.html" "*.json" "*.css" "*.md" "*.toml" "*.yaml" "*.yml")
|
||||||
|
if [[ "$CI" != "" && $$(git ls-files --other --modified --exclude-standard) != "" ]]; then
|
||||||
|
echo "Files need generation or are formatted incorrectly:"
|
||||||
|
git -c color.ui=always status | grep --color=no '\[31m'
|
||||||
|
echo "Please run the following locally:"
|
||||||
|
echo " make fmt"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
12
ci/image/Dockerfile
Normal file
12
ci/image/Dockerfile
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
FROM node:12-buster
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
libxkbfile-dev \
|
||||||
|
libsecret-1-dev \
|
||||||
|
dumb-init
|
||||||
|
|
||||||
|
RUN curl -L https://github.com/mvdan/sh/releases/download/v3.0.1/shfmt_v3.0.1_linux_amd64 > /usr/local/bin/shfmt && chmod +x /usr/local/bin/shfmt
|
||||||
|
|
||||||
|
COPY entrypoint.sh /bin/entrypoint.sh
|
||||||
|
|
||||||
|
ENTRYPOINT ["dumb-init", "/bin/entrypoint.sh"]
|
5
ci/image/entrypoint.sh
Executable file
5
ci/image/entrypoint.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
eval "$@"
|
10
ci/lint.sh
Executable file
10
ci/lint.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
main() {
|
||||||
|
eslint --max-warnings=0 --fix $$(git ls-files "*.ts" "*.tsx" "*.js")
|
||||||
|
stylelint --fix $$(git ls-files "*.css")
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
6
ci/tsconfig.json
Normal file
6
ci/tsconfig.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"extends": "../tsconfig.json",
|
||||||
|
"include": [
|
||||||
|
"./**/*.ts"
|
||||||
|
]
|
||||||
|
}
|
@ -87,7 +87,7 @@ index 0000000000..fc18355f89
|
|||||||
+ common.minifyTask("out-vscode")
|
+ common.minifyTask("out-vscode")
|
||||||
+));
|
+));
|
||||||
diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json
|
diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json
|
||||||
index 8ac6b2806c..8562a284db 100644
|
index 8ac6b2806c..60b1255e2c 100644
|
||||||
--- a/extensions/vscode-api-tests/package.json
|
--- a/extensions/vscode-api-tests/package.json
|
||||||
+++ b/extensions/vscode-api-tests/package.json
|
+++ b/extensions/vscode-api-tests/package.json
|
||||||
@@ -121,7 +121,7 @@
|
@@ -121,7 +121,7 @@
|
||||||
@ -95,7 +95,7 @@ index 8ac6b2806c..8562a284db 100644
|
|||||||
"mocha-junit-reporter": "^1.17.0",
|
"mocha-junit-reporter": "^1.17.0",
|
||||||
"mocha-multi-reporters": "^1.1.7",
|
"mocha-multi-reporters": "^1.1.7",
|
||||||
- "typescript": "^1.6.2",
|
- "typescript": "^1.6.2",
|
||||||
+ "typescript": "3.7.2",
|
+ "typescript": "3.7.2",
|
||||||
"vscode": "1.1.5"
|
"vscode": "1.1.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -119,21 +119,21 @@ index 2d8b725ff2..a8d93a17ca 100644
|
|||||||
unique-stream@^2.0.2:
|
unique-stream@^2.0.2:
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
diff --git a/package.json b/package.json
|
diff --git a/package.json b/package.json
|
||||||
index fde05321d2..1a7ed2fa47 100644
|
index ade5fcdaf0..73d661eb57 100644
|
||||||
--- a/package.json
|
--- a/package.json
|
||||||
+++ b/package.json
|
+++ b/package.json
|
||||||
@@ -32,6 +32,9 @@
|
@@ -30,6 +30,9 @@
|
||||||
"eslint": "eslint -c .eslintrc.json --rulesdir ./build/lib/eslint --ext .ts --ext .js ./src/vs ./extensions"
|
"web": "node scripts/code-web.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
+ "@coder/logger": "^1.1.12",
|
+ "@coder/logger": "^1.1.11",
|
||||||
+ "@coder/node-browser": "^1.0.8",
|
+ "@coder/node-browser": "^1.0.8",
|
||||||
+ "@coder/requirefs": "^1.1.4",
|
+ "@coder/requirefs": "^1.0.6",
|
||||||
"applicationinsights": "1.0.8",
|
"applicationinsights": "1.0.8",
|
||||||
"chokidar": "3.2.3",
|
"chokidar": "3.2.3",
|
||||||
"graceful-fs": "4.1.11",
|
"graceful-fs": "4.1.11",
|
||||||
diff --git a/src/vs/base/common/network.ts b/src/vs/base/common/network.ts
|
diff --git a/src/vs/base/common/network.ts b/src/vs/base/common/network.ts
|
||||||
index a68e020f9f..c31e7befa3 100644
|
index 231180d513..5b98e191c1 100644
|
||||||
--- a/src/vs/base/common/network.ts
|
--- a/src/vs/base/common/network.ts
|
||||||
+++ b/src/vs/base/common/network.ts
|
+++ b/src/vs/base/common/network.ts
|
||||||
@@ -88,16 +88,17 @@ class RemoteAuthoritiesImpl {
|
@@ -88,16 +88,17 @@ class RemoteAuthoritiesImpl {
|
||||||
@ -180,17 +180,16 @@ index 5a631e0b39..4114bd9287 100644
|
|||||||
_isWindows = (process.platform === 'win32');
|
_isWindows = (process.platform === 'win32');
|
||||||
_isMacintosh = (process.platform === 'darwin');
|
_isMacintosh = (process.platform === 'darwin');
|
||||||
diff --git a/src/vs/base/common/processes.ts b/src/vs/base/common/processes.ts
|
diff --git a/src/vs/base/common/processes.ts b/src/vs/base/common/processes.ts
|
||||||
index c52f7b3774..967943d27b 100644
|
index c52f7b3774..4c9a0c4bab 100644
|
||||||
--- a/src/vs/base/common/processes.ts
|
--- a/src/vs/base/common/processes.ts
|
||||||
+++ b/src/vs/base/common/processes.ts
|
+++ b/src/vs/base/common/processes.ts
|
||||||
@@ -110,7 +110,10 @@ export function sanitizeProcessEnvironment(env: IProcessEnvironment, ...preserve
|
@@ -110,7 +110,9 @@ export function sanitizeProcessEnvironment(env: IProcessEnvironment, ...preserve
|
||||||
/^ELECTRON_.+$/,
|
/^ELECTRON_.+$/,
|
||||||
/^GOOGLE_API_KEY$/,
|
/^GOOGLE_API_KEY$/,
|
||||||
/^VSCODE_.+$/,
|
/^VSCODE_.+$/,
|
||||||
- /^SNAP(|_.*)$/
|
- /^SNAP(|_.*)$/
|
||||||
+ /^SNAP(|_.*)$/,
|
+ /^SNAP(|_.*)$/,
|
||||||
+ // NOTE@coder: Add our variables.
|
+ // NOTE@coder: Add our variables.
|
||||||
+ /^NBIN_BYPASS$/,
|
|
||||||
+ /^LAUNCH_VSCODE$/
|
+ /^LAUNCH_VSCODE$/
|
||||||
];
|
];
|
||||||
const envKeys = Object.keys(env);
|
const envKeys = Object.keys(env);
|
||||||
@ -211,48 +210,8 @@ index 2c64061da7..c0ef8faedd 100644
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
// Do nothing. If we can't read the file we have no
|
// Do nothing. If we can't read the file we have no
|
||||||
// language pack config.
|
// language pack config.
|
||||||
diff --git a/src/vs/code/browser/workbench/workbench.ts b/src/vs/code/browser/workbench/workbench.ts
|
|
||||||
index a599f5a7eb..ec7ccd43f8 100644
|
|
||||||
--- a/src/vs/code/browser/workbench/workbench.ts
|
|
||||||
+++ b/src/vs/code/browser/workbench/workbench.ts
|
|
||||||
@@ -298,35 +298,6 @@ class WorkspaceProvider implements IWorkspaceProvider {
|
|
||||||
let workspace: IWorkspace;
|
|
||||||
let payload = Object.create(null);
|
|
||||||
|
|
||||||
- const query = new URL(document.location.href).searchParams;
|
|
||||||
- query.forEach((value, key) => {
|
|
||||||
- switch (key) {
|
|
||||||
-
|
|
||||||
- // Folder
|
|
||||||
- case WorkspaceProvider.QUERY_PARAM_FOLDER:
|
|
||||||
- workspace = { folderUri: URI.parse(value) };
|
|
||||||
- foundWorkspace = true;
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- // Workspace
|
|
||||||
- case WorkspaceProvider.QUERY_PARAM_WORKSPACE:
|
|
||||||
- workspace = { workspaceUri: URI.parse(value) };
|
|
||||||
- foundWorkspace = true;
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- // Empty
|
|
||||||
- case WorkspaceProvider.QUERY_PARAM_EMPTY_WINDOW:
|
|
||||||
- workspace = undefined;
|
|
||||||
- foundWorkspace = true;
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- // Payload
|
|
||||||
- case WorkspaceProvider.QUERY_PARAM_PAYLOAD:
|
|
||||||
- payload = JSON.parse(value);
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
- });
|
|
||||||
-
|
|
||||||
// If no workspace is provided through the URL, check for config attribute from server
|
|
||||||
if (!foundWorkspace) {
|
|
||||||
if (config.folderUri) {
|
|
||||||
diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts
|
diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts
|
||||||
index abd1e33b18..bf75952ce1 100644
|
index 033cdc575f..23f775f27d 100644
|
||||||
--- a/src/vs/platform/environment/common/environment.ts
|
--- a/src/vs/platform/environment/common/environment.ts
|
||||||
+++ b/src/vs/platform/environment/common/environment.ts
|
+++ b/src/vs/platform/environment/common/environment.ts
|
||||||
@@ -37,6 +37,8 @@ export interface ParsedArgs {
|
@@ -37,6 +37,8 @@ export interface ParsedArgs {
|
||||||
@ -264,7 +223,7 @@ index abd1e33b18..bf75952ce1 100644
|
|||||||
extensionDevelopmentPath?: string[]; // // undefined or array of 1 or more local paths or URIs
|
extensionDevelopmentPath?: string[]; // // undefined or array of 1 or more local paths or URIs
|
||||||
extensionTestsPath?: string; // either a local path or a URI
|
extensionTestsPath?: string; // either a local path or a URI
|
||||||
'extension-development-confirm-save'?: boolean;
|
'extension-development-confirm-save'?: boolean;
|
||||||
@@ -147,6 +149,8 @@ export interface IEnvironmentService extends IUserHomeProvider {
|
@@ -144,6 +146,8 @@ export interface IEnvironmentService extends IUserHomeProvider {
|
||||||
disableExtensions: boolean | string[];
|
disableExtensions: boolean | string[];
|
||||||
builtinExtensionsPath: string;
|
builtinExtensionsPath: string;
|
||||||
extensionsPath?: string;
|
extensionsPath?: string;
|
||||||
@ -274,7 +233,7 @@ index abd1e33b18..bf75952ce1 100644
|
|||||||
extensionTestsLocationURI?: URI;
|
extensionTestsLocationURI?: URI;
|
||||||
logExtensionHostCommunication?: boolean;
|
logExtensionHostCommunication?: boolean;
|
||||||
diff --git a/src/vs/platform/environment/node/argv.ts b/src/vs/platform/environment/node/argv.ts
|
diff --git a/src/vs/platform/environment/node/argv.ts b/src/vs/platform/environment/node/argv.ts
|
||||||
index e68e0647c3..49a5aae2fa 100644
|
index 6832b93c5c..1e451584eb 100644
|
||||||
--- a/src/vs/platform/environment/node/argv.ts
|
--- a/src/vs/platform/environment/node/argv.ts
|
||||||
+++ b/src/vs/platform/environment/node/argv.ts
|
+++ b/src/vs/platform/environment/node/argv.ts
|
||||||
@@ -55,6 +55,8 @@ export const OPTIONS: OptionDescriptions<Required<ParsedArgs>> = {
|
@@ -55,6 +55,8 @@ export const OPTIONS: OptionDescriptions<Required<ParsedArgs>> = {
|
||||||
@ -286,34 +245,33 @@ index e68e0647c3..49a5aae2fa 100644
|
|||||||
'list-extensions': { type: 'boolean', cat: 'e', description: localize('listExtensions', "List the installed extensions.") },
|
'list-extensions': { type: 'boolean', cat: 'e', description: localize('listExtensions', "List the installed extensions.") },
|
||||||
'show-versions': { type: 'boolean', cat: 'e', description: localize('showVersions', "Show versions of installed extensions, when using --list-extension.") },
|
'show-versions': { type: 'boolean', cat: 'e', description: localize('showVersions', "Show versions of installed extensions, when using --list-extension.") },
|
||||||
'category': { type: 'string', cat: 'e', description: localize('category', "Filters installed extensions by provided category, when using --list-extension.") },
|
'category': { type: 'string', cat: 'e', description: localize('category', "Filters installed extensions by provided category, when using --list-extension.") },
|
||||||
@@ -310,4 +312,3 @@ export function buildHelpMessage(productName: string, executableName: string, ve
|
@@ -308,4 +310,3 @@ export function buildHelpMessage(productName: string, executableName: string, ve
|
||||||
export function buildVersionMessage(version: string | undefined, commit: string | undefined): string {
|
export function buildVersionMessage(version: string | undefined, commit: string | undefined): string {
|
||||||
return `${version || localize('unknownVersion', "Unknown version")}\n${commit || localize('unknownCommit', "Unknown commit")}\n${process.arch}`;
|
return `${version || localize('unknownVersion', "Unknown version")}\n${commit || localize('unknownCommit', "Unknown commit")}\n${process.arch}`;
|
||||||
}
|
}
|
||||||
-
|
-
|
||||||
diff --git a/src/vs/platform/environment/node/environmentService.ts b/src/vs/platform/environment/node/environmentService.ts
|
diff --git a/src/vs/platform/environment/node/environmentService.ts b/src/vs/platform/environment/node/environmentService.ts
|
||||||
index 0428e1e888..9b3cddcb3a 100644
|
index 99cab4bba2..531b1d7177 100644
|
||||||
--- a/src/vs/platform/environment/node/environmentService.ts
|
--- a/src/vs/platform/environment/node/environmentService.ts
|
||||||
+++ b/src/vs/platform/environment/node/environmentService.ts
|
+++ b/src/vs/platform/environment/node/environmentService.ts
|
||||||
@@ -197,6 +197,13 @@ export class EnvironmentService implements IEnvironmentService {
|
@@ -266,6 +266,12 @@ export class EnvironmentService implements IEnvironmentService {
|
||||||
return path.join(this.userHome, product.dataFolderName, 'extensions');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
get driverHandle(): string | undefined { return this._args['driver']; }
|
||||||
|
get driverVerbose(): boolean { return !!this._args['driver-verbose']; }
|
||||||
+ @memoize get extraExtensionPaths(): string[] {
|
+ @memoize get extraExtensionPaths(): string[] {
|
||||||
+ return (this._args['extra-extensions-dir'] || []).map((p) => <string>parsePathArg(p, process));
|
+ return (this._args['extra-extensions-dir'] || []).map((p) => <string>parsePathArg(p, process));
|
||||||
+ }
|
+ }
|
||||||
+ @memoize get extraBuiltinExtensionPaths(): string[] {
|
+ @memoize get extraBuiltinExtensionPaths(): string[] {
|
||||||
+ return (this._args['extra-builtin-extensions-dir'] || []).map((p) => <string>parsePathArg(p, process));
|
+ return (this._args['extra-builtin-extensions-dir'] || []).map((p) => <string>parsePathArg(p, process));
|
||||||
+ }
|
+ }
|
||||||
+
|
|
||||||
@memoize
|
constructor(private _args: ParsedArgs, private _execPath: string) {
|
||||||
get extensionDevelopmentLocationURI(): URI[] | undefined {
|
if (!process.env['VSCODE_LOGS']) {
|
||||||
const s = this._args.extensionDevelopmentPath;
|
|
||||||
diff --git a/src/vs/platform/extensionManagement/node/extensionManagementService.ts b/src/vs/platform/extensionManagement/node/extensionManagementService.ts
|
diff --git a/src/vs/platform/extensionManagement/node/extensionManagementService.ts b/src/vs/platform/extensionManagement/node/extensionManagementService.ts
|
||||||
index 5b05650591..aa8712d8fb 100644
|
index 5bfc2bb66c..49a6ce8540 100644
|
||||||
--- a/src/vs/platform/extensionManagement/node/extensionManagementService.ts
|
--- a/src/vs/platform/extensionManagement/node/extensionManagementService.ts
|
||||||
+++ b/src/vs/platform/extensionManagement/node/extensionManagementService.ts
|
+++ b/src/vs/platform/extensionManagement/node/extensionManagementService.ts
|
||||||
@@ -743,11 +743,15 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
@@ -741,11 +741,15 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
||||||
|
|
||||||
private scanSystemExtensions(): Promise<ILocalExtension[]> {
|
private scanSystemExtensions(): Promise<ILocalExtension[]> {
|
||||||
this.logService.trace('Started scanning system extensions');
|
this.logService.trace('Started scanning system extensions');
|
||||||
@ -334,7 +292,7 @@ index 5b05650591..aa8712d8fb 100644
|
|||||||
if (this.environmentService.isBuilt) {
|
if (this.environmentService.isBuilt) {
|
||||||
return systemExtensionsPromise;
|
return systemExtensionsPromise;
|
||||||
}
|
}
|
||||||
@@ -769,9 +773,16 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
@@ -767,9 +771,16 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
||||||
.then(([systemExtensions, devSystemExtensions]) => [...systemExtensions, ...devSystemExtensions]);
|
.then(([systemExtensions, devSystemExtensions]) => [...systemExtensions, ...devSystemExtensions]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -352,7 +310,7 @@ index 5b05650591..aa8712d8fb 100644
|
|||||||
.then(([uninstalled, extensions]) => {
|
.then(([uninstalled, extensions]) => {
|
||||||
extensions = extensions.filter(e => !uninstalled[new ExtensionIdentifierWithVersion(e.identifier, e.manifest.version).key()]);
|
extensions = extensions.filter(e => !uninstalled[new ExtensionIdentifierWithVersion(e.identifier, e.manifest.version).key()]);
|
||||||
if (excludeOutdated) {
|
if (excludeOutdated) {
|
||||||
@@ -786,6 +797,12 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
@@ -784,6 +795,12 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
||||||
private scanExtensions(root: string, type: ExtensionType): Promise<ILocalExtension[]> {
|
private scanExtensions(root: string, type: ExtensionType): Promise<ILocalExtension[]> {
|
||||||
const limiter = new Limiter<any>(10);
|
const limiter = new Limiter<any>(10);
|
||||||
return pfs.readdir(root)
|
return pfs.readdir(root)
|
||||||
@ -360,12 +318,12 @@ index 5b05650591..aa8712d8fb 100644
|
|||||||
+ if (error.code !== 'ENOENT') {
|
+ if (error.code !== 'ENOENT') {
|
||||||
+ throw error;
|
+ throw error;
|
||||||
+ }
|
+ }
|
||||||
+ return <string[]>[];
|
+ return [];
|
||||||
+ })
|
+ })
|
||||||
.then(extensionsFolders => Promise.all<ILocalExtension>(extensionsFolders.map(extensionFolder => limiter.queue(() => this.scanExtension(extensionFolder, root, type)))))
|
.then(extensionsFolders => Promise.all<ILocalExtension>(extensionsFolders.map(extensionFolder => limiter.queue(() => this.scanExtension(extensionFolder, root, type)))))
|
||||||
.then(extensions => extensions.filter(e => e && e.identifier));
|
.then(extensions => extensions.filter(e => e && e.identifier));
|
||||||
}
|
}
|
||||||
@@ -824,7 +841,7 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
@@ -822,7 +839,7 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
||||||
|
|
||||||
private async removeUninstalledExtensions(): Promise<void> {
|
private async removeUninstalledExtensions(): Promise<void> {
|
||||||
const uninstalled = await this.getUninstalledExtensions();
|
const uninstalled = await this.getUninstalledExtensions();
|
||||||
@ -374,7 +332,7 @@ index 5b05650591..aa8712d8fb 100644
|
|||||||
const installed: Set<string> = new Set<string>();
|
const installed: Set<string> = new Set<string>();
|
||||||
for (const e of extensions) {
|
for (const e of extensions) {
|
||||||
if (!uninstalled[new ExtensionIdentifierWithVersion(e.identifier, e.manifest.version).key()]) {
|
if (!uninstalled[new ExtensionIdentifierWithVersion(e.identifier, e.manifest.version).key()]) {
|
||||||
@@ -843,7 +860,7 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
@@ -841,7 +858,7 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
||||||
}
|
}
|
||||||
|
|
||||||
private removeOutdatedExtensions(): Promise<void> {
|
private removeOutdatedExtensions(): Promise<void> {
|
||||||
@ -426,7 +384,7 @@ index 804d113856..30a349f69f 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/src/vs/platform/product/common/productService.ts b/src/vs/platform/product/common/productService.ts
|
diff --git a/src/vs/platform/product/common/productService.ts b/src/vs/platform/product/common/productService.ts
|
||||||
index 120fd66644..52547bdb0e 100644
|
index 6db9725704..779b3cbdea 100644
|
||||||
--- a/src/vs/platform/product/common/productService.ts
|
--- a/src/vs/platform/product/common/productService.ts
|
||||||
+++ b/src/vs/platform/product/common/productService.ts
|
+++ b/src/vs/platform/product/common/productService.ts
|
||||||
@@ -16,6 +16,7 @@ export interface IProductService extends Readonly<IProductConfiguration> {
|
@@ -16,6 +16,7 @@ export interface IProductService extends Readonly<IProductConfiguration> {
|
||||||
@ -1432,10 +1390,10 @@ index 0000000000..9c240b992d
|
|||||||
+}
|
+}
|
||||||
diff --git a/src/vs/server/node/connection.ts b/src/vs/server/node/connection.ts
|
diff --git a/src/vs/server/node/connection.ts b/src/vs/server/node/connection.ts
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000..9b8969690c
|
index 0000000000..3b42933419
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/src/vs/server/node/connection.ts
|
+++ b/src/vs/server/node/connection.ts
|
||||||
@@ -0,0 +1,158 @@
|
@@ -0,0 +1,156 @@
|
||||||
+import * as cp from 'child_process';
|
+import * as cp from 'child_process';
|
||||||
+import { getPathFromAmdModule } from 'vs/base/common/amd';
|
+import { getPathFromAmdModule } from 'vs/base/common/amd';
|
||||||
+import { VSBuffer } from 'vs/base/common/buffer';
|
+import { VSBuffer } from 'vs/base/common/buffer';
|
||||||
@ -1570,10 +1528,8 @@ index 0000000000..9b8969690c
|
|||||||
+
|
+
|
||||||
+ proc.on('error', () => this.dispose());
|
+ proc.on('error', () => this.dispose());
|
||||||
+ proc.on('exit', () => this.dispose());
|
+ proc.on('exit', () => this.dispose());
|
||||||
+ if (proc.stdout && proc.stderr) {
|
+ proc.stdout.setEncoding('utf8').on('data', (d) => this.log.info('Extension host stdout', d));
|
||||||
+ proc.stdout.setEncoding('utf8').on('data', (d) => this.log.info('Extension host stdout', d));
|
+ proc.stderr.setEncoding('utf8').on('data', (d) => this.log.error('Extension host stderr', d));
|
||||||
+ proc.stderr.setEncoding('utf8').on('data', (d) => this.log.error('Extension host stderr', d));
|
|
||||||
+ }
|
|
||||||
+ proc.on('message', (event) => {
|
+ proc.on('message', (event) => {
|
||||||
+ if (event && event.type === '__$console') {
|
+ if (event && event.type === '__$console') {
|
||||||
+ const severity = (<any>this.log)[event.severity] ? event.severity : 'info';
|
+ const severity = (<any>this.log)[event.severity] ? event.severity : 'info';
|
||||||
@ -2152,7 +2108,7 @@ index 0000000000..3c74512192
|
|||||||
+}
|
+}
|
||||||
diff --git a/src/vs/server/node/server.ts b/src/vs/server/node/server.ts
|
diff --git a/src/vs/server/node/server.ts b/src/vs/server/node/server.ts
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000..13d71949ce
|
index 0000000000..ac6bbc8e98
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/src/vs/server/node/server.ts
|
+++ b/src/vs/server/node/server.ts
|
||||||
@@ -0,0 +1,252 @@
|
@@ -0,0 +1,252 @@
|
||||||
@ -2189,6 +2145,7 @@ index 0000000000..13d71949ce
|
|||||||
+import { IProductService } from 'vs/platform/product/common/productService';
|
+import { IProductService } from 'vs/platform/product/common/productService';
|
||||||
+import { ConnectionType, ConnectionTypeRequest } from 'vs/platform/remote/common/remoteAgentConnection';
|
+import { ConnectionType, ConnectionTypeRequest } from 'vs/platform/remote/common/remoteAgentConnection';
|
||||||
+import { RemoteAgentConnectionContext } from 'vs/platform/remote/common/remoteAgentEnvironment';
|
+import { RemoteAgentConnectionContext } from 'vs/platform/remote/common/remoteAgentEnvironment';
|
||||||
|
+import { REMOTE_FILE_SYSTEM_CHANNEL_NAME } from 'vs/platform/remote/common/remoteAgentFileSystemChannel';
|
||||||
+import { IRequestService } from 'vs/platform/request/common/request';
|
+import { IRequestService } from 'vs/platform/request/common/request';
|
||||||
+import { RequestChannel } from 'vs/platform/request/common/requestIpc';
|
+import { RequestChannel } from 'vs/platform/request/common/requestIpc';
|
||||||
+import { RequestService } from 'vs/platform/request/node/requestService';
|
+import { RequestService } from 'vs/platform/request/node/requestService';
|
||||||
@ -2208,7 +2165,6 @@ index 0000000000..13d71949ce
|
|||||||
+import { getLocaleFromConfig, getNlsConfiguration } from 'vs/server/node/nls';
|
+import { getLocaleFromConfig, getNlsConfiguration } from 'vs/server/node/nls';
|
||||||
+import { Protocol } from 'vs/server/node/protocol';
|
+import { Protocol } from 'vs/server/node/protocol';
|
||||||
+import { getUriTransformer } from 'vs/server/node/util';
|
+import { getUriTransformer } from 'vs/server/node/util';
|
||||||
+import { REMOTE_FILE_SYSTEM_CHANNEL_NAME } from "vs/workbench/services/remote/common/remoteAgentFileSystemChannel";
|
|
||||||
+import { RemoteExtensionLogFileName } from 'vs/workbench/services/remote/common/remoteAgentService';
|
+import { RemoteExtensionLogFileName } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||||
+
|
+
|
||||||
+export class Vscode {
|
+export class Vscode {
|
||||||
@ -2454,19 +2410,19 @@ index 0000000000..06b080044c
|
|||||||
+ return new URITransformer(rawURITransformer);
|
+ return new URITransformer(rawURITransformer);
|
||||||
+};
|
+};
|
||||||
diff --git a/src/vs/workbench/api/browser/extensionHost.contribution.ts b/src/vs/workbench/api/browser/extensionHost.contribution.ts
|
diff --git a/src/vs/workbench/api/browser/extensionHost.contribution.ts b/src/vs/workbench/api/browser/extensionHost.contribution.ts
|
||||||
index e69aa80159..71a899d37b 100644
|
index 2905c52411..6ecfae2634 100644
|
||||||
--- a/src/vs/workbench/api/browser/extensionHost.contribution.ts
|
--- a/src/vs/workbench/api/browser/extensionHost.contribution.ts
|
||||||
+++ b/src/vs/workbench/api/browser/extensionHost.contribution.ts
|
+++ b/src/vs/workbench/api/browser/extensionHost.contribution.ts
|
||||||
@@ -58,6 +58,7 @@ import './mainThreadWorkspace';
|
@@ -57,6 +57,7 @@ import './mainThreadComments';
|
||||||
import './mainThreadComments';
|
|
||||||
import './mainThreadTask';
|
import './mainThreadTask';
|
||||||
import './mainThreadLabelService';
|
import './mainThreadLabelService';
|
||||||
|
import 'vs/workbench/api/common/apiCommands';
|
||||||
+import 'vs/server/browser/mainThreadNodeProxy';
|
+import 'vs/server/browser/mainThreadNodeProxy';
|
||||||
import './mainThreadTunnelService';
|
|
||||||
import './mainThreadAuthentication';
|
export class ExtensionPoints implements IWorkbenchContribution {
|
||||||
import './mainThreadTimeline';
|
|
||||||
diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts
|
diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts
|
||||||
index 91045fcda6..a41624e3d2 100644
|
index ea5ad7991f..e5e0ec0fce 100644
|
||||||
--- a/src/vs/workbench/api/common/extHost.api.impl.ts
|
--- a/src/vs/workbench/api/common/extHost.api.impl.ts
|
||||||
+++ b/src/vs/workbench/api/common/extHost.api.impl.ts
|
+++ b/src/vs/workbench/api/common/extHost.api.impl.ts
|
||||||
@@ -67,6 +67,7 @@ import { ILogService } from 'vs/platform/log/common/log';
|
@@ -67,6 +67,7 @@ import { ILogService } from 'vs/platform/log/common/log';
|
||||||
@ -2474,36 +2430,44 @@ index 91045fcda6..a41624e3d2 100644
|
|||||||
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
|
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
|
||||||
import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService';
|
import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService';
|
||||||
+import { IExtHostNodeProxy } from 'vs/server/browser/extHostNodeProxy';
|
+import { IExtHostNodeProxy } from 'vs/server/browser/extHostNodeProxy';
|
||||||
import { ExtHostTheming } from 'vs/workbench/api/common/extHostTheming';
|
|
||||||
import { IExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService';
|
export interface IExtensionApiFactory {
|
||||||
import { IExtHostApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService';
|
(extension: IExtensionDescription, registry: ExtensionDescriptionRegistry, configProvider: ExtHostConfigProvider): typeof vscode;
|
||||||
@@ -91,6 +92,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
@@ -86,6 +87,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||||
const rpcProtocol = accessor.get(IExtHostRpcService);
|
const rpcProtocol = accessor.get(IExtHostRpcService);
|
||||||
const extHostStorage = accessor.get(IExtHostStorage);
|
const extHostStorage = accessor.get(IExtHostStorage);
|
||||||
const extHostLogService = accessor.get(ILogService);
|
const extHostLogService = accessor.get(ILogService);
|
||||||
+ const extHostNodeProxy = accessor.get(IExtHostNodeProxy);
|
+ const extHostNodeProxy = accessor.get(IExtHostNodeProxy);
|
||||||
const extHostTunnelService = accessor.get(IExtHostTunnelService);
|
|
||||||
const extHostApiDeprecation = accessor.get(IExtHostApiDeprecationService);
|
|
||||||
|
|
||||||
@@ -100,6 +102,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
// register addressable instances
|
||||||
|
rpcProtocol.set(ExtHostContext.ExtHostLogService, <ExtHostLogServiceShape><any>extHostLogService);
|
||||||
|
@@ -93,6 +95,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||||
rpcProtocol.set(ExtHostContext.ExtHostConfiguration, extHostConfiguration);
|
rpcProtocol.set(ExtHostContext.ExtHostConfiguration, extHostConfiguration);
|
||||||
rpcProtocol.set(ExtHostContext.ExtHostExtensionService, extensionService);
|
rpcProtocol.set(ExtHostContext.ExtHostExtensionService, extensionService);
|
||||||
rpcProtocol.set(ExtHostContext.ExtHostStorage, extHostStorage);
|
rpcProtocol.set(ExtHostContext.ExtHostStorage, extHostStorage);
|
||||||
+ rpcProtocol.set(ExtHostContext.ExtHostNodeProxy, extHostNodeProxy);
|
+ rpcProtocol.set(ExtHostContext.ExtHostNodeProxy, extHostNodeProxy);
|
||||||
rpcProtocol.set(ExtHostContext.ExtHostTunnelService, extHostTunnelService);
|
|
||||||
|
|
||||||
// automatically create and register addressable instances
|
// automatically create and register addressable instances
|
||||||
|
const extHostDecorations = rpcProtocol.set(ExtHostContext.ExtHostDecorations, accessor.get(IExtHostDecorations));
|
||||||
diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts
|
diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts
|
||||||
index 55130ff918..35ae724c4f 100644
|
index 3dab81c9c5..73fc57118a 100644
|
||||||
--- a/src/vs/workbench/api/common/extHost.protocol.ts
|
--- a/src/vs/workbench/api/common/extHost.protocol.ts
|
||||||
+++ b/src/vs/workbench/api/common/extHost.protocol.ts
|
+++ b/src/vs/workbench/api/common/extHost.protocol.ts
|
||||||
@@ -667,6 +667,16 @@ export interface MainThreadLabelServiceShape extends IDisposable {
|
@@ -655,6 +655,10 @@ export interface MainThreadLabelServiceShape extends IDisposable {
|
||||||
$unregisterResourceLabelFormatter(handle: number): void;
|
$unregisterResourceLabelFormatter(handle: number): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
+export interface MainThreadNodeProxyShape extends IDisposable {
|
+export interface MainThreadNodeProxyShape extends IDisposable {
|
||||||
+ $send(message: string): void;
|
+ $send(message: string): void;
|
||||||
+}
|
+}
|
||||||
|
+
|
||||||
|
export interface MainThreadSearchShape extends IDisposable {
|
||||||
|
$registerFileSearchProvider(handle: number, scheme: string): void;
|
||||||
|
$registerTextSearchProvider(handle: number, scheme: string): void;
|
||||||
|
@@ -888,6 +892,13 @@ export interface ExtHostLabelServiceShape {
|
||||||
|
$registerResourceLabelFormatter(formatter: ResourceLabelFormatter): IDisposable;
|
||||||
|
}
|
||||||
|
|
||||||
+export interface ExtHostNodeProxyShape {
|
+export interface ExtHostNodeProxyShape {
|
||||||
+ $onMessage(message: string): void;
|
+ $onMessage(message: string): void;
|
||||||
+ $onClose(): void;
|
+ $onClose(): void;
|
||||||
@ -2511,27 +2475,29 @@ index 55130ff918..35ae724c4f 100644
|
|||||||
+ $onUp(): void;
|
+ $onUp(): void;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
export interface MainThreadSearchShape extends IDisposable {
|
export interface ExtHostSearchShape {
|
||||||
$registerFileSearchProvider(handle: number, scheme: string): void;
|
$provideFileSearchResults(handle: number, session: number, query: search.IRawQuery, token: CancellationToken): Promise<search.ISearchCompleteStats>;
|
||||||
$registerTextSearchProvider(handle: number, scheme: string): void;
|
$provideTextSearchResults(handle: number, session: number, query: search.IRawTextQuery, token: CancellationToken): Promise<search.ISearchCompleteStats>;
|
||||||
@@ -1496,6 +1506,7 @@ export const MainContext = {
|
@@ -1431,7 +1442,8 @@ export const MainContext = {
|
||||||
|
MainThreadSearch: createMainId<MainThreadSearchShape>('MainThreadSearch'),
|
||||||
MainThreadTask: createMainId<MainThreadTaskShape>('MainThreadTask'),
|
MainThreadTask: createMainId<MainThreadTaskShape>('MainThreadTask'),
|
||||||
MainThreadWindow: createMainId<MainThreadWindowShape>('MainThreadWindow'),
|
MainThreadWindow: createMainId<MainThreadWindowShape>('MainThreadWindow'),
|
||||||
MainThreadLabelService: createMainId<MainThreadLabelServiceShape>('MainThreadLabelService'),
|
- MainThreadLabelService: createMainId<MainThreadLabelServiceShape>('MainThreadLabelService')
|
||||||
+ MainThreadNodeProxy: createMainId<MainThreadNodeProxyShape>('MainThreadNodeProxy'),
|
+ MainThreadLabelService: createMainId<MainThreadLabelServiceShape>('MainThreadLabelService'),
|
||||||
MainThreadTheming: createMainId<MainThreadThemingShape>('MainThreadTheming'),
|
+ MainThreadNodeProxy: createMainId<MainThreadNodeProxyShape>('MainThreadNodeProxy')
|
||||||
MainThreadTunnelService: createMainId<MainThreadTunnelServiceShape>('MainThreadTunnelService'),
|
};
|
||||||
MainThreadTimeline: createMainId<MainThreadTimelineShape>('MainThreadTimeline')
|
|
||||||
@@ -1533,6 +1544,7 @@ export const ExtHostContext = {
|
export const ExtHostContext = {
|
||||||
|
@@ -1465,5 +1477,6 @@ export const ExtHostContext = {
|
||||||
|
ExtHostStorage: createMainId<ExtHostStorageShape>('ExtHostStorage'),
|
||||||
ExtHostUrls: createExtId<ExtHostUrlsShape>('ExtHostUrls'),
|
ExtHostUrls: createExtId<ExtHostUrlsShape>('ExtHostUrls'),
|
||||||
ExtHostOutputService: createMainId<ExtHostOutputServiceShape>('ExtHostOutputService'),
|
ExtHostOutputService: createMainId<ExtHostOutputServiceShape>('ExtHostOutputService'),
|
||||||
ExtHostLabelService: createMainId<ExtHostLabelServiceShape>('ExtHostLabelService'),
|
- ExtHosLabelService: createMainId<ExtHostLabelServiceShape>('ExtHostLabelService')
|
||||||
+ ExtHostNodeProxy: createMainId<ExtHostNodeProxyShape>('ExtHostNodeProxy'),
|
+ ExtHosLabelService: createMainId<ExtHostLabelServiceShape>('ExtHostLabelService'),
|
||||||
ExtHostTheming: createMainId<ExtHostThemingShape>('ExtHostTheming'),
|
+ ExtHostNodeProxy: createMainId<ExtHostNodeProxyShape>('ExtHostNodeProxy')
|
||||||
ExtHostTunnelService: createMainId<ExtHostTunnelServiceShape>('ExtHostTunnelService'),
|
};
|
||||||
ExtHostAuthentication: createMainId<ExtHostAuthenticationShape>('ExtHostAuthentication'),
|
|
||||||
diff --git a/src/vs/workbench/api/common/extHostExtensionService.ts b/src/vs/workbench/api/common/extHostExtensionService.ts
|
diff --git a/src/vs/workbench/api/common/extHostExtensionService.ts b/src/vs/workbench/api/common/extHostExtensionService.ts
|
||||||
index 978bf32fcd..809b51227c 100644
|
index a3b5ed0057..679be7f377 100644
|
||||||
--- a/src/vs/workbench/api/common/extHostExtensionService.ts
|
--- a/src/vs/workbench/api/common/extHostExtensionService.ts
|
||||||
+++ b/src/vs/workbench/api/common/extHostExtensionService.ts
|
+++ b/src/vs/workbench/api/common/extHostExtensionService.ts
|
||||||
@@ -5,7 +5,7 @@
|
@@ -5,7 +5,7 @@
|
||||||
@ -2548,36 +2514,38 @@ index 978bf32fcd..809b51227c 100644
|
|||||||
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
|
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
|
||||||
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
|
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
|
||||||
+import { IExtHostNodeProxy } from 'vs/server/browser/extHostNodeProxy';
|
+import { IExtHostNodeProxy } from 'vs/server/browser/extHostNodeProxy';
|
||||||
import { IExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService';
|
|
||||||
|
|
||||||
interface ITestRunner {
|
interface ITestRunner {
|
||||||
@@ -77,6 +78,7 @@ export abstract class AbstractExtHostExtensionService implements ExtHostExtensio
|
/** Old test runner API, as exported from `vscode/lib/testrunner` */
|
||||||
|
@@ -76,6 +77,7 @@ export abstract class AbstractExtHostExtensionService implements ExtHostExtensio
|
||||||
protected readonly _extHostWorkspace: ExtHostWorkspace;
|
protected readonly _extHostWorkspace: ExtHostWorkspace;
|
||||||
protected readonly _extHostConfiguration: ExtHostConfiguration;
|
protected readonly _extHostConfiguration: ExtHostConfiguration;
|
||||||
protected readonly _logService: ILogService;
|
protected readonly _logService: ILogService;
|
||||||
+ protected readonly _nodeProxy: IExtHostNodeProxy;
|
+ protected readonly _nodeProxy: IExtHostNodeProxy;
|
||||||
protected readonly _extHostTunnelService: IExtHostTunnelService;
|
|
||||||
|
|
||||||
protected readonly _mainThreadWorkspaceProxy: MainThreadWorkspaceShape;
|
protected readonly _mainThreadWorkspaceProxy: MainThreadWorkspaceShape;
|
||||||
@@ -107,7 +109,8 @@ export abstract class AbstractExtHostExtensionService implements ExtHostExtensio
|
protected readonly _mainThreadTelemetryProxy: MainThreadTelemetryShape;
|
||||||
|
@@ -104,15 +106,18 @@ export abstract class AbstractExtHostExtensionService implements ExtHostExtensio
|
||||||
|
@IExtHostConfiguration extHostConfiguration: IExtHostConfiguration,
|
||||||
@ILogService logService: ILogService,
|
@ILogService logService: ILogService,
|
||||||
@IExtHostInitDataService initData: IExtHostInitDataService,
|
@IExtHostInitDataService initData: IExtHostInitDataService,
|
||||||
@IExtensionStoragePaths storagePath: IExtensionStoragePaths,
|
- @IExtensionStoragePaths storagePath: IExtensionStoragePaths
|
||||||
- @IExtHostTunnelService extHostTunnelService: IExtHostTunnelService
|
+ @IExtensionStoragePaths storagePath: IExtensionStoragePaths,
|
||||||
+ @IExtHostNodeProxy nodeProxy: IExtHostNodeProxy,
|
+ @IExtHostNodeProxy nodeProxy: IExtHostNodeProxy,
|
||||||
+ @IExtHostTunnelService extHostTunnelService: IExtHostTunnelService,
|
|
||||||
) {
|
) {
|
||||||
this._hostUtils = hostUtils;
|
this._hostUtils = hostUtils;
|
||||||
this._extHostContext = extHostContext;
|
this._extHostContext = extHostContext;
|
||||||
@@ -116,6 +119,7 @@ export abstract class AbstractExtHostExtensionService implements ExtHostExtensio
|
this._initData = initData;
|
||||||
|
+ this._nodeProxy = nodeProxy;
|
||||||
|
|
||||||
this._extHostWorkspace = extHostWorkspace;
|
this._extHostWorkspace = extHostWorkspace;
|
||||||
this._extHostConfiguration = extHostConfiguration;
|
this._extHostConfiguration = extHostConfiguration;
|
||||||
this._logService = logService;
|
this._logService = logService;
|
||||||
+ this._nodeProxy = nodeProxy;
|
+ this._nodeProxy = nodeProxy;
|
||||||
this._extHostTunnelService = extHostTunnelService;
|
|
||||||
this._disposables = new DisposableStore();
|
this._disposables = new DisposableStore();
|
||||||
|
|
||||||
@@ -341,14 +345,14 @@ export abstract class AbstractExtHostExtensionService implements ExtHostExtensio
|
this._mainThreadWorkspaceProxy = this._extHostContext.getProxy(MainContext.MainThreadWorkspace);
|
||||||
|
@@ -337,14 +342,14 @@ export abstract class AbstractExtHostExtensionService implements ExtHostExtensio
|
||||||
|
|
||||||
const activationTimesBuilder = new ExtensionActivationTimesBuilder(reason.startup);
|
const activationTimesBuilder = new ExtensionActivationTimesBuilder(reason.startup);
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
@ -2595,22 +2563,22 @@ index 978bf32fcd..809b51227c 100644
|
|||||||
private _loadExtensionContext(extensionDescription: IExtensionDescription): Promise<vscode.ExtensionContext> {
|
private _loadExtensionContext(extensionDescription: IExtensionDescription): Promise<vscode.ExtensionContext> {
|
||||||
|
|
||||||
diff --git a/src/vs/workbench/api/node/extHost.services.ts b/src/vs/workbench/api/node/extHost.services.ts
|
diff --git a/src/vs/workbench/api/node/extHost.services.ts b/src/vs/workbench/api/node/extHost.services.ts
|
||||||
index 72ad75d63e..07b8a3f20c 100644
|
index 9ae085f536..2510c86617 100644
|
||||||
--- a/src/vs/workbench/api/node/extHost.services.ts
|
--- a/src/vs/workbench/api/node/extHost.services.ts
|
||||||
+++ b/src/vs/workbench/api/node/extHost.services.ts
|
+++ b/src/vs/workbench/api/node/extHost.services.ts
|
||||||
@@ -24,6 +24,8 @@ import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePa
|
@@ -26,6 +26,8 @@ import { ExtHostExtensionService } from 'vs/workbench/api/node/extHostExtensionS
|
||||||
import { IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService';
|
|
||||||
import { ExtHostExtensionService } from 'vs/workbench/api/node/extHostExtensionService';
|
|
||||||
import { IExtHostStorage, ExtHostStorage } from 'vs/workbench/api/common/extHostStorage';
|
import { IExtHostStorage, ExtHostStorage } from 'vs/workbench/api/common/extHostStorage';
|
||||||
+import { ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
|
|
||||||
+import { IExtHostNodeProxy } from 'vs/server/browser/extHostNodeProxy';
|
|
||||||
import { ILogService } from 'vs/platform/log/common/log';
|
import { ILogService } from 'vs/platform/log/common/log';
|
||||||
import { ExtHostLogService } from 'vs/workbench/api/node/extHostLogService';
|
import { ExtHostLogService } from 'vs/workbench/api/node/extHostLogService';
|
||||||
import { IExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService';
|
+import { ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
|
||||||
@@ -47,3 +49,19 @@ registerSingleton(IExtensionStoragePaths, ExtensionStoragePaths);
|
+import { IExtHostNodeProxy } from 'vs/server/browser/extHostNodeProxy';
|
||||||
|
|
||||||
|
// register singleton services
|
||||||
|
registerSingleton(ILogService, ExtHostLogService);
|
||||||
|
@@ -42,3 +44,19 @@ registerSingleton(IExtHostSearch, NativeExtHostSearch);
|
||||||
|
registerSingleton(IExtensionStoragePaths, ExtensionStoragePaths);
|
||||||
registerSingleton(IExtHostExtensionService, ExtHostExtensionService);
|
registerSingleton(IExtHostExtensionService, ExtHostExtensionService);
|
||||||
registerSingleton(IExtHostStorage, ExtHostStorage);
|
registerSingleton(IExtHostStorage, ExtHostStorage);
|
||||||
registerSingleton(IExtHostTunnelService, ExtHostTunnelService);
|
|
||||||
+
|
+
|
||||||
+function NotImplementedProxy<T>(name: ServiceIdentifier<T>): { new(): T } {
|
+function NotImplementedProxy<T>(name: ServiceIdentifier<T>): { new(): T } {
|
||||||
+ return <any>class {
|
+ return <any>class {
|
||||||
@ -2756,10 +2724,10 @@ index 4781f22676..86c9246f51 100644
|
|||||||
throw new Error(`Cannot load module '${request}'`);
|
throw new Error(`Cannot load module '${request}'`);
|
||||||
}
|
}
|
||||||
diff --git a/src/vs/workbench/browser/web.main.ts b/src/vs/workbench/browser/web.main.ts
|
diff --git a/src/vs/workbench/browser/web.main.ts b/src/vs/workbench/browser/web.main.ts
|
||||||
index 94e7052574..4e83208017 100644
|
index 807ac56d8f..7482c92fd4 100644
|
||||||
--- a/src/vs/workbench/browser/web.main.ts
|
--- a/src/vs/workbench/browser/web.main.ts
|
||||||
+++ b/src/vs/workbench/browser/web.main.ts
|
+++ b/src/vs/workbench/browser/web.main.ts
|
||||||
@@ -49,6 +49,7 @@ import { IndexedDBLogProvider } from 'vs/workbench/services/log/browser/indexedD
|
@@ -50,6 +50,7 @@ import { IndexedDBLogProvider } from 'vs/workbench/services/log/browser/indexedD
|
||||||
import { InMemoryLogProvider } from 'vs/workbench/services/log/common/inMemoryLogProvider';
|
import { InMemoryLogProvider } from 'vs/workbench/services/log/common/inMemoryLogProvider';
|
||||||
import { isWorkspaceToOpen, isFolderToOpen } from 'vs/platform/windows/common/windows';
|
import { isWorkspaceToOpen, isFolderToOpen } from 'vs/platform/windows/common/windows';
|
||||||
import { getWorkspaceIdentifier } from 'vs/workbench/services/workspaces/browser/workspaces';
|
import { getWorkspaceIdentifier } from 'vs/workbench/services/workspaces/browser/workspaces';
|
||||||
@ -2767,7 +2735,7 @@ index 94e7052574..4e83208017 100644
|
|||||||
|
|
||||||
class BrowserMain extends Disposable {
|
class BrowserMain extends Disposable {
|
||||||
|
|
||||||
@@ -85,6 +86,7 @@ class BrowserMain extends Disposable {
|
@@ -86,6 +87,7 @@ class BrowserMain extends Disposable {
|
||||||
|
|
||||||
// Startup
|
// Startup
|
||||||
workbench.startup();
|
workbench.startup();
|
||||||
@ -2775,6 +2743,14 @@ index 94e7052574..4e83208017 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
private registerListeners(workbench: Workbench, storageService: BrowserStorageService): void {
|
private registerListeners(workbench: Workbench, storageService: BrowserStorageService): void {
|
||||||
|
@@ -247,6 +249,7 @@ class BrowserMain extends Disposable {
|
||||||
|
const channel = connection.getChannel<IChannel>(REMOTE_FILE_SYSTEM_CHANNEL_NAME);
|
||||||
|
const remoteFileSystemProvider = this._register(new RemoteFileSystemProvider(channel, remoteAgentService.getEnvironment()));
|
||||||
|
fileService.registerProvider(Schemas.vscodeRemote, remoteFileSystemProvider);
|
||||||
|
+ fileService.registerProvider(Schemas.file, remoteFileSystemProvider);
|
||||||
|
|
||||||
|
if (!this.configuration.userDataProvider) {
|
||||||
|
const remoteUserDataUri = this.getRemoteUserDataUri();
|
||||||
diff --git a/src/vs/workbench/common/resources.ts b/src/vs/workbench/common/resources.ts
|
diff --git a/src/vs/workbench/common/resources.ts b/src/vs/workbench/common/resources.ts
|
||||||
index c509716fc4..2b4c847d1e 100644
|
index c509716fc4..2b4c847d1e 100644
|
||||||
--- a/src/vs/workbench/common/resources.ts
|
--- a/src/vs/workbench/common/resources.ts
|
||||||
@ -2798,7 +2774,7 @@ index c509716fc4..2b4c847d1e 100644
|
|||||||
this._langIdKey.set(value ? this._modeService.getModeIdByFilepathOrFirstLine(value) : null);
|
this._langIdKey.set(value ? this._modeService.getModeIdByFilepathOrFirstLine(value) : null);
|
||||||
this._extensionKey.set(value ? extname(value) : null);
|
this._extensionKey.set(value ? extname(value) : null);
|
||||||
diff --git a/src/vs/workbench/contrib/webview/browser/pre/main.js b/src/vs/workbench/contrib/webview/browser/pre/main.js
|
diff --git a/src/vs/workbench/contrib/webview/browser/pre/main.js b/src/vs/workbench/contrib/webview/browser/pre/main.js
|
||||||
index 63c9af47e2..021358fef9 100644
|
index 138707c9a9..9134d5f503 100644
|
||||||
--- a/src/vs/workbench/contrib/webview/browser/pre/main.js
|
--- a/src/vs/workbench/contrib/webview/browser/pre/main.js
|
||||||
+++ b/src/vs/workbench/contrib/webview/browser/pre/main.js
|
+++ b/src/vs/workbench/contrib/webview/browser/pre/main.js
|
||||||
@@ -329,7 +329,8 @@
|
@@ -329,7 +329,8 @@
|
||||||
@ -2831,10 +2807,10 @@ index f67f9aa064..add754cd5a 100644
|
|||||||
|
|
||||||
const { choice } = await this.show(Severity.Info, this.productService.nameLong, [nls.localize('copy', "Copy"), nls.localize('ok', "OK")], { detail, cancelId: 1 });
|
const { choice } = await this.show(Severity.Info, this.productService.nameLong, [nls.localize('copy', "Copy"), nls.localize('ok', "OK")], { detail, cancelId: 1 });
|
||||||
diff --git a/src/vs/workbench/services/environment/browser/environmentService.ts b/src/vs/workbench/services/environment/browser/environmentService.ts
|
diff --git a/src/vs/workbench/services/environment/browser/environmentService.ts b/src/vs/workbench/services/environment/browser/environmentService.ts
|
||||||
index 1bf4cfad2a..924a2fcd87 100644
|
index d54e68fa70..d1cd9c4c1b 100644
|
||||||
--- a/src/vs/workbench/services/environment/browser/environmentService.ts
|
--- a/src/vs/workbench/services/environment/browser/environmentService.ts
|
||||||
+++ b/src/vs/workbench/services/environment/browser/environmentService.ts
|
+++ b/src/vs/workbench/services/environment/browser/environmentService.ts
|
||||||
@@ -195,8 +195,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
|
@@ -189,8 +189,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
get webviewExternalEndpoint(): string {
|
get webviewExternalEndpoint(): string {
|
||||||
@ -2845,7 +2821,7 @@ index 1bf4cfad2a..924a2fcd87 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
@@ -249,6 +249,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
|
@@ -245,6 +245,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
|
||||||
installSourcePath!: string;
|
installSourcePath!: string;
|
||||||
|
|
||||||
builtinExtensionsPath!: string;
|
builtinExtensionsPath!: string;
|
||||||
@ -2855,7 +2831,7 @@ index 1bf4cfad2a..924a2fcd87 100644
|
|||||||
globalStorageHome!: string;
|
globalStorageHome!: string;
|
||||||
workspaceStorageHome!: string;
|
workspaceStorageHome!: string;
|
||||||
diff --git a/src/vs/workbench/services/extensions/browser/extensionService.ts b/src/vs/workbench/services/extensions/browser/extensionService.ts
|
diff --git a/src/vs/workbench/services/extensions/browser/extensionService.ts b/src/vs/workbench/services/extensions/browser/extensionService.ts
|
||||||
index fe891a042e..21d0d4bf61 100644
|
index d164f2c127..5a08106f04 100644
|
||||||
--- a/src/vs/workbench/services/extensions/browser/extensionService.ts
|
--- a/src/vs/workbench/services/extensions/browser/extensionService.ts
|
||||||
+++ b/src/vs/workbench/services/extensions/browser/extensionService.ts
|
+++ b/src/vs/workbench/services/extensions/browser/extensionService.ts
|
||||||
@@ -119,6 +119,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten
|
@@ -119,6 +119,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten
|
||||||
@ -2867,7 +2843,7 @@ index fe891a042e..21d0d4bf61 100644
|
|||||||
this._checkEnableProposedApi(remoteEnv.extensions);
|
this._checkEnableProposedApi(remoteEnv.extensions);
|
||||||
|
|
||||||
diff --git a/src/vs/workbench/services/extensions/common/extensionsUtil.ts b/src/vs/workbench/services/extensions/common/extensionsUtil.ts
|
diff --git a/src/vs/workbench/services/extensions/common/extensionsUtil.ts b/src/vs/workbench/services/extensions/common/extensionsUtil.ts
|
||||||
index 9e8352ac88..22a2d296f9 100644
|
index 75f715cc51..4422cfa418 100644
|
||||||
--- a/src/vs/workbench/services/extensions/common/extensionsUtil.ts
|
--- a/src/vs/workbench/services/extensions/common/extensionsUtil.ts
|
||||||
+++ b/src/vs/workbench/services/extensions/common/extensionsUtil.ts
|
+++ b/src/vs/workbench/services/extensions/common/extensionsUtil.ts
|
||||||
@@ -32,7 +32,8 @@ export function canExecuteOnWorkspace(manifest: IExtensionManifest, productServi
|
@@ -32,7 +32,8 @@ export function canExecuteOnWorkspace(manifest: IExtensionManifest, productServi
|
||||||
@ -2915,7 +2891,7 @@ index 0f35c54431..32fff09b18 100644
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
diff --git a/src/vs/workbench/services/extensions/worker/extHost.services.ts b/src/vs/workbench/services/extensions/worker/extHost.services.ts
|
diff --git a/src/vs/workbench/services/extensions/worker/extHost.services.ts b/src/vs/workbench/services/extensions/worker/extHost.services.ts
|
||||||
index bbb72e9511..0785d3391d 100644
|
index 8a65101aa4..1c4923dd6d 100644
|
||||||
--- a/src/vs/workbench/services/extensions/worker/extHost.services.ts
|
--- a/src/vs/workbench/services/extensions/worker/extHost.services.ts
|
||||||
+++ b/src/vs/workbench/services/extensions/worker/extHost.services.ts
|
+++ b/src/vs/workbench/services/extensions/worker/extHost.services.ts
|
||||||
@@ -18,9 +18,10 @@ import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePa
|
@@ -18,9 +18,10 @@ import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePa
|
||||||
@ -2927,15 +2903,14 @@ index bbb72e9511..0785d3391d 100644
|
|||||||
import { ExtHostLogService } from 'vs/workbench/api/worker/extHostLogService';
|
import { ExtHostLogService } from 'vs/workbench/api/worker/extHostLogService';
|
||||||
+import { ExtHostNodeProxy, IExtHostNodeProxy } from 'vs/server/browser/extHostNodeProxy';
|
+import { ExtHostNodeProxy, IExtHostNodeProxy } from 'vs/server/browser/extHostNodeProxy';
|
||||||
+import { ExtensionStoragePaths } from 'vs/workbench/api/node/extHostStoragePaths';
|
+import { ExtensionStoragePaths } from 'vs/workbench/api/node/extHostStoragePaths';
|
||||||
import { IExtHostTunnelService, ExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService';
|
|
||||||
import { IExtHostApiDeprecationService, ExtHostApiDeprecationService, } from 'vs/workbench/api/common/extHostApiDeprecationService';
|
|
||||||
|
|
||||||
@@ -36,24 +37,10 @@ registerSingleton(IExtHostDocumentsAndEditors, ExtHostDocumentsAndEditors);
|
// register singleton services
|
||||||
|
registerSingleton(ILogService, ExtHostLogService);
|
||||||
|
@@ -33,25 +34,9 @@ registerSingleton(IExtHostDocumentsAndEditors, ExtHostDocumentsAndEditors);
|
||||||
registerSingleton(IExtHostStorage, ExtHostStorage);
|
registerSingleton(IExtHostStorage, ExtHostStorage);
|
||||||
registerSingleton(IExtHostExtensionService, ExtHostExtensionService);
|
registerSingleton(IExtHostExtensionService, ExtHostExtensionService);
|
||||||
registerSingleton(IExtHostSearch, ExtHostSearch);
|
registerSingleton(IExtHostSearch, ExtHostSearch);
|
||||||
+registerSingleton(IExtHostNodeProxy, ExtHostNodeProxy);
|
+registerSingleton(IExtHostNodeProxy, ExtHostNodeProxy);
|
||||||
registerSingleton(IExtHostTunnelService, ExtHostTunnelService);
|
|
||||||
|
|
||||||
-// register services that only throw errors
|
-// register services that only throw errors
|
||||||
-function NotImplementedProxy<T>(name: ServiceIdentifier<T>): { new(): T } {
|
-function NotImplementedProxy<T>(name: ServiceIdentifier<T>): { new(): T } {
|
||||||
@ -2955,7 +2930,9 @@ index bbb72e9511..0785d3391d 100644
|
|||||||
registerSingleton(IExtHostTerminalService, WorkerExtHostTerminalService);
|
registerSingleton(IExtHostTerminalService, WorkerExtHostTerminalService);
|
||||||
registerSingleton(IExtHostTask, WorkerExtHostTask);
|
registerSingleton(IExtHostTask, WorkerExtHostTask);
|
||||||
registerSingleton(IExtHostDebugService, WorkerExtHostDebugService);
|
registerSingleton(IExtHostDebugService, WorkerExtHostDebugService);
|
||||||
-registerSingleton(IExtensionStoragePaths, class extends NotImplementedProxy(IExtensionStoragePaths) { whenReady = Promise.resolve(); });
|
-registerSingleton(IExtensionStoragePaths, class extends NotImplementedProxy(IExtensionStoragePaths) {
|
||||||
|
- whenReady = Promise.resolve();
|
||||||
|
-});
|
||||||
+registerSingleton(IExtensionStoragePaths, ExtensionStoragePaths);
|
+registerSingleton(IExtensionStoragePaths, ExtensionStoragePaths);
|
||||||
diff --git a/src/vs/workbench/services/extensions/worker/extensionHostWorkerMain.ts b/src/vs/workbench/services/extensions/worker/extensionHostWorkerMain.ts
|
diff --git a/src/vs/workbench/services/extensions/worker/extensionHostWorkerMain.ts b/src/vs/workbench/services/extensions/worker/extensionHostWorkerMain.ts
|
||||||
index 79455414c0..5ba66b2d83 100644
|
index 79455414c0..5ba66b2d83 100644
|
||||||
@ -2975,10 +2952,10 @@ index 79455414c0..5ba66b2d83 100644
|
|||||||
|
|
||||||
require(['vs/workbench/services/extensions/worker/extensionHostWorker'], () => { }, err => console.error(err));
|
require(['vs/workbench/services/extensions/worker/extensionHostWorker'], () => { }, err => console.error(err));
|
||||||
diff --git a/src/vs/workbench/services/localizations/electron-browser/localizationsService.ts b/src/vs/workbench/services/localizations/electron-browser/localizationsService.ts
|
diff --git a/src/vs/workbench/services/localizations/electron-browser/localizationsService.ts b/src/vs/workbench/services/localizations/electron-browser/localizationsService.ts
|
||||||
index 99394090da..4891e0fece 100644
|
index 99394090da..fa86aef420 100644
|
||||||
--- a/src/vs/workbench/services/localizations/electron-browser/localizationsService.ts
|
--- a/src/vs/workbench/services/localizations/electron-browser/localizationsService.ts
|
||||||
+++ b/src/vs/workbench/services/localizations/electron-browser/localizationsService.ts
|
+++ b/src/vs/workbench/services/localizations/electron-browser/localizationsService.ts
|
||||||
@@ -5,17 +5,17 @@
|
@@ -5,17 +5,18 @@
|
||||||
|
|
||||||
import { createChannelSender } from 'vs/base/parts/ipc/node/ipc';
|
import { createChannelSender } from 'vs/base/parts/ipc/node/ipc';
|
||||||
import { ILocalizationsService } from 'vs/platform/localizations/common/localizations';
|
import { ILocalizationsService } from 'vs/platform/localizations/common/localizations';
|
||||||
@ -2990,6 +2967,7 @@ index 99394090da..4891e0fece 100644
|
|||||||
|
|
||||||
_serviceBrand: undefined;
|
_serviceBrand: undefined;
|
||||||
|
|
||||||
|
+ // NOTE@coder: Patched to work in the browser.
|
||||||
constructor(
|
constructor(
|
||||||
- @ISharedProcessService sharedProcessService: ISharedProcessService,
|
- @ISharedProcessService sharedProcessService: ISharedProcessService,
|
||||||
+ @IRemoteAgentService remoteAgentService: IRemoteAgentService,
|
+ @IRemoteAgentService remoteAgentService: IRemoteAgentService,
|
||||||
@ -3000,7 +2978,7 @@ index 99394090da..4891e0fece 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/src/vs/workbench/workbench.web.main.ts b/src/vs/workbench/workbench.web.main.ts
|
diff --git a/src/vs/workbench/workbench.web.main.ts b/src/vs/workbench/workbench.web.main.ts
|
||||||
index 0719b361e0..b9420ba206 100644
|
index f424c87d92..6fb1e4f2ed 100644
|
||||||
--- a/src/vs/workbench/workbench.web.main.ts
|
--- a/src/vs/workbench/workbench.web.main.ts
|
||||||
+++ b/src/vs/workbench/workbench.web.main.ts
|
+++ b/src/vs/workbench/workbench.web.main.ts
|
||||||
@@ -34,7 +34,8 @@ import 'vs/workbench/services/textfile/browser/browserTextFileService';
|
@@ -34,7 +34,8 @@ import 'vs/workbench/services/textfile/browser/browserTextFileService';
|
||||||
@ -3033,7 +3011,7 @@ index 297dce969b..06e0199c74 100644
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
diff --git a/test/automation/yarn.lock b/test/automation/yarn.lock
|
diff --git a/test/automation/yarn.lock b/test/automation/yarn.lock
|
||||||
index 94a1350861..e45971c254 100644
|
index 94a1350861..d75660c5af 100644
|
||||||
--- a/test/automation/yarn.lock
|
--- a/test/automation/yarn.lock
|
||||||
+++ b/test/automation/yarn.lock
|
+++ b/test/automation/yarn.lock
|
||||||
@@ -21,10 +21,10 @@
|
@@ -21,10 +21,10 @@
|
||||||
@ -3045,9 +3023,9 @@ index 94a1350861..e45971c254 100644
|
|||||||
- resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.33.tgz#1126e94374014e54478092830704f6ea89df04cd"
|
- resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.33.tgz#1126e94374014e54478092830704f6ea89df04cd"
|
||||||
- integrity sha512-vmCdO8Bm1ExT+FWfC9sd9r4jwqM7o97gGy2WBshkkXbf/2nLAJQUrZfIhw27yVOtLUev6kSZc4cav/46KbDd8A==
|
- integrity sha512-vmCdO8Bm1ExT+FWfC9sd9r4jwqM7o97gGy2WBshkkXbf/2nLAJQUrZfIhw27yVOtLUev6kSZc4cav/46KbDd8A==
|
||||||
+"@types/node@^10.12.12":
|
+"@types/node@^10.12.12":
|
||||||
+ version "10.17.15"
|
+ version "10.17.13"
|
||||||
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.15.tgz#bfff4e23e9e70be6eec450419d51e18de1daf8e7"
|
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.13.tgz#ccebcdb990bd6139cd16e84c39dc2fb1023ca90c"
|
||||||
+ integrity sha512-daFGV9GSs6USfPgxceDA8nlSe48XrVCJfDeYm7eokxq/ye7iuOH87hKXgMtEAVLFapkczbZsx868PMDT1Y0a6A==
|
+ integrity sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==
|
||||||
|
|
||||||
"@types/puppeteer@^1.19.0":
|
"@types/puppeteer@^1.19.0":
|
||||||
version "1.19.1"
|
version "1.19.1"
|
||||||
@ -3099,34 +3077,34 @@ index 82626a55c7..5d3ee1b69b 100644
|
|||||||
union-value@^1.0.0:
|
union-value@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
diff --git a/yarn.lock b/yarn.lock
|
diff --git a/yarn.lock b/yarn.lock
|
||||||
index a98533bad9..19e94f8c4a 100644
|
index edbbc9743d..fabb9c1491 100644
|
||||||
--- a/yarn.lock
|
--- a/yarn.lock
|
||||||
+++ b/yarn.lock
|
+++ b/yarn.lock
|
||||||
@@ -140,6 +140,23 @@
|
@@ -95,6 +95,23 @@
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.11"
|
||||||
to-fast-properties "^2.0.0"
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
+"@coder/logger@^1.1.12":
|
+"@coder/logger@^1.1.11":
|
||||||
+ version "1.1.12"
|
+ version "1.1.11"
|
||||||
+ resolved "https://registry.yarnpkg.com/@coder/logger/-/logger-1.1.12.tgz#def113b7183abc35a8da2b57f0929f7e9626f4e0"
|
+ resolved "https://registry.yarnpkg.com/@coder/logger/-/logger-1.1.11.tgz#e6f36dba9436ae61e66e3f66787d75c768617605"
|
||||||
+ integrity sha512-oM0j3lTVPqApUm3e0bKKcXpfAiJEys31fgEfQlHmvEA13ujsC4zDuXnt0uzDtph48eMoNRLOF/EE4mNShVJKVw==
|
+ integrity sha512-EEh1dqSU0AaqjjjMsVqumgZGbrZimKFKIb4t5E6o3FLfVUxJCReSME78Yj2N1xWUVAHMnqafDCxLostpuIotzw==
|
||||||
+
|
+
|
||||||
+"@coder/node-browser@^1.0.8":
|
+"@coder/node-browser@^1.0.8":
|
||||||
+ version "1.0.8"
|
+ version "1.0.8"
|
||||||
+ resolved "https://registry.yarnpkg.com/@coder/node-browser/-/node-browser-1.0.8.tgz#c22f581b089ad7d95ad1362fd351c57b7fbc6e70"
|
+ resolved "https://registry.yarnpkg.com/@coder/node-browser/-/node-browser-1.0.8.tgz#c22f581b089ad7d95ad1362fd351c57b7fbc6e70"
|
||||||
+ integrity sha512-NLF9sYMRCN9WK1C224pHax1Cay3qKypg25BhVg7VfNbo3Cpa3daata8RF/rT8JK3lPsu8PmFgDRQjzGC9X1Lrw==
|
+ integrity sha512-NLF9sYMRCN9WK1C224pHax1Cay3qKypg25BhVg7VfNbo3Cpa3daata8RF/rT8JK3lPsu8PmFgDRQjzGC9X1Lrw==
|
||||||
+
|
+
|
||||||
+"@coder/requirefs@^1.1.4":
|
+"@coder/requirefs@^1.0.6":
|
||||||
+ version "1.1.4"
|
+ version "1.0.6"
|
||||||
+ resolved "https://registry.yarnpkg.com/@coder/requirefs/-/requirefs-1.1.4.tgz#ca59223a396021f2f606f71b833c43dbba06b10b"
|
+ resolved "https://registry.yarnpkg.com/@coder/requirefs/-/requirefs-1.0.6.tgz#d2d9b529d55e00da5b779aba0ac37c534a9fe55c"
|
||||||
+ integrity sha512-E+WB3Wvr31v7eqWdItBW4eVQ0tWr4iKH6qjzCMnRxTsbiiNzLgtDzRBYt/3KxnPrtWXXX6Fn02Ut933soZXJ+g==
|
+ integrity sha512-AEHfWXXJV1FGB0CjTVz+BhyS9G5xUlC0L1+/jDgGE9CuKK2obZzg3xdALFXadZhcpQGa2vXFEmrtkkW2xP6X2A==
|
||||||
+ optionalDependencies:
|
+ optionalDependencies:
|
||||||
+ jszip "2.6.0"
|
+ jszip "2.6.0"
|
||||||
+
|
+
|
||||||
"@istanbuljs/schema@^0.1.2":
|
"@types/applicationinsights@0.20.0":
|
||||||
version "0.1.2"
|
version "0.20.0"
|
||||||
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
|
resolved "https://registry.yarnpkg.com/@types/applicationinsights/-/applicationinsights-0.20.0.tgz#fa7b36dc954f635fa9037cad27c378446b1048fb"
|
||||||
@@ -5371,6 +5388,13 @@ jsprim@^1.2.2:
|
@@ -4943,6 +4960,13 @@ jsprim@^1.2.2:
|
||||||
json-schema "0.2.3"
|
json-schema "0.2.3"
|
||||||
verror "1.10.0"
|
verror "1.10.0"
|
||||||
|
|
||||||
@ -3140,14 +3118,14 @@ index a98533bad9..19e94f8c4a 100644
|
|||||||
just-debounce@^1.0.0:
|
just-debounce@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea"
|
resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea"
|
||||||
@@ -6761,6 +6785,11 @@ p-try@^2.0.0:
|
@@ -6248,6 +6272,11 @@ p-try@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1"
|
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1"
|
||||||
integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==
|
integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==
|
||||||
|
|
||||||
+pako@~1.0.0:
|
+pako@~1.0.0:
|
||||||
+ version "1.0.11"
|
+ version "1.0.10"
|
||||||
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
|
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
|
||||||
+ integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
|
+ integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
|
||||||
+
|
+
|
||||||
pako@~1.0.5:
|
pako@~1.0.5:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
19
ci/vscode.sh
Executable file
19
ci/vscode.sh
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# 1. Ensures VS Code is cloned.
|
||||||
|
# 2. Patches it.
|
||||||
|
# 3. Installs it.
|
||||||
|
main() {
|
||||||
|
cd "$(dirname "$0")/.."
|
||||||
|
|
||||||
|
git submodule update --init
|
||||||
|
|
||||||
|
# If the patch fails to apply, then it's likely already applied
|
||||||
|
yarn vscode:patch &>/dev/null || true
|
||||||
|
|
||||||
|
# Install VS Code dependencies.
|
||||||
|
(cd lib/vscode && yarn)
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
Binary file not shown.
Before Width: | Height: | Size: 121 KiB |
@ -1,24 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg width="200px" height="40px" viewBox="0 0 200 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<!-- Generator: Sketch 52.5 (67469) - http://www.bohemiancoding.com/sketch -->
|
|
||||||
<title>do-btn-blue-ghost</title>
|
|
||||||
<desc>Created with Sketch.</desc>
|
|
||||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
||||||
<g id="Partner-welcome-kit-Copy-3" transform="translate(-651.000000, -828.000000)">
|
|
||||||
<g id="do-btn-blue-ghost" transform="translate(651.000000, 828.000000)">
|
|
||||||
<rect id="Rectangle-Copy-4" stroke="#0069FF" x="0.5" y="0.5" width="199" height="39" rx="6"></rect>
|
|
||||||
<path d="M6,0 L47,0 L47,40 L6,40 C2.6862915,40 4.05812251e-16,37.3137085 0,34 L-8.8817842e-16,6 C-1.29399067e-15,2.6862915 2.6862915,6.08718376e-16 6,0 Z" id="Rectangle-Copy-5" fill="#0069FF"></path>
|
|
||||||
<g id="DO_Logo_horizontal_blue-Copy-3" transform="translate(13.000000, 10.000000)" fill="#FFFFFF">
|
|
||||||
<path d="M10.0098493,20 L10.0098493,16.1262429 C14.12457,16.1262429 17.2897398,12.0548452 15.7269372,7.74627862 C15.1334679,6.14538921 13.8674,4.86072487 12.2650328,4.28756693 C7.952489,2.72620566 3.87733294,5.88845634 3.87733294,9.99938223 C3.87733294,9.99938223 3.87733294,9.99938223 3.87733294,9.99938223 L0,9.99938223 C0,3.45747613 6.3303395,-1.64165309 13.1948014,0.492866119 C16.2017127,1.42177726 18.57559,3.81322933 19.5053586,6.79760341 C21.6418482,13.6754986 16.5577943,20 10.0098493,20 Z" id="XMLID_49_"></path>
|
|
||||||
<polygon id="XMLID_47_" points="9.52380952 16.1904762 5.71428571 16.1904762 5.71428571 12.3809524 5.71428571 12.3809524 9.52380952 12.3809524 9.52380952 12.3809524"></polygon>
|
|
||||||
<polygon id="XMLID_46_" points="6.66666667 19.047619 3.80952381 19.047619 3.80952381 19.047619 3.80952381 16.1904762 6.66666667 16.1904762"></polygon>
|
|
||||||
<polygon id="XMLID_45_" points="3.80952381 16.1904762 0.952380952 16.1904762 0.952380952 16.1904762 0.952380952 13.3333333 0.952380952 13.3333333 3.80952381 13.3333333 3.80952381 13.3333333"></polygon>
|
|
||||||
</g>
|
|
||||||
<!-- Modified to add GitHub font-family after DigitalOcean's font-family, otherwise it looks bad on GitHub -->
|
|
||||||
<text id="Create-a-Droplet-Copy-3" font-family="Sailec-Medium, Sailec, -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" font-size="16" font-weight="400" fill="#0069FF">
|
|
||||||
<tspan x="58" y="26">Create a Droplet</tspan>
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.7 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.3 MiB |
Binary file not shown.
Before Width: | Height: | Size: 66 KiB |
@ -1,75 +0,0 @@
|
|||||||
# Installing code-server in your ChromiumOS/ChromeOS/CloudReady machine
|
|
||||||
|
|
||||||
This guide will show you how to install code-server into your CrOS machine.
|
|
||||||
|
|
||||||
## Using Crostini
|
|
||||||
|
|
||||||
One of the easier ways to run code-server is via
|
|
||||||
[Crostini](https://www.aboutchromebooks.com/tag/project-crostini/), the Linux
|
|
||||||
apps support feature in CrOS. Make sure you have enough RAM, HDD space and your
|
|
||||||
CPU has VT-x/ AMD-V support. If your chromebook has this, then you are
|
|
||||||
qualified to use Crostini.
|
|
||||||
|
|
||||||
If you are running R69, you might want to enable this on
|
|
||||||
[Chrome Flags](chrome://flags/#enable-experimental-crostini-ui).
|
|
||||||
If you run R72, however, this is already enabled for you.
|
|
||||||
|
|
||||||
After checking your prerequisites, follow the steps in [the self-host install guide](index.md)
|
|
||||||
on installing code-server. Once done, make sure code-server works by running
|
|
||||||
it. After running it, simply go to `penguin.linux.test:8080` to access
|
|
||||||
code-server. Now you should be greeted with this screen. If you did,
|
|
||||||
congratulations, you have installed code-server in your Chromebook!
|
|
||||||
|
|
||||||
![code-server on Chromebook](assets/cros.png)
|
|
||||||
|
|
||||||
Alternatively, if you ran code-server in another container and you need the IP
|
|
||||||
for that specific container, simply go to Termina's shell via `crosh` and type
|
|
||||||
`vsh termina`.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
Loading extra module: /usr/share/crosh/dev.d/50-crosh.sh
|
|
||||||
Welcome to crosh, the Chrome OS developer shell.
|
|
||||||
|
|
||||||
If you got here by mistake, don't panic! Just close this tab and carry on.
|
|
||||||
|
|
||||||
Type 'help' for a list of commands.
|
|
||||||
|
|
||||||
If you want to customize the look/behavior, you can use the options page.
|
|
||||||
Load it by using the Ctrl+Shift+P keyboard shortcut.
|
|
||||||
|
|
||||||
crosh> vsh termina
|
|
||||||
(termina) chronos@localhost ~ $
|
|
||||||
```
|
|
||||||
While in termina, run `lxc list`. It should output the list of running containers.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
(termina) chronos@localhost ~ $ lxc list
|
|
||||||
+---------|---------|-----------------------|------|------------|-----------+
|
|
||||||
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
|
|
||||||
+---------|---------|-----------------------|------|------------|-----------+
|
|
||||||
| penguin | RUNNING | 100.115.92.199 (eth0) | | PERSISTENT | 0 |
|
|
||||||
+---------|---------|-----------------------|------|------------|-----------+
|
|
||||||
(termina) chronos@localhost ~ $
|
|
||||||
```
|
|
||||||
|
|
||||||
For this example, we show the default `penguin` container, which is exposed on
|
|
||||||
`eth0` at 100.115.92.199. Simply enter the IP of the container where the
|
|
||||||
code-server runs to Chrome.
|
|
||||||
|
|
||||||
## Using Crouton
|
|
||||||
|
|
||||||
[Crouton](https://github.com/dnschneid/crouton) is one of the old ways to get a
|
|
||||||
running full Linux via `chroot` on a Chromebook. To use crouton, enable
|
|
||||||
developer mode and go to `crosh`. This time, run `shell`, which should drop you
|
|
||||||
to `bash`.
|
|
||||||
|
|
||||||
Make sure you downloaded `crouton`, if so, go ahead and run it under
|
|
||||||
`~/Downloads`. After installing your chroot container via crouton, go ahead and
|
|
||||||
enter `enter-chroot` to enter your container.
|
|
||||||
|
|
||||||
Follow the instructions set in [the self-host install guide](index.md) to
|
|
||||||
install code-server. After that is done, run `code-server` and verify it works
|
|
||||||
by going to `localhost:8080`.
|
|
||||||
|
|
||||||
> At this point in writing, `localhost` seems to work in this method. However,
|
|
||||||
> the author is not sure if it applies still to newer Chromebooks.
|
|
@ -1,73 +0,0 @@
|
|||||||
# Set up instance
|
|
||||||
## EC2 on AWS
|
|
||||||
- Click **Launch Instance** from your [EC2 dashboard](https://console.aws.amazon.com/ec2/v2/home).
|
|
||||||
- Select the Ubuntu Server 18.04 LTS (HVM), SSD Volume Type
|
|
||||||
- Select an appropriate instance size (we recommend t2.medium/large, depending
|
|
||||||
on team size and number of repositories/languages enabled), then
|
|
||||||
**Next: Configure Instance Details**.
|
|
||||||
- Select **Next: ...** until you get to the **Configure Security Group** page,
|
|
||||||
then add a **Custom TCP Rule** rule with port range set to `8080` and source
|
|
||||||
set to "Anywhere".
|
|
||||||
> Rules with source of 0.0.0.0/0 allow all IP addresses to access your
|
|
||||||
> instance. We recommend setting [security group rules](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html?icmpid=docs_ec2_console)
|
|
||||||
> to allow access from known IP addresses only.
|
|
||||||
- Click **Launch**.
|
|
||||||
- You will be prompted to create a key pair.
|
|
||||||
- From the dropdown choose "create a new pair", give the key pair a name.
|
|
||||||
- Click **Download Key Pair** and store the file in a safe place.
|
|
||||||
- Click **Launch Instances**.
|
|
||||||
- Head to your [EC2 dashboard](https://console.aws.amazon.com/ec2/v2/home)
|
|
||||||
and choose instances from the left panel.
|
|
||||||
- In the description of your EC2 instance copy the public DNS (iPv4) address
|
|
||||||
using the copy to clipboard button.
|
|
||||||
- Open a terminal on your computer and SSH into your instance:
|
|
||||||
```
|
|
||||||
ssh -i ${path to key pair} ubuntu@${public address}
|
|
||||||
```
|
|
||||||
|
|
||||||
## DigitalOcean
|
|
||||||
[Open your DigitalOcean dashboard](https://cloud.digitalocean.com/droplets/new)
|
|
||||||
to create a new droplet
|
|
||||||
|
|
||||||
- **Choose an image -** Select the **Distributions** tab and then choose Ubuntu.
|
|
||||||
- **Choose a size -** We recommend at least 4GB RAM and 2 CPU, more depending
|
|
||||||
on team size and number of repositories/languages enabled.
|
|
||||||
- Launch your instance.
|
|
||||||
- Open a terminal on your computer and SSH into your instance:
|
|
||||||
```
|
|
||||||
ssh root@${instance ip}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Google Cloud
|
|
||||||
> Pre-requisite: Set up the [Google Cloud SDK](https://cloud.google.com/sdk/docs/)
|
|
||||||
> on your local machine
|
|
||||||
|
|
||||||
- [Open your Google Cloud console](https://console.cloud.google.com/compute/instances)
|
|
||||||
to create a new VM instance and click **Create Instance**.
|
|
||||||
- Choose an appropriate machine type (we recommend 2 vCPU and 7.5 GB RAM, more
|
|
||||||
depending on team size and number of repositories/languages enabled).
|
|
||||||
- Choose Ubuntu 16.04 LTS as your boot disk.
|
|
||||||
- Expand the "Management, security, disks, networking, sole tenancy" section,
|
|
||||||
go to the "Networking" tab, then under network tags add "code-server".
|
|
||||||
- Create your VM, and **take note** of its public IP address.
|
|
||||||
- Visit "VPC network" in the console and go to "Firewall rules". Create a new
|
|
||||||
firewall rule called "http-8080". Under "Target tags" add "code-server", and
|
|
||||||
under "Protocols and ports" tick "Specified protocols and ports" and "tcp".
|
|
||||||
Beside "tcp", add "8080", then create the rule.
|
|
||||||
- Open a terminal on your computer and SSH into your Google Cloud VM:
|
|
||||||
```
|
|
||||||
gcloud compute ssh --zone ${region} ${instance name}
|
|
||||||
```
|
|
||||||
# Run code-server
|
|
||||||
- Download the latest code-server release from the
|
|
||||||
[releases page](https://github.com/cdr/code-server/releases/latest)
|
|
||||||
to the instance, extract the file, then run the code-server binary:
|
|
||||||
```
|
|
||||||
wget https://github.com/cdr/code-server/releases/download/{version}/code-server{version}-linux-x64.tar.gz
|
|
||||||
tar -xvzf code-server{version}-linux-x64.tar.gz
|
|
||||||
cd code-server{version}-linux-x64
|
|
||||||
./code-server
|
|
||||||
```
|
|
||||||
- Open your browser and visit http://$public_ip:8080/ where `$public_ip` is
|
|
||||||
your instance's public IP address.
|
|
||||||
- For long-term use, set up a systemd service to run code-server.
|
|
@ -1,15 +0,0 @@
|
|||||||
# Fail2Ban filter for code-server
|
|
||||||
|
|
||||||
[Definition]
|
|
||||||
|
|
||||||
failregex = ^Failed login attempt\s+{\"remoteAddress\":\"<HOST>\"
|
|
||||||
|
|
||||||
# Use this instead for proxies (ensure the proxy is configured to send the
|
|
||||||
# X-Forwarded-For header).
|
|
||||||
# failregex = ^Failed login attempt\s+{\"xForwardedFor\":\"<HOST>\"
|
|
||||||
|
|
||||||
ignoreregex =
|
|
||||||
|
|
||||||
datepattern = "timestamp":{EPOCH}}$
|
|
||||||
|
|
||||||
# Author: Dean Sheather
|
|
@ -1,73 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: code-server
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: code-server
|
|
||||||
namespace: code-server
|
|
||||||
spec:
|
|
||||||
ports:
|
|
||||||
- port: 8080
|
|
||||||
name: https
|
|
||||||
protocol: TCP
|
|
||||||
selector:
|
|
||||||
app: code-server
|
|
||||||
type: ClusterIP
|
|
||||||
---
|
|
||||||
kind: StorageClass
|
|
||||||
apiVersion: storage.k8s.io/v1
|
|
||||||
metadata:
|
|
||||||
name: gp2
|
|
||||||
annotations:
|
|
||||||
storageclass.kubernetes.io/is-default-class: "true"
|
|
||||||
provisioner: kubernetes.io/aws-ebs
|
|
||||||
parameters:
|
|
||||||
type: gp2
|
|
||||||
fsType: ext4
|
|
||||||
---
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
apiVersion: v1
|
|
||||||
metadata:
|
|
||||||
name: code-store
|
|
||||||
namespace: code-server
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 60Gi
|
|
||||||
---
|
|
||||||
apiVersion: extensions/v1beta1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: code-server
|
|
||||||
name: code-server
|
|
||||||
namespace: code-server
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: code-server
|
|
||||||
replicas: 1
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: code-server
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- image: codercom/code-server:v2
|
|
||||||
imagePullPolicy: Always
|
|
||||||
name: code-servery
|
|
||||||
ports:
|
|
||||||
- containerPort: 8080
|
|
||||||
name: https
|
|
||||||
volumeMounts:
|
|
||||||
- name: code-server-storage
|
|
||||||
mountPath: /go/src
|
|
||||||
volumes:
|
|
||||||
- name: code-server-storage
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: code-store
|
|
@ -1,43 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: code-server
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: code-server
|
|
||||||
namespace: code-server
|
|
||||||
spec:
|
|
||||||
ports:
|
|
||||||
- port: 8080
|
|
||||||
name: https
|
|
||||||
protocol: TCP
|
|
||||||
selector:
|
|
||||||
app: code-server
|
|
||||||
type: ClusterIP
|
|
||||||
---
|
|
||||||
apiVersion: extensions/v1beta1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: code-server
|
|
||||||
name: code-server
|
|
||||||
namespace: code-server
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: code-server
|
|
||||||
replicas: 1
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: code-server
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- image: codercom/code-server:v2
|
|
||||||
imagePullPolicy: Always
|
|
||||||
name: code-server
|
|
||||||
ports:
|
|
||||||
- containerPort: 8080
|
|
||||||
name: https
|
|
@ -1,35 +0,0 @@
|
|||||||
# Protecting code-server from bruteforce attempts
|
|
||||||
code-server outputs all failed login attempts, along with the IP address,
|
|
||||||
provided password, user agent and timestamp by default.
|
|
||||||
|
|
||||||
When using a reverse proxy such as Nginx or Apache, the remote address may
|
|
||||||
appear to be `127.0.0.1` or a similar address so `X-Forwarded-For` should be
|
|
||||||
used instead. Ensure that you are setting this value in your reverse proxy:
|
|
||||||
|
|
||||||
Nginx:
|
|
||||||
```
|
|
||||||
location / {
|
|
||||||
...
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Apache:
|
|
||||||
```
|
|
||||||
<VirtualEnv>
|
|
||||||
...
|
|
||||||
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
|
|
||||||
...
|
|
||||||
</VirtualEnv>
|
|
||||||
```
|
|
||||||
|
|
||||||
It is extremely important that you ensure that your code-server instance is not
|
|
||||||
accessible from the internet (use localhost or block it in your firewall).
|
|
||||||
|
|
||||||
## Fail2Ban
|
|
||||||
Fail2Ban allows for automatically banning and logging repeated failed
|
|
||||||
authentication attempts for many applications through regex filters. A working
|
|
||||||
filter for code-server can be found in `./examples/fail2ban.conf`. Once this
|
|
||||||
is installed and configured correctly, repeated failed login attempts should
|
|
||||||
automatically be banned from connecting to your server.
|
|
@ -1,98 +0,0 @@
|
|||||||
# Quickstart Guide
|
|
||||||
1. Visit the [releases page](https://github.com/cdr/code-server/releases) and
|
|
||||||
download the latest binary for your operating system.
|
|
||||||
2. Unpack the downloaded file then run the binary.
|
|
||||||
3. In your browser navigate to `localhost:8080`.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
Run `code-server --help` to view available options.
|
|
||||||
|
|
||||||
### Nginx Reverse Proxy
|
|
||||||
The trailing slashes are important.
|
|
||||||
|
|
||||||
```
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
listen [::]:80;
|
|
||||||
server_name code.example.com code.example.org;
|
|
||||||
location /some/path/ { # Or / if hosting at the root.
|
|
||||||
proxy_pass http://localhost:8080/;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection upgrade;
|
|
||||||
proxy_set_header Accept-Encoding gzip;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Apache Reverse Proxy
|
|
||||||
```
|
|
||||||
<VirtualHost *:80>
|
|
||||||
ServerName code.example.com
|
|
||||||
|
|
||||||
RewriteEngine On
|
|
||||||
RewriteCond %{HTTP:Upgrade} =websocket [NC]
|
|
||||||
RewriteRule /(.*) ws://localhost:8080/$1 [P,L]
|
|
||||||
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
|
|
||||||
RewriteRule /(.*) http://localhost:8080/$1 [P,L]
|
|
||||||
|
|
||||||
ProxyRequests off
|
|
||||||
ProxyPass / http://localhost:8080/ nocanon
|
|
||||||
ProxyPassReverse / http://localhost:8080/
|
|
||||||
</VirtualHost>
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run automatically at startup
|
|
||||||
|
|
||||||
In some cases you might need to run code-server automatically once the host starts. You may use your local init service to do so.
|
|
||||||
|
|
||||||
#### Systemd
|
|
||||||
|
|
||||||
```ini
|
|
||||||
[Unit]
|
|
||||||
Description=Code Server IDE
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=<USER>
|
|
||||||
EnvironmentFile=$HOME/.profile
|
|
||||||
WorkingDirectory=$HOME
|
|
||||||
Restart=on-failure
|
|
||||||
RestartSec=10
|
|
||||||
|
|
||||||
ExecStart=<PATH TO BINARY> $(pwd)
|
|
||||||
|
|
||||||
StandardOutput=file:/var/log/code-server-output.log
|
|
||||||
StandardError=file:/var/log/code-server-error.log
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
```
|
|
||||||
|
|
||||||
#### OpenRC
|
|
||||||
|
|
||||||
```sh
|
|
||||||
#!/sbin/openrc-run
|
|
||||||
|
|
||||||
depend() {
|
|
||||||
after net-online
|
|
||||||
need net
|
|
||||||
}
|
|
||||||
|
|
||||||
supervisor=supervise-daemon
|
|
||||||
name="code-server"
|
|
||||||
command="/opt/cdr/code-server"
|
|
||||||
command_args=""
|
|
||||||
|
|
||||||
pidfile="/var/run/cdr.pid"
|
|
||||||
respawn_delay=5
|
|
||||||
|
|
||||||
set -o allexport
|
|
||||||
if [ -f /etc/environment ]; then source /etc/environment; fi
|
|
||||||
set +o allexport
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Kubernetes/Docker
|
|
||||||
|
|
||||||
Make sure you set your restart policy to always - this will ensure your container starts as the daemon starts.
|
|
@ -1,13 +0,0 @@
|
|||||||
version: "3"
|
|
||||||
|
|
||||||
services:
|
|
||||||
code-server:
|
|
||||||
container_name: code-server
|
|
||||||
image: codercom/code-server
|
|
||||||
ports:
|
|
||||||
- "8080:8080"
|
|
||||||
volumes:
|
|
||||||
- "${PWD}:/home/coder/project"
|
|
||||||
- "${HOME}/.local/share/code-server:/home/coder/.local/share/code-server"
|
|
||||||
environment:
|
|
||||||
PASSWORD: ${PASSWORD}
|
|
22
package.json
22
package.json
@ -3,19 +3,19 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"i": "yarn install --ignore-scripts",
|
"clean": "ci/clean.sh",
|
||||||
"preinstall": "./scripts/preinstall.sh",
|
"vscode": "ci/vscode.sh",
|
||||||
"postinstall": "./scripts/postinstall.sh",
|
"vscode:patch": "cd ./lib/vscode && git apply ../../ci/vscode.patch",
|
||||||
"patch:generate": "cd ./lib/vscode && git diff HEAD > ../../scripts/vscode.patch",
|
"vscode:diff": "cd ./lib/vscode && git diff HEAD > ../../ci/vscode.patch",
|
||||||
"patch:apply": "cd ./lib/vscode && git apply ../../scripts/vscode.patch",
|
|
||||||
"test": "mocha -r ts-node/register ./test/*.test.ts",
|
"test": "mocha -r ts-node/register ./test/*.test.ts",
|
||||||
"test:build": "./scripts/test.sh",
|
|
||||||
"lint:js": "eslint src test scripts --ext .ts,.tsx",
|
"lint": "ci/lint.sh",
|
||||||
"lint:css": "stylelint 'src/**/*.css'",
|
"fmt": "ci/fmt.sh",
|
||||||
"lint": "./scripts/lint.sh",
|
|
||||||
"watch": "yarn runner watch",
|
"runner": "cd ./scripts && NODE_OPTIONS=--max_old_space_size=32384 ts-node ./build.ts",
|
||||||
"runner": "cd ./scripts && node --max-old-space-size=32384 -r ts-node/register ./build.ts",
|
|
||||||
"build": "yarn runner build",
|
"build": "yarn runner build",
|
||||||
|
"watch": "yarn runner watch",
|
||||||
"binary": "yarn runner binary",
|
"binary": "yarn runner binary",
|
||||||
"package": "yarn runner package"
|
"package": "yarn runner package"
|
||||||
},
|
},
|
||||||
|
@ -1,66 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
# cacher.sh -- Restore and rebuild cache.
|
|
||||||
# Cache paths are designed to work with multi-arch builds and are organized
|
|
||||||
# based on the branch or tag. The master branch cache is used as a fallback.
|
|
||||||
# This will download and package the cache but it will not upload it.
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
# Try restoring from each argument in turn until we get something.
|
|
||||||
restore() {
|
|
||||||
for branch in "$@" ; do
|
|
||||||
if [ -n "$branch" ] ; then
|
|
||||||
cache_path="https://codesrv-ci.cdr.sh/cache/$branch/$tar.tar.gz"
|
|
||||||
if wget "$cache_path" ; then
|
|
||||||
tar xzvf "$tar.tar.gz"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# We need to cache the built-in extensions and Node modules. Everything inside
|
|
||||||
# the cache-upload directory will be uploaded as-is to the code-server bucket.
|
|
||||||
package() {
|
|
||||||
mkdir -p "cache-upload/cache/$1"
|
|
||||||
tar czfv "cache-upload/cache/$1/$tar.tar.gz" node_modules yarn-cache \
|
|
||||||
lib/vscode/.build \
|
|
||||||
lib/vscode/node_modules
|
|
||||||
}
|
|
||||||
|
|
||||||
main() {
|
|
||||||
cd "$(dirname "$0")/.."
|
|
||||||
|
|
||||||
# Get the branch for this build.
|
|
||||||
branch=${DRONE_BRANCH:-${DRONE_SOURCE_BRANCH:-${DRONE_TAG:-}}}
|
|
||||||
|
|
||||||
# The cache will be named based on the arch, platform, and libc.
|
|
||||||
arch=$DRONE_STAGE_ARCH
|
|
||||||
platform=${PLATFORM:-linux}
|
|
||||||
case $DRONE_STAGE_NAME in
|
|
||||||
*alpine*) libc=musl ;;
|
|
||||||
* ) libc=glibc ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
tar="$platform-$arch-$libc"
|
|
||||||
|
|
||||||
# The action is determined by the name of the step.
|
|
||||||
case $DRONE_STEP_NAME in
|
|
||||||
*restore*)
|
|
||||||
# Sub-modules must be pulled first since extracting the cache directories
|
|
||||||
# will prevent git from cloning into them.
|
|
||||||
git submodule update --init
|
|
||||||
|
|
||||||
restore "$branch" "$DRONE_REPO_BRANCH"
|
|
||||||
|
|
||||||
# Now make sure the pulled Node modules are up to date.
|
|
||||||
YARN_CACHE_FOLDER="$(pwd)/yarn-cache"
|
|
||||||
export YARN_CACHE_FOLDER
|
|
||||||
yarn
|
|
||||||
;;
|
|
||||||
*rebuild*|*package*) package "$branch" ;;
|
|
||||||
*) exit 1 ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
@ -1,39 +0,0 @@
|
|||||||
# We deploy with Ubuntu so that devs have a familiar environment.
|
|
||||||
FROM ubuntu:18.04
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y \
|
|
||||||
openssl \
|
|
||||||
net-tools \
|
|
||||||
git \
|
|
||||||
locales \
|
|
||||||
sudo \
|
|
||||||
dumb-init \
|
|
||||||
vim \
|
|
||||||
curl \
|
|
||||||
wget
|
|
||||||
|
|
||||||
RUN locale-gen en_US.UTF-8
|
|
||||||
# We cannot use update-locale because docker will not use the env variables
|
|
||||||
# configured in /etc/default/locale so we need to set it manually.
|
|
||||||
ENV LC_ALL=en_US.UTF-8 \
|
|
||||||
SHELL=/bin/bash
|
|
||||||
|
|
||||||
RUN adduser --gecos '' --disabled-password coder && \
|
|
||||||
echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd
|
|
||||||
|
|
||||||
USER coder
|
|
||||||
# Create first so these directories will be owned by coder instead of root
|
|
||||||
# (workdir and mounting appear to both default to root).
|
|
||||||
RUN mkdir -p /home/coder/project
|
|
||||||
RUN mkdir -p /home/coder/.local/share/code-server
|
|
||||||
|
|
||||||
WORKDIR /home/coder/project
|
|
||||||
|
|
||||||
# This ensures we have a volume mounted even if the user forgot to do bind
|
|
||||||
# mount. So that they do not lose their data if they delete the container.
|
|
||||||
VOLUME [ "/home/coder/project" ]
|
|
||||||
|
|
||||||
COPY ./binaries/code-server* /usr/local/bin/code-server
|
|
||||||
EXPOSE 8080
|
|
||||||
|
|
||||||
ENTRYPOINT ["dumb-init", "code-server", "--host", "0.0.0.0"]
|
|
@ -1,9 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# code-server.sh -- Run code-server with the bundled Node binary.
|
|
||||||
|
|
||||||
main() {
|
|
||||||
cd "$(dirname "$0")" || exit 1
|
|
||||||
./node ./out/node/entry.js "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
# lint.sh -- Lint CSS and JS files.
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
main() {
|
|
||||||
yarn lint:css "$@"
|
|
||||||
yarn lint:js "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
# postinstall.sh - Does nothing at the moment.
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
main() {
|
|
||||||
cd "$(dirname "${0}")/.."
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
@ -1,21 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
# preinstall.sh -- Prepare VS Code.
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
main() {
|
|
||||||
cd "$(dirname "${0}")/.."
|
|
||||||
|
|
||||||
# Ensure submodules are cloned and up to date.
|
|
||||||
git submodule update --init
|
|
||||||
|
|
||||||
# Try patching but don't worry too much if it fails. It's possible VS Code has
|
|
||||||
# already been patched.
|
|
||||||
yarn patch:apply || echo "Unable to patch; assuming already patched"
|
|
||||||
|
|
||||||
# Install VS Code dependencies.
|
|
||||||
cd ./lib/vscode
|
|
||||||
yarn
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
@ -1,19 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
# test.sh -- Simple build test.
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
main() {
|
|
||||||
cd "$(dirname "$0")/.."
|
|
||||||
|
|
||||||
# The main goal here is to ensure that the build fully completed and the
|
|
||||||
# result looks usable.
|
|
||||||
version=$(node ./build/out/node/entry.js --version --json)
|
|
||||||
echo "Got '$version' for the version"
|
|
||||||
case $version in
|
|
||||||
"{ codeServer":*) exit 0 ;;
|
|
||||||
*) exit 1 ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
@ -1,21 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"target": "es5",
|
|
||||||
"module": "commonjs",
|
|
||||||
"moduleResolution": "node",
|
|
||||||
"strict": true,
|
|
||||||
"noImplicitReturns": true,
|
|
||||||
"noUnusedLocals": true,
|
|
||||||
"forceConsistentCasingInFileNames": true,
|
|
||||||
"outDir": "./out",
|
|
||||||
"declaration": true,
|
|
||||||
"experimentalDecorators": true,
|
|
||||||
"esModuleInterop": true,
|
|
||||||
"allowSyntheticDefaultImports": true,
|
|
||||||
"resolveJsonModule": true,
|
|
||||||
"sourceMap": true
|
|
||||||
},
|
|
||||||
"include": [
|
|
||||||
"./**/*.ts"
|
|
||||||
]
|
|
||||||
}
|
|
Reference in New Issue
Block a user