【免费下载链接】GoAnime
Search, stream and download anime, movies and TV shows from the terminal, in English and Brazilian Portuguese.
GoAnime 是一个用 Go 编写的终端 TUI 工具,用于搜索、在线播放和下载动漫、电影与剧集。作为 Go 语言项目,它天然具备跨平台能力:同一套代码可以打包出 Linux、macOS 和 Windows 三端二进制。这篇文章带你完整走一遍 GoAnime 的构建体系与 CI/CD 流程——从本地一键构建脚本,到每次推送触发的自动化质量门禁,再到打一个 tag 就自动完成三端发布、校验和生成、AUR 上架的全自动流水线。
一、构建体系总览 📦
GoAnime 的构建逻辑集中在两个位置:build/目录下的平台构建脚本,以及.github/workflows/下的三条自动化流水线。
| 构建资产 | 文件路径 | 作用 |
|---|---|---|
| Linux 标准构建 | build/buildlinux.sh | 纯 Go 编译,无外部依赖 |
| Linux SQLite 构建 | build/buildlinux-with-sqlite.sh | 开启 CGO,支持进度记录 |
| macOS 构建 | build/buildmacos.sh | Intel + Apple Silicon + 通用二进制 |
| Windows 构建 | build/buildwindows.sh | 交叉编译 .exe 并打包 zip |
| Windows 安装器 | build/install.iss | Inno Setup 脚本,附带 mpv |
| AUR 包 | aur/goanime/PKGBUILD | Arch Linux 一键安装 |
| 构建选项文档 | docs/BUILD_OPTIONS.md | 官方构建说明与排错 |
关键设计:标准版 vs SQLite 版
GoAnime 提供两种构建形态,区别在于是否启用 CGO:
- 标准版(
CGO_ENABLED=0):体积更小、零系统依赖,任何机器直接运行,但不包含观看进度记录功能; - SQLite 版(
CGO_ENABLED=1):链接 SQLite,可记录播放位置、续播和已观看剧集,但体积更大,且构建机需要 C 编译器和 sqlite 开发库。
你可以通过goanime --version查看当前构建是否带 SQLite 跟踪,版本输出逻辑位于 internal/version/version.go。
二、本地一键构建:三端各只需一条命令 🔧
进入build/目录后,对应平台执行脚本即可,产物统一输出到build/根目录并自动附带 SHA256 校验和。
Linux 构建
cd build ./buildlinux.sh # 标准版 ./buildlinux-with-sqlite.sh # 带 SQLite 进度记录buildlinux.sh 的核心命令只有一行:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -trimpath -tags="!windows" -o goanime-linux ../cmd/goanime几个值得注意的细节:
-ldflags="-s -w"去掉符号表和调试信息,-trimpath抹掉本地路径,两者都让产物更小且可复现;-tags="!windows"显式排除 Windows 专属依赖(go-winio);- 若系统装有 UPX,脚本会用
upx --best --ultra-brute极限压缩,没有 UPX 则自动跳过; - 最后生成
goanime-linux.tar.gz及sha256校验文件。
SQLite 版本脚本会先检查gcc与pkg-config --exists sqlite3,缺失时会给出各发行版的安装命令(Ubuntu 的libsqlite3-dev、Fedora 的sqlite-devel、Arch 的sqlite),详见 docs/BUILD_OPTIONS.md。
macOS 构建:一次产出 4 个二进制
buildmacos.sh 是三个脚本中产出最多的:
- 分别编译 Intel(amd64)与 Apple Silicon(arm64)两个版本;
- 用
lipo将两者合并成Universal 通用二进制,一份文件同时兼容新旧芯片; - 再复制一份通用命名的
goanime-darwin,作为自动更新器的兜底文件名; - 每个二进制都会打 tar.gz 包并生成校验和。
在 macOS 上运行该脚本必须本机执行(lipo是 Apple 系统工具),这正是它只支持 macOS 环境构建的原因。
Windows 构建
Windows 提供两套脚本,逻辑一致:
- buildwindows.sh:在 Linux/macOS 上交叉编译 Windows 版;
- buildwindows.ps1:Windows 原生的 PowerShell 版本。
脚本会先用uname -m(或$env:PROCESSOR_ARCHITECTURE)自动检测架构并映射为amd64/arm64,然后执行CGO_ENABLED=0 GOOS=windows go build -tags="windows",最终打成goanime-windows.zip+ SHA256 校验和。
三、CI 质量门禁:每次推送自动三端验证 ✅
.github/workflows/ci.yml 在每次向main/dev分支推送或提 PR 时触发,包含三个 Job。
Job 1:三平台矩阵测试
testJob 在 ubuntu、windows、macos 三台 Runner 上并行执行,每台的流程是:
| 步骤 | 说明 |
|---|---|
| 安装 mpv | 三端分别用 apt / 7z 解压 winbuild 包 / brew 安装播放器依赖 |
| 静态检查 | golangci-lint(规则见 .golangci.yml)+gosec安全扫描 +govulncheck依赖漏洞扫描 |
| 运行测试 | go test -race -v -coverprofile=coverage.out ./...,开启竞态检测 |
| 额外项 | macOS 专属跑 socket 路径测试;Linux 上带sourcehealth标签跑抓取源健康诊断 |
Job 2:三端二进制构建
build-binariesJob 依赖测试通过后才执行,用一个矩阵同时产出 4 个目标:linux-amd64、windows-amd64、darwin-amd64、darwin-arm64。Unix 产物打 tar.gz、Windows 产物打 zip,各自生成校验和后通过actions/upload-artifact上传(保留 30 天)。
Job 3:Windows 离线安装器
这是最有意思的 Job:build-windows-installer在 Windows Runner 上用 MinGW GCC 以CGO_ENABLED=1编译带 SQLite 的goanime.exe,再自动下载官方 mpv 的 x86_64 构建及全部依赖 DLL,连同 install.iss 一起用 Inno Setup 编译成GoAnime-Installer-*.exe。用户安装时可选"加入 PATH""创建桌面图标",卸载脚本还会自动还原 PATH——安装器的这些行为都定义在install.iss的[Tasks]、[Run]与[Code]段中。
此外还有两个辅助流水线:.github/workflows/coverage.yml 在三端收集覆盖率并上传 Codecov,.circleci/config.yml 则负责基础测试与覆盖率上传,形成双 CI 保障。
四、发布流水线:打一个 tag,自动三端发布 🚀
.github/workflows/release.yml 由符合v1.6、v1.6.0或预发布格式(如v1.6-beta.1)的 tag 推送触发,共 5 个 Job 严格串行:
test → build(5 平台矩阵)→ windows-installer → release → aur-publish① 测试门禁:在 Ubuntu 上跑 lint、-race测试、构建验证,并把测试摘要写入 Step Summary。
② 平台构建:与 CI 最大的不同是这里CGO_ENABLED=1,发布版二进制全部内置 SQLite 进度记录。矩阵覆盖 5 个目标:
| 平台 | 架构 | Runner | 编译器 |
|---|---|---|---|
| Linux | amd64 | ubuntu-latest | gcc |
| Linux | arm64 | ubuntu-24.04-arm | gcc |
| macOS | amd64 | macos-15 | clang |
| macOS | arm64 | macos-latest | clang |
| Windows | amd64 | windows-latest | MinGW gcc |
构建时通过-ldflags -X把版本号、构建时间、Git commit 注入 internal/version/version.go 的三个变量,用户运行goanime --version即可看到完整溯源信息。
③ Windows 安装器:下载刚构建的goanime-windows-amd64.exe,连同 mpv 一起 stage 到build/staging/,自动替换install.iss中的版本号后编译出GoAnime-Installer-<版本>.exe。
④ 创建 Release:汇总所有产物,为 Unix 二进制补打 tar.gz、为 exe 打 zip,生成SHA256 + SHA512 双校验和清单,自动从CHANGELOG.md(存在时)或 conventional commit 生成 Release Notes,最后用softprops/action-gh-release一次性上传:
goanime-linux-amd64 / -arm64(二进制 + tar.gz) goanime-darwin-amd64 / -arm64(二进制 + tar.gz) goanime-windows-amd64.zip GoAnime-Installer-<版本>.exe checksums-sha256.txt / checksums-sha512.txttag 中若含-(如v1.9-beta.1),会自动标记为预发布。
⑤ 同步 AUR:正式版(非预发布)会自动更新 aur/goanime/PKGBUILD 中的pkgver,在 Arch Docker 容器里生成.SRCINFO,再通过 SSH 密钥推送上架——yay -S goanime随即将拿到新版本。该步骤依赖AUR_SSH_PRIVATE_KEY等 Secrets,未配置时静默跳过。
五、常见构建问题排查 🩺
| 症状 | 原因 | 解决办法 |
|---|---|---|
运行提示panic: database initialization failed... CGO_ENABLED=0 | 你用的是标准版构建,SQLite 是空实现 | 换用buildlinux-with-sqlite.sh重新构建,或接受无进度记录 |
macOS 脚本提示lipo command not found | 在非 macOS 机器上执行 | 到 Mac 本机运行 buildmacos.sh |
| SQLite 构建报缺少 sqlite3 | 未装开发库 | Ubuntu:sudo apt-get install libsqlite3-dev;Fedora:sudo dnf install sqlite-devel |
| 想确认当前版本能力 | — | goanime --version,带 SQLite 会显示with SQLite tracking |
六、总结
GoAnime 的三端发布体系可以概括为三条主线:
- 本地构建脚本(
build/):标准版走纯 Go 零依赖路线,macOS 额外产出 Universal 二进制,Windows 支持交叉编译; - CI 质量门禁(
ci.yml+coverage.yml):三端矩阵测试 + lint/安全/漏洞扫描,测试不过不构建; - Tag 驱动发布(
release.yml):从版本注入、CGO 构建、mpv 打包安装器、双校验和、Release 创建到 AUR 上架,全程零手工干预。
整套流程的完整设计文档参见 docs/Development.md,其中还包含分支策略(dev→main)、提交规范与静态检查工具清单。理解了这套流程后,无论是本地发布测试版还是跟进上游自动化,你都能做到心中有数。
【免费下载链接】GoAnime
Search, stream and download anime, movies and TV shows from the terminal, in English and Brazilian Portuguese.
相关推荐
DLSS 切换终极指南:9 种画质 DLL、8 大游戏库,不更新游戏自由升降级版本
DLSS 切换终极指南:9 种画质 DLL、8 大游戏库,不更新游戏自由升降级版本 DLSS Swapper 是一款开源的 DLL 切换工具,专为 Window
桌面应用OpenSC2K 的 CI 与发布流水线:GitHub Actions 测试、跨平台打包与夜间构建全解析
OpenSC2K 的 CI 与发布流水线:GitHub Actions 测试、跨平台打包与夜间构建全解析 本文以 OpenSC2K 仓库的 docs/ci.md
游戏开发electron-builder 跨平台构建完全指南:macOS / Linux / Windows 多平台打包与 Docker 实战
electron builder 跨平台构建完全指南:macOS / Linux / Windows 多平台打包与 Docker 实战 导读 本篇指南以 ele
构建工具桌面应用开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考