Skip to content

Release 发布流程

二进制(mcp-server / crtsh-cli)的发布走 tag-based GoReleaser,与文档站部署是两条独立的 CI 线。

GoReleasertag-based8 平台2 二进制 × 8 平台

发布就两步

flowchart LR T["git tag v1.1.0"] --> P["git push origin v1.1.0"] P --> TR["触发 goreleaser.yml"] TR --> B["构建 8 平台 × 2 二进制"] B --> U["上传 Release 资产"] U --> R["GitHub Release 上线"]
bash
git tag v1.1.0
git push origin v1.1.0

推 tag 触发 GoReleaser workflow,自动构建并上传 Release 资产。

构建产物矩阵

OS架构
linuxamd64 / arm64 / 386
darwin (macOS)amd64 / arm64
windowsamd64 / arm64 / 386
freebsdamd64

每个平台产出两个 tarball:

🔌mcp-server
crtsh-skills-mcp-server-{os}-{arch}.tar.gz
💻crtsh-cli
crtsh-skills-cli-{os}-{arch}.tar.gz

版本注入

构建时通过 -ldflags 把 tag 注入二进制:

bash
go build -ldflags "-X main.Version=v1.1.0" -o mcp-server ./cmd/mcp-server/
go build -ldflags "-X main.Version=v1.1.0" -o crtsh-cli ./cmd/crtsh-cli/
验证版本号
$ ./mcp-server --version
crt.sh-skills mcp-server v1.1.0
$ ./crtsh-cli --version
crt.sh-skills crtsh-cli v1.1.0

本地 dry-run

bash
goreleaser release --snapshot --clean

--snapshot 的意义

不发布、不要求 git tag、不推 Release,纯本地验证 GoReleaser 配置无误。改完 .goreleaser.yaml 先跑这个。

一行安装预编译二进制

自动识别平台 → 下载 → 解压 → 跑
$ OS=$(uname -s | tr '[:upper:]' '[:lower:]'); ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
$ curl -sL https://github.com/cyberspacesec/crt.sh-skills/releases/latest/download/crtsh-skills-mcp-server-${OS}-${ARCH}.tar.gz | tar xz
$ ./mcp-server --transport stdio
✓ MCP server running on stdio

CI 流程全景

flowchart TB P["push main"] --> CI["ci.yml
test + lint + build + skills 校验"] P --> DW["deploy-website.yml
构建文档 → Pages"] T["push tag v*"] --> RL["goreleaser.yml
构建二进制 → Release"]

三条线各司其职:

🧪ci.yml
保质量:测试 + lint + skills 一致性
📖deploy-website.yml
发文档:VitePress → Pages
📦goreleaser.yml
发二进制:8 平台 → Release