Skip to content

Fork CI/CD dry-run:最小化跳过需要签名的 release.yml job #3

@earayu

Description

@earayu

目标

apecloud/goose 这个 fork 上跑一次端到端 CI/CD dry-run,验证上游 release pipeline 在不改业务代码的前提下,是否能为 ApeCloud fork 构建和发布产物。

这次只验证三件事:

  1. 能否构建 fork 里的二进制和安装包
  2. 能否下载安装并运行这些产物
  3. 为了发布到 ApeCloud 自己的渠道,CI/CD 最少需要改哪些地方,例如 ghcr.io/apecloud/goosegithub.com/apecloud/goose/releases

这是 dry-run only。本 issue 不做品牌替换、Logo 替换、默认配置和功能隐藏;那些属于下一阶段。

目前观察

可以直接复用的 workflow

下面这些 workflow 在 fork 里基本可以直接工作,不需要改:

  • publish-docker.yml:已经使用 ghcr.io/${{ github.repository_owner }}/goosesubject-name: ghcr.io/${{ github.repository_owner }}/goose,天然适配 fork。tag 发布时会推到 ghcr.io/apecloud/goose:VERSION
  • build-cli.yml:可复用 workflow,不依赖额外 secrets,用标准 cargo 和 GitHub 自带 GITHUB_TOKEN 构建多平台 CLI。
  • bundle-desktop-linux.yml:Linux Desktop 未签名构建,不需要签名 secrets。
  • release.yml 里的 install-script job:只上传 download_cli.sh artifact,不依赖额外 secrets。
  • publish-npm.yml:只由 workflow_call / workflow_dispatch 触发,不会在 tag push 时自动运行;本轮可以暂不处理。

fork 里会失败的 job

release.yml 中有 4 个 job 依赖 Apple / Windows 签名证书,以及名为 signing 的 environment。ApeCloud fork 当前没有这些 secrets,所以 dry-run 时会失败:

  1. bundle-desktop:macOS Apple Silicon signed desktop
  2. bundle-desktop-intel:macOS Intel signed desktop
  3. bundle-desktop-windows:Windows MSVC signed desktop
  4. bundle-desktop-windows-cuda:Windows MSVC CUDA signed desktop

另外,release 汇总 job 现在的 needs 包含这些签名 job。如果这些 job 被跳过,GitHub Actions 默认也可能跳过 release job。因此 dry-run patch 需要把这些签名 job 从 needs 里移除,让 release job 只汇总 CLI、install script 和 Linux Desktop artifact。

建议改动

只改 .github/workflows/release.yml,属于「我们自己的打包和分发」这一类改动。

改动内容:

  1. 给 4 个需要签名的 macOS / Windows Desktop job 加 if: false,dry-run 阶段跳过。
  2. release job 的 needs 改成只依赖 build-cliinstall-scriptbundle-desktop-linux

示意 diff:

bundle-desktop:
+  if: false  # ApeCloud fork: dry-run 阶段跳过需要 Apple 签名证书的 macOS Apple Silicon Desktop
  uses: ./.github/workflows/bundle-desktop.yml

bundle-desktop-intel:
+  if: false  # ApeCloud fork: dry-run 阶段跳过需要 Apple 签名证书的 macOS Intel Desktop
  uses: ./.github/workflows/bundle-desktop-intel.yml

bundle-desktop-windows:
+  if: false  # ApeCloud fork: dry-run 阶段跳过需要 Windows 签名证书的 Desktop
  uses: ./.github/workflows/bundle-desktop-windows.yml

bundle-desktop-windows-cuda:
+  if: false  # ApeCloud fork: dry-run 阶段跳过需要 Windows 签名证书的 CUDA Desktop
  uses: ./.github/workflows/bundle-desktop-windows.yml

release:
-  needs: [build-cli, install-script, bundle-desktop, bundle-desktop-intel, bundle-desktop-linux, bundle-desktop-windows, bundle-desktop-windows-cuda]
+  needs: [build-cli, install-script, bundle-desktop-linux]

本建议不修改 Rust 代码,不修改 Goose agent loop,不修改 MCP runtime。

预期 dry-run 产物

打一个测试 tag,例如 v1.35.0-apecloud.0 后,预期 release.yml 在 30-60 分钟内完成,并在 github.com/apecloud/goose/releases 生成以下产物:

CLI 二进制

  • Linux x86_64 / aarch64 的 gnu / gnu-vulkan / musl variant
  • macOS x86_64-apple-darwin / aarch64-apple-darwin
  • Windows x86_64-pc-windows-msvc / cuda variant(未签名 zip)

Linux Desktop

  • .deb
  • .rpm
  • .flatpak
  • vulkan / non-vulkan variant

安装脚本

  • download_cli.sh

同时,publish-docker.yml 应该并行触发,并推送:

  • ghcr.io/apecloud/goose:1.35.0-apecloud.0

本轮暂不产出

这些留到后续阶段处理:

  • macOS Desktop signed installer:需要 Apple Developer 证书和 notarization 配置
  • Windows Desktop signed installer:需要 Windows code-signing 证书
  • NPM package:需要 ApeCloud NPM scope 和 trusted publisher 配置

验证方式

patch 合并并推 tag 后,检查:

  1. github.com/apecloud/goose/actions 对应 workflow run 成功。
  2. github.com/apecloud/goose/releases/tag/v1.35.0-apecloud.0 里有预期 artifact。
  3. 下载一个 CLI artifact,解压后执行:
./goose --version

预期输出 1.35.0

  1. 拉取 Docker 镜像并验证:
docker pull ghcr.io/apecloud/goose:1.35.0-apecloud.0
docker run --rm ghcr.io/apecloud/goose:1.35.0-apecloud.0 --version

预期输出 1.35.0

改动边界说明

  • 本 issue 只涉及 .github/workflows/release.yml,属于「我们自己的打包和分发」。
  • 不改 crates/**,不改核心 Rust 逻辑。
  • dry-run 通过后,下一阶段再做品牌、Logo、默认配置、UI hide 和安全默认值。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions