本文档概述了用于构建、打包和发布 code-server 的自动化和手动流程。它涵盖了持续集成流水线、发布创建工作流程、针对不同平台的包生成以及向各种分发渠道的发布。
有关 CI/CD 流水线的具体信息,请参阅CI/CD 流水线。
code-server 的构建和发布流程包含多个阶段:
此流程通过 GitHub Actions 工作流高度自动化,但在需要时也可以手动执行。
来源:.github/workflows/build.yaml .github/workflows/release.yaml .github/workflows/publish.yaml docs/MAINTAINING.md
构建流水线是流程的第一阶段,负责编译 code-server 源代码并为打包做准备。
来源:.github/workflows/build.yaml164-226
构建过程包含以下主要组件:
build.yaml 工作流协调这些步骤,并在以下情况下触发:
来源:.github/workflows/build.yaml .github/workflows/build.yaml164-226
构建系统的关键部分是与 VS Code 的集成。code-server 打包了 VS Code 的一个已修改版本,该版本是在整个过程的一部分中构建的。
lib/vscode 中。来源:.github/workflows/build.yaml192-215
发布流水线接收已构建的代码,并创建特定平台的包和存档。
来源:.github/workflows/release.yaml
code-server 为各种平台和架构打包:
| 平台 | 架构 | 包类型 |
|---|---|---|
| Linux | x64、arm64、armv7l | .tar.gz、.deb、.rpm |
| macOS | x64,arm64 | .tar.gz |
| npm | 平台无关 | .tar.gz |
不同平台的打包过程通过具有矩阵配置的 GitHub Actions 作业进行管理。
来源:.github/workflows/release.yaml .github/workflows/release.yaml .github/workflows/release.yaml
每种包类型都有不同的转换路径。
来源:ci/build/build-release.sh ci/build/build-standalone-release.sh ci/build/build-packages.sh
一旦发布草稿被批准并发布,自动化工作流会将包分发到各种渠道。
code-server 发布到多个分发渠道:
来源:.github/workflows/publish.yaml docs/MAINTAINING.md
npm 包通过以下过程发布到 npm 注册中心:
来源:.github/workflows/publish.yaml docs/MAINTAINING.md
Docker 镜像构建并发布到 Docker Hub 和 GitHub Container Registry。
Docker 镜像同时带有特定版本和“latest”标签。
来源:.github/workflows/publish.yaml docs/MAINTAINING.md
Homebrew 和 AUR 包通过自动化流程更新。
两个流程都涉及:
来源:.github/workflows/publish.yaml docs/MAINTAINING.md
尽管大部分发布流程是自动化的,但某些步骤仍需要手动干预。
在开始发布之前:
对于重大更改,会在最终发布前创建发布候选版本。
-rc.<number> 后缀添加到版本号。code-server 发布流程包含安全扫描。
来源: .github/workflows/security.yaml .github/workflows/trivy-docker.yaml docs/SECURITY.md
构建和发布流程依赖于几个关键脚本
| 脚本 | 目的 |
|---|---|
build-release.sh | 从构建的代码-server和VS Code创建通用的NPM包 |
build-standalone-release.sh | 将npm包与Node.js捆绑以供独立使用 |
build-packages.sh | 创建特定平台的包和存档 |
npm-postinstall.sh | 在npm install后运行以设置依赖项 |
code-server.sh | 独立包的启动脚本 |
这些脚本负责将源代码转换为各种分发格式。
来源: ci/build/build-release.sh ci/build/build-standalone-release.sh ci/build/build-packages.sh ci/build/npm-postinstall.sh ci/build/code-server.sh