GoReleaser 专为Go项目制定的自动化工具

《开源精选》是我们分享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

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章