尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Tetrigo 发布流水线完整指南:Task、golangci-lint 到 goreleaser 一键跨平台打包全流程

Tetrigo 发布流水线完整指南:Task、golangci-lint 到 goreleaser 一键跨平台打包全流程 Tetrigo 发布流水线完整指南Task、golangci-lint 到 goreleaser 一键跨平台打包全流程【免费下载链接】tetrigoPlay Tetris in your terminal.项目地址: https://gitcode.com/gh_mirrors/te/tetrigoTetrigo 是一款用 Go 语言编写的终端俄罗斯方块游戏严格遵循 2009 版 Tetris Design Guideline。本文带你完整拆解 Tetrigo 的发布流水线从 Task 任务编排、golangci-lint 代码质量检查到 goreleaser 一键跨平台打包出 Windows、macOS、Linux 二进制包和 Docker 镜像。流水线全景图一条命令走完测试与发布Tetrigo 的发布流水线由四个核心文件驱动任务编排Taskfile.yaml —— 用 Task 把所有命令串成一条流水线发布配置.goreleaser.yaml —— 定义 6 个平台的构建规则与发布产物发布脚本scripts/goreleaser/dryrun.sh 和 scripts/goreleaser/release.sh容器打包Dockerfile —— 生成极小的官方 Docker 镜像整体流程可以概括为task defaultcodegen → lint → test ↓ task goreleaser:dryrun本地试跑 ↓ task goreleaser:release正式发布先 clone 仓库git clone https://gitcode.com/gh_mirrors/te/tetrigo第一步Task 一键本地验证打开 Taskfile.yaml默认的default任务把三件事串在了一起task # 等价于依次执行 codegen → lint → test任务别名作用task codegen-运行 mockery 生成 mock 代码如mock_Stopwatch.gotask lintl执行 golangci-lint 静态检查task testt运行go test -cover ./...全量测试task installigo install安装到本地task run-直接go run ./cmd/tetrigo/玩游戏得益于sources字段声明了./**/*.go等依赖只有源码变化时任务才会重跑重复执行非常高效。第二步golangci-lint 质量守门员在发布之前代码必须先过 lint 这一关task lint # 检查 task lint:fix # 自动修复可修复的问题配置来自仓库根目录的.golangci.yaml。这条检查同时被task default覆盖意味着任何人合入的代码都必须先通过静态分析从源头上保证发布产物的质量。第三步goreleaser 一键跨平台打包发布的核心在 .goreleaser.yaml。一次发布即可产出 6 个平台二进制平台交叉编译器macOS Intel / Apple Silicono64-clang/oa64-clangLinux amd64 / arm64x86_64-linux-gnu-gcc/aarch64-linux-gnu-gccWindows amd64 / arm64x86_64-w64-mingw32-gcc/aarch64-w64-mingw32-gcc几个值得学习的设计点CGO_ENABLED1因为项目依赖mattn/go-sqlite3本地排行榜存储必须开启 CGO 并使用交叉 C 编译器macOS 通用二进制universal_binaries把 amd64 与 arm64 合并为单一tetrigo可执行文件Intel 与 M 系列芯片通吃Windows 用 zip 打包format_overrides让 Windows 产物自动变为.zip更符合用户习惯自动 Changelogchangelog.filters过滤掉docs:、test:前缀的提交发布说明只保留有意义的改动自动识别预发布版prerelease: auto让v0.x.x-beta之类的标签自动标记为预发布先 dryrun 试跑再正式 release项目没有让你直接发版而是提供了两道 Task 命令# 安装 goreleaser task goreleaser:install # 本地试跑只打包、不发布验证一切正常 task goreleaser:dryrun # 正式发布需要设置 GITHUB_TOKEN 环境变量 export GITHUB_TOKENxxx task goreleaser:release两条命令背后分别是 scripts/goreleaser/dryrun.sh 和 scripts/goreleaser/release.sh。它们的共同点是都运行ghcr.io/goreleaser/goreleaser-cross官方交叉编译 Docker 镜像版本由Taskfile.yaml中的GOLANG_CROSS_VERSION锁定为v1.23镜像内预装了所有交叉 C 编译器无需在宿主机上折腾环境。dryrun 额外带--skippublish参数保证产物只落在本地dist/目录发布前先试跑是这条流水线最值得借鉴的习惯。不止二进制Docker 镜像与 Homebrew 一起发.goreleaser.yaml中还有两个自动化发布通道Docker 镜像基于 Dockerfile 用buildx构建只包含二进制文件FROM scratch同时推送latest与v{版本}两个标签到容器仓库Homebrew Tapbrews段自动向维护者的 homebrew-tap 仓库提交 FormulamacOS 用户一条brew install即可装好此外flake.nix 让 Nix 用户也能通过nix run直接安装并自动处理配置文件与 SQLite 数据库的初始化。快速上手命令清单 git clone https://gitcode.com/gh_mirrors/te/tetrigo cd tetrigo task # 代码生成 lint 测试本地全绿 task goreleaser:dryrun # 试跑跨平台打包 task goreleaser:release # 设置 GITHUB_TOKEN 后一键发布总结Tetrigo 的发布流水线是一个小而完整的教学范例Task 负责编排、golangci-lint 负责把关、goreleaser-cross 负责跨平台构建、Docker 与 Homebrew 负责分发。如果你也在用 Go 开发终端应用这套 Taskfile.yaml .goreleaser.yaml 的组合可以直接作为你的发布模板。【免费下载链接】tetrigoPlay Tetris in your terminal.项目地址: https://gitcode.com/gh_mirrors/te/tetrigo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表