《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的GoReleaser 是 Go 项目的发布自动化工具。目标是简化构建、发布和发布步骤,同时为所有步骤提供变体定制选项。 GoReleaser 在构建时考虑了 CI 工具——您只需要在构建脚本中下载并执行它。在您的机器中安装它是可选的。 您的整个发布过程可以通过一个.goreleaser.yml文件进行定制。设置完成后,每次要创建新版本时,您需要做的就是标记并运行goreleaser release。 特性交叉编译你的 Go 项目 发布到 GitHub、GitLab 和 Gitea 创建定时构建 创建 Docker 镜像 创建 Linux 软件包和 Homebrew 仓库 签署工件、校验和和容器映射 在 Twitter、Slack、Discord 和其他网站上发布新版本 为二进制文件和容器映像生成 SBOM 安装 GoReleaser 有两个发行版:OSS 和Pro。 您可以安装预编译的二进制文件(以几种不同的方式)、使用 Docker 或从源代码编译(在 OSS 上时)。 homebrew tap brew install goreleaser/tap/goreleaser homebrew brew install goreleaser snapcraft sudo snap install --classic goreleaser scoop scoop bucket add goreleaser https://github.com/goreleaser/scoop-bucket.gitscoop install goreleaser apt echo "deb [trusted=yes] https://repo.goreleaser.com/apt/ /" | sudo tee /etc/apt/sources.list.d/goreleaser.listsudo apt updatesudo apt install goreleaser yum echo "[goreleaser]name=GoReleaserbaseurl=https://repo.goreleaser.com/yum/enabled=1gpgcheck=0" | sudo tee /etc/yum.repos.d/goreleaser.reposudo yum install goreleaser aur yay -S goreleaser-bin go install go install github.com/goreleaser/goreleaser@latest bash script curl -sfL https://goreleaser.com/static/run | bash快速开始 在这个例子中,我们将构建、归档和发布一个示例 Go 项目。 创建一个 GitHub 存储库并添加一个主包: // main.gopackage mainfunc main() { println("Ba dum, tss!")} 初始化模块 go mod init main 运行init命令以创建示例.goreleaser.yaml文件: goreleaser init 现在,让我们运行一个"仅限本地"版本,看看它是否可以使用release命令: goreleaser release --snapshot --rm-dist 此时,您可以自定义生成的.goreleaser.yaml或保持原样,这取决于您。最好的做法是检查.goreleaser.yaml源代码管理。 .goreleaser.yaml您可以通过运行检查命令来验证您是否有效: goreleaser check 您还可以使用 GoReleaser仅为给定的 GOOS/GOARCH构建二进制文件,这对本地开发很有用: goreleaser build --single-target 为了发布到 GitHub,你需要导出一个GITHUB_TOKEN环境变量,它应该包含一个有效的 GitHub 令牌和repo范围。它将用于将发布部署到您的 GitHub 存储库。你可以在这里创建一个新的 github 令牌。 这个怎么运作 GoReleaser 的目标是自动化您在发布软件时将进行的大部分无聊工作,理想情况下使用合理的默认值并使最常见的用例变得简单。 GoReleaser 期望有几件事: 包含配置的文件(有关更多信息,.goreleaser.yaml请参阅自定义部分) 与 SemVer 兼容的版本(例如10.21.34-prerelease+buildmeta) 持续集成-GitHub 操作 工作流程 以下是在您的工作流程中使用此操作的简单片段: name: goreleaseron: push: # run only against tags tags: - "*"permissions: contents: write # packages: write # issues: writejobs: goreleaser: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 with: fetch-depth: 0 - name: Fetch all tags run: git fetch --force --tags - name: Set up Go uses: actions/setup-go@v2 with: go-version: 1.19 - name: Run GoReleaser uses: goreleaser/goreleaser-action@v2 with: # either "goreleaser" (default) or "goreleaser-pro" distribution: goreleaser version: latest args: release --rm-dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Your GoReleaser Pro key, if you are using the "goreleaser-pro" distribution # GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} —END— 开源协议:MIT license 开源地址:https://github.com/goreleaser/goreleaser