Goreleaser很棒。这是一个简单的工具,可以让你发布你的go包。最近,我和我的团队将它与我们构建的公司范围的 CLI 工具一起使用。在本教程中,我们将使用goreleaser自动发布一个简单的go
包。
安装
在 macOS 上,要安装goreleaser,我们可以使用:
go install github.com/goreleaser/goreleaser@latest
或者我们使用流行的适用于 macOS 和 Linux 的自制包管理器:
brew install goreleaser/tap/goreleaser
在 Ubuntu Linux 上,我们可以使用apt
:
echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | sudo tee /etc/apt/sources.list.d/goreleaser.list
sudo apt update
sudo apt install goreleaser
更多选项可以在这里找到。
创建包
创建一个新文件夹来存放我们的项目。然后初始化模块
go mod init main
接下来,我们创建一个名为main.go
. 在main.go
中,复制并粘贴以下代码:
package main
func main() {
println("This is a tutorial about Goreleaser!")
}
初始化 Goreleaser
下一步是设置goreleaser。为此,我们运行:
goreleaser init
此命令在我们的目录中创建.goreleaser.yaml
文件。我们将仔细研究这个文件。
更新.goreleaser.yaml
.goreleaser.yaml
我在生成的文件中添加了更多字段。我们将介绍重要的部分。
release:
github:
owner: justdamilare
name: mytool
before:
hooks:
- go mod tidy
- go generate ./...
builds:
- env:
- GO_VERSION=1.19
goos:
- linux
- windows
- darwin
# replaces architecture naming in the archive name
archives:
- replacements:
darwin: Darwin
linux: Linux
windows: Windows
386: i386
amd64: x86_64
format_overrides:
- goos: windows
format: zip
checksum:
name_template: 'checksums.txt'
snapshot:
name_template: "{{ incpatch .Version }}-next"
changelog:
sort: asc
filters:
exclude:
- '^docs:'
- '^test:'
# upload binaries to gcloud bucket called `mytool`
blobs:
- provider: gs
bucket: mytool
folder: "{{ .Version }}"
# generate homebrew-tap
brews:
- name: justdamilare
tap:
owner: mytool
name: homebrew-tap
folder: Formula
homepage: https://github.com/justdamilare/mytool
description: A simple go project
# use custom download strategy in case the Github repository is private
download_strategy: GitHubPrivateRepositoryReleaseDownloadStrategy
custom_require: "../custom_download_strategy"
test: |
system "#{bin}/mytool"
install: |
bin.install "mytool"
应该注意的是,如果不需要homebrew-tap
并且blobs
不需要,可以删除这些部分。如果需要,还应该创建homebrew-tap
一个名为的 Githib 存储库。homebrew-tap
发布包
最后,我们可以发布我们的包。为此,我们需要为我们在 Git 上的发布创建一个标签。例如,要为 version 创建标签0.1.0
,我们可以运行:
git tag v0.1.0
和
git push origin v0.1.0
然后在带有 的目录中main.go
,运行:
goreleaser release
Goreleaser 将构建所有的二进制文件。这些二进制文件将使用本地 GitHub 凭据自动上传到 Github。构建也将位于/dist
主目录中的文件夹中。如果包含brew
发布方法,则生成的*.rb
文件也将在/dist
文件夹中。如果 Goreleaser 没有自动将生成的复制Formula
到homebrew-tap
repo,可以手动复制。