diff --git a/.dockerignore b/.dockerignore index cbfebc09e59c..b6391d6312f5 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,11 +2,13 @@ Dockerfile build deployment doc +.git .github .gitignore .node-version +.gitlab-ci.yml .travis.yml LICENSE README.md node_modules -release \ No newline at end of file +release diff --git a/.github/pull.yml b/.github/pull.yml new file mode 100644 index 000000000000..0185bd739d92 --- /dev/null +++ b/.github/pull.yml @@ -0,0 +1,8 @@ +version: "1" +rules: + - base: master + upstream: cdr:master + mergeMethod: hardreset + - base: latest + upstream: master + mergeMethod: merge diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 000000000000..1b98abf7fb25 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,42 @@ +name: Build and Push +on: + push: + branches: + - latest +jobs: + build: + name: Build and Push + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: Login to Docker Registry + run: > + docker login -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }} docker.pkg.github.com + - name: Pull Docker Image - builder + run: > + docker pull docker.pkg.github.com/${{ github.repository }}/code-server:builder || true + - name: Build Docker Image - builder + run: > + docker build \ + --cache-from docker.pkg.github.com/${{ github.repository }}/code-server:builder \ + --target builder \ + --build-arg vscodeVersion=${{ secrets.VSCODE_VERSION }} \ + -t docker.pkg.github.com/${{ github.repository }}/code-server:builder . + - name: Pull Docker Image + run: > + docker pull docker.pkg.github.com/${{ github.repository }}/code-server:latest || true + - name: Build Docker Image + run: > + docker build \ + --cache-from docker.pkg.github.com/${{ github.repository }}/code-server:builder \ + --cache-from docker.pkg.github.com/${{ github.repository }}/code-server:latest \ + --build-arg vscodeVersion=${{ secrets.VSCODE_VERSION }} \ + --build-arg VCS_REF=${{ github.sha }} \ + --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \ + -t docker.pkg.github.com/${{ github.repository }}/code-server:latest . + - name: Push Docker Image - builder + run: > + docker push docker.pkg.github.com/${{ github.repository }}/code-server:builder + - name: Push Docker Image + run: > + docker push docker.pkg.github.com/${{ github.repository }}/code-server:latest diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 000000000000..b3612148a336 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,23 @@ +stages: + - deploy + +deploy_registry: + image: docker:latest + stage: deploy + services: + - docker:dind + variables: + DOCKER_DRIVER: overlay + before_script: + - docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY + - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG || true + script: + - docker build --pull + --cache-from $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG + --build-arg vscodeVersion=$VSCODE_VERSION + --build-arg VCS_REF=$CI_COMMIT_SHORT_SHA + --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') + -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG . + - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG + only: + - latest diff --git a/Dockerfile b/Dockerfile index a6e9c301d1fa..6d9afb1a88ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,13 @@ -FROM node:10.16.0 +FROM node:10.16.0 AS builder ARG codeServerVersion=docker ARG vscodeVersion 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 - -# Ensure latest yarn. -RUN npm install -g yarn@1.13 +RUN apt-get update && apt-get install -y -qq \ + libxkbfile-dev \ + libsecret-1-dev \ + && rm -rf /var/lib/apt/lists/* WORKDIR /src COPY . . @@ -21,33 +19,39 @@ RUN yarn \ && 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 - -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 + +FROM ubuntu:rolling + +RUN apt-get -qq update && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq \ + git \ + sudo \ + curl \ + wget \ + nano \ + screen \ + locales \ + openssl \ + net-tools \ + pastebinit \ + inetutils-tools \ + dumb-init \ + && rm -rf /var/lib/apt/lists/* + +RUN echo "LC_ALL=en_US.UTF-8" >> /etc/environment \ + && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \ + && echo "LANG=en_US.UTF-8" > /etc/locale.conf \ + && locale-gen en_US.UTF-8 \ + \ + && addgroup --gid 1001 coder \ + && adduser --gecos '' --disabled-password --uid 1001 --gid 1001 coder \ + && echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd USER coder # We create first instead of just using WORKDIR as when WORKDIR creates, the # user is root. -RUN mkdir -p /home/coder/project +RUN mkdir -p /home/coder/project \ + && mkdir -p /home/coder/.local/share/code-server \ + && echo "PS1='🐳 \[\033[1;36m\]\u@\h\[\033[0m\] \[\033[1;34m\][\w]\[\033[00m\]\$ '" >> /home/coder/.bashrc WORKDIR /home/coder/project @@ -55,7 +59,13 @@ WORKDIR /home/coder/project # 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 +COPY --from=builder /src/binaries/code-server /usr/local/bin/code-server EXPOSE 8080 -ENTRYPOINT ["dumb-init", "code-server", "--host", "0.0.0.0"] +ENTRYPOINT ["dumb-init", "code-server", "--host", "0.0.0.0", "--disable-telemetry"] + +ARG VCS_REF +ARG BUILD_DATE +LABEL \ + org.label-schema.vcs-ref=$VCS_REF \ + org.label-schema.build-date=$BUILD_DATE