菜单

发布包

相关源文件

本页面文档介绍了 code-server 构建过程中创建的不同类型的发布包、它们的生成方式以及内容。它解释了包创建管道,展示了 code-server 如何从源代码转换为各种平台和包格式的可分发构件。

有关创建这些包的 CI/CD 管道信息,请参阅 CI/CD 管道。有关发布到 NPM 的详细信息,请参阅 NPM 发布

发布包类型

code-server 以多种包格式分发,以支持不同的安装方法和平台。

包类型文件格式描述
档案.tar.gz所有受支持平台(Linux、macOS、Windows)的压缩存档。
Debian 包.deb适用于基于 Debian 的 Linux 发行版的原生包。
RPM 包.rpm适用于基于 Red Hat 的 Linux 发行版的原生包。
NPM 包不适用发布到 NPM 注册表的 JavaScript 包。
Docker 镜像不适用发布到 Docker Hub 和 GitHub Container Registry 的容器镜像。

发布过程按特定顺序创建这些包,每个包都建立在先前步骤的基础上。

来源:ci/build/build-release.sh ci/build/build-standalone-release.sh ci/build/build-packages.sh

发布包构建流程

发布包的创建遵循跨多个脚本的特定工作流。

来源:ci/build/build-release.sh ci/build/build-standalone-release.sh ci/build/build-packages.sh

1. 通用 NPM 包创建

第一步创建了一个通用 NPM 包,作为所有其他包的基础。此过程由 build-release.sh 处理。

关键步骤

  • 将构建好的 code-server 和 VS Code 复制到发布目录。
  • 使用正确的元数据(包括 Git 提交信息)准备 package.json
  • 创建 npm-shrinkwrap.json 文件以确保确定性的依赖项安装。
  • 添加用于最终设置的 post-install 脚本。

来源:ci/build/build-release.sh16-36 ci/build/build-release.sh104-134

2. 单独发布创建

单独发布会添加 Node.js 二进制文件和启动脚本,使包能够自包含。此过程由 build-standalone-release.sh 处理。

关键步骤

  • 将通用 NPM 包复制到新目录(release-standalone)。
  • 将 Node.js 二进制文件添加到 lib/node
  • 将启动脚本添加到 bin/code-server
  • 使用 --omit=dev 标志安装 NPM 依赖项。

来源:ci/build/build-standalone-release.sh8-35 ci/build/code-server.sh1-29

3. 特定平台包创建

最后一步从单独发布的版本创建特定于平台的包。此过程由 build-packages.sh 处理。

关键步骤

  • 为所有平台创建 .tar.gz 存档。
  • 在 Linux 上,使用 NFPM 创建 .deb.rpm 包。
  • 将包放置在 release-packages 目录中。
  • 将包复制到 GCP 特定目录结构中,以便进行云分发。

来源:ci/build/build-packages.sh9-70 ci/build/nfpm.yaml1-26

包内容和结构

所有包都包含相似的基础结构,具体差异取决于包类型和目标平台。

来源:ci/build/build-release.sh36-65 ci/build/build-standalone-release.sh13-34

NPM 包内容

NPM 包包含:

  • out/ 目录中的已编译 JavaScript 代码。
  • 位于 lib/vscode 中的 VS Code Web 客户端文件。
  • src/browser 中的 HTML、CSS 和媒体资源。
  • 元数据文件(package.json、npm-shrinkwrap.json)。
  • 用于设置的安装后脚本。

NPM 包不包含 Node.js 二进制文件,因为它依赖于系统的 Node 安装。

来源:ci/build/build-release.sh36-65 ci/build/npm-postinstall.sh1-160

单独发布包内容

单独发布包包含 NPM 包的所有内容,外加:

  • Node.js 二进制文件(lib/node)。
  • 启动脚本(bin/code-server)。
  • node_modules 中安装的所有运行时依赖项。

来源:ci/build/build-standalone-release.sh13-34 ci/build/code-server.sh1-29

Linux 包内容(.deb 和 .rpm)

Linux 包具有不同的文件结构,针对系统范围内的安装进行了优化。

  • 可执行文件位于 /usr/bin/code-server
  • 应用程序文件位于 /usr/lib/code-server/
  • Systemd 服务文件。
    • 系统服务:/usr/lib/systemd/system/code-server@.service
    • 用户服务:/usr/lib/systemd/user/code-server.service

来源:ci/build/nfpm.yaml14-25 ci/build/code-server-user.service1-12

安装后处理

安装包时,会运行一个安装后脚本来完成设置。该脚本:

  1. 验证 Node.js 版本(需要 Node.js v20)。
  2. 使用适当的包管理器(npm 或 yarn)安装 VS Code 依赖项。
  3. 为二进制文件和助手创建符号链接。
  4. 执行特定于平台的设置。

脚本会检测安装时使用的是 npm 还是 yarn,并据此进行调整。

来源:ci/build/npm-postinstall.sh68-116 ci/build/npm-postinstall.sh118-139 ci/build/npm-postinstall.sh141-158

发布命名模式

包遵循一致的命名模式:

  • 存档:code-server-{version}-{os}-{arch}.tar.gz
  • Debian:code-server_{version}_{arch}.deb
  • RPM:code-server-{version}-{arch}.rpm

其中

  • {version} - 语义化版本(例如,4.9.1)。
  • {os} - 操作系统(linux, darwin, win32)
  • {arch} - CPU 架构(amd64, arm64, armv7l)

来源: ci/build/build-packages.sh29-35 ci/build/build-packages.sh49-67

分发渠道

创建的软件包通过多个渠道分发

  1. GitHub Releases - 所有软件包类型都附加在 GitHub Releases 中
  2. NPM Registry - npm 包已发布到 npmjs.com
  3. Docker Hub - Docker 镜像已推送到 Docker Hub
  4. GitHub Container Registry (GHCR) - Docker 镜像也已推送到 GHCR
  5. 软件包仓库:
    • Homebrew 公式已更新
    • AUR (Arch 用户仓库) 包已更新

来源: ci/build/build-packages.sh39-47

跨平台支持

发布系统旨在为所有支持的平台和架构创建软件包

操作系统架构包类型
Linuxamd64, arm64, armv7l.tar.gz, .deb, .rpm
macOS (Darwin)amd64, arm64.tar.gz
Windowsamd64.tar.gz

来源: ci/build/build-packages.sh14-18 ci/build/build-packages.sh49-67