diff --git a/.dockerignore b/.dockerignore index 9bcce7a80897..41c8cb33868e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,21 @@ +# Exclude everything by default ** + +# Include necessary files for building +!package.json +!package-lock.json +!tsconfig.json +!src/ +!lib/ +!patches/ +!ci/ !release-packages -!ci +!.git/ +!.gitmodules +!eslint.config.mjs +!.prettierrc.yaml +!.prettierignore +!.editorconfig +!.node-version +!.nvmrc +!test/ diff --git a/ci/release-image/Dockerfile b/ci/release-image/Dockerfile index fba7189e6999..6159c686d012 100644 --- a/ci/release-image/Dockerfile +++ b/ci/release-image/Dockerfile @@ -1,9 +1,64 @@ # syntax=docker/dockerfile:experimental - ARG BASE=debian:12 + +# ============================================================================== +# Builder Stage +# This stage builds code-server from source and creates a .deb package. +# ============================================================================== +FROM node:20-bookworm as builder + +# TARGETARCH is automatically set by Docker to the architecture of the build machine (e.g., amd64, arm64) +ARG TARGETARCH + +# Install build dependencies. +# nfpm is used for creating .deb packages. +# We download the correct version for the target architecture. +RUN apt-get update && apt-get install -y git curl rsync jq \ + && NFPM_ARCH=${TARGETARCH} && \ + if [ "${TARGETARCH}" = "amd64" ]; then NFPM_ARCH="x86_64"; fi && \ + curl -sL "https://github.com/goreleaser/nfpm/releases/download/v2.35.3/nfpm_2.35.3_Linux_${NFPM_ARCH}.tar.gz" | tar -xz -C /usr/local/bin nfpm \ + && chmod +x /usr/local/bin/nfpm + +WORKDIR /app + +# Copy the entire project source. We need the .git directory for versioning. +COPY . . + +# Initialize git submodules. +# Running as root in the container, so we need to mark the directory as safe. +RUN git config --global --add safe.directory /app && git submodule update --init --recursive + +# Install all dependencies. +RUN npm install + +RUN cd lib/vscode && npm install + +# Build and package code-server. +# All build scripts will now run in a Linux environment, producing the correct artifacts. +ENV VERSION=0.0.1 +# ENV NODE_OPTIONS="--max-old-space-size=4096" +RUN npm run build:vscode +RUN npm run build +RUN npm run release:standalone +RUN npm run package +# RUN ./ci/build/build-release.sh +# RUN ./ci/build/build-packages.sh + + +# ============================================================================== +# Packages Stage +# This stage simply holds the .deb file for the final image. +# ============================================================================== FROM scratch AS packages -COPY release-packages/code-server*.deb /tmp/ +# Copy the .deb package from the builder stage. +COPY --from=builder /app/release-packages/code-server*${TARGETARCH}*.deb /tmp/ + + +# ============================================================================== +# Final Stage +# This is the original Dockerfile, mostly unmodified. +# ============================================================================== FROM $BASE RUN apt-get update \ @@ -45,7 +100,8 @@ RUN ARCH="$(dpkg --print-architecture)" \ && printf "user: coder\ngroup: coder\n" > /etc/fixuid/config.yml COPY ci/release-image/entrypoint.sh /usr/bin/entrypoint.sh -RUN --mount=from=packages,src=/tmp,dst=/tmp/packages dpkg -i /tmp/packages/code-server*$(dpkg --print-architecture).deb +# The glob pattern here is simplified since we now know the exact architecture. +RUN --mount=from=packages,src=/tmp,dst=/tmp/packages dpkg -i /tmp/packages/code-server*.deb # Allow users to have scripts run on container startup to prepare workspace. # https://github.com/coder/code-server/issues/5177 @@ -58,4 +114,4 @@ EXPOSE 8080 USER 1000 ENV USER=coder WORKDIR /home/coder -ENTRYPOINT ["/usr/bin/entrypoint.sh", "--bind-addr", "0.0.0.0:8080", "."] +ENTRYPOINT ["/usr/bin/entrypoint.sh", "--bind-addr", "0.0.0.0:8080", "."] \ No newline at end of file diff --git a/patches/getting-started.diff b/patches/getting-started.diff index 98f8a82c60ab..39a7f60379fd 100644 --- a/patches/getting-started.diff +++ b/patches/getting-started.diff @@ -29,7 +29,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro import { IWebviewElement, IWebviewService } from '../../webview/browser/webview.js'; import './gettingStartedColors.js'; @@ -874,6 +874,72 @@ export class GettingStartedPage extends - $('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved")) + $('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "The One-Stop Quantum Platform")) ); + let gettingStartedCoder: HTMLElement = $('.header', {}); @@ -39,7 +39,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro + style: 'margin-bottom: 12px', + }, 'Next Up'), + $('a', { -+ href: 'https://cdr.co/code-server-to-coder', ++ href: 'https://account.qbraid.com/account-details', + target: '_blank', + }, + $('button', { @@ -57,21 +57,21 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro + 'margin: 0px 0px 6px', + 'font-weight: 500', + ].join(';'), -+ }, 'Deploy code-server for your team'), ++ }, 'Run Quantum Jobs with qBraid'), + $('p', { + style: [ + 'margin: 0', + 'font-size: 13px', + 'color: #dcdee2', + ].join(';'), -+ }, 'Provision software development environments on your infrastructure with Coder.'), ++ }, 'Submit quantum programs to 24+ devices using the qBraid-SDK.'), + $('p', { + style: [ + 'margin-top: 8px', + 'font-size: 13px', + 'color: #dcdee2', + ].join(';'), -+ }, 'Coder is a self-service portal which provisions via Terraform—Linux, macOS, Windows, x86, ARM, and, of course, Kubernetes based infrastructure.'), ++ }, 'Access QPUs from QuEra, IQM, IonQ, OQC, and Rigetti, along with on-demand simulators from qBraid, AWS, IonQ, and more.'), + $('p', { + style: [ + 'margin: 0', @@ -80,7 +80,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro + 'display: flex', + 'align-items: center', + ].join(';'), -+ }, 'Get started ', $('span', { ++ }, 'Get credits', $('span', { + class: ThemeIcon.asClassName(Codicon.arrowRight), + style: [ + 'color: white', diff --git a/src/browser/media/favicon-dark-support.svg b/src/browser/media/favicon-dark-support.svg index 06f1fa00d62c..43b89611afdf 100644 --- a/src/browser/media/favicon-dark-support.svg +++ b/src/browser/media/favicon-dark-support.svg @@ -1,7 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/browser/media/favicon.ico b/src/browser/media/favicon.ico index e721447bd9d1..1c330b571648 100644 Binary files a/src/browser/media/favicon.ico and b/src/browser/media/favicon.ico differ diff --git a/src/browser/media/favicon.svg b/src/browser/media/favicon.svg deleted file mode 100644 index 45388729b6b4..000000000000 --- a/src/browser/media/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/browser/media/pwa-icon-192.png b/src/browser/media/pwa-icon-192.png index a6ee503115d8..974dd3c5d949 100644 Binary files a/src/browser/media/pwa-icon-192.png and b/src/browser/media/pwa-icon-192.png differ diff --git a/src/browser/media/pwa-icon-512.png b/src/browser/media/pwa-icon-512.png index ff42978ce9a5..658d26708677 100644 Binary files a/src/browser/media/pwa-icon-512.png and b/src/browser/media/pwa-icon-512.png differ diff --git a/src/browser/media/pwa-icon.png b/src/browser/media/pwa-icon.png index d4f5188ffc0c..658d26708677 100644 Binary files a/src/browser/media/pwa-icon.png and b/src/browser/media/pwa-icon.png differ diff --git a/src/browser/media/templates.png b/src/browser/media/templates.png index 1437658ec13a..2c5c5889ee24 100644 Binary files a/src/browser/media/templates.png and b/src/browser/media/templates.png differ