本文记录一下如何优雅在 Linux & MacOS 上发布 Go 程序的过程。
必备工具
在实操之前,请首先确认成功安装以下工具:
操作步骤
首先当然是完成项目的编码工作。程序能够正常的编译执行。以ts项目为例。
$: git clone https://github.com/liujianping/ts
$: cd
$: ├── LICENSE
├── README.md
├── cmd
│ ├── main.go
│ ├── main_test.go
│ └── root.go
├── **dist**
│ ├── CHANGELOG.md
│ ├── checksums.txt
│ ├── config.yaml
│ ├── darwin_386
│ │ └── ts
│ ├── darwin_amd64
│ │ └── ts
│ ├── linux_386
│ │ └── ts
│ ├── linux_amd64
│ │ └── ts
│ ├── ts_0.0.6_Darwin_i386.tar.gz
│ ├── ts_0.0.6_Darwin_x86_64.tar.gz
│ ├── ts_0.0.6_Linux_i386.tar.gz
│ └── ts_0.0.6_Linux_x86_64.tar.gz
├── go.mod
├── go.sum
├── **install.sh**
├── main.go
...
Shell 脚本安装
该项目非常简单,代码也很少。以上目录展示了两个关键目录或文件, 分别是:
- dist 目录
- install.sh 安装脚本
这两处变更均是通过工具生成的。现在我们生成它:
$: rm -rf dist install.sh
# 生成安装脚本
$: godownloader --repo=liujianping/ts > ./install.sh
# 生成发布目录
$: goreleaser init
# 直接操作会自动发布到 github 对应的 repo 上,前提是需要 tag
$: goreleaser
通过goreleaser
操作,会自动将发布目录发布到https://github.com/liujianping/ts/releases发布页中。 当然前提是在系统环境变量中设置好 GITLAB_API_PRIVATE_TOKEN
环境变量,具体值请在 github 上进行申请。
其实以上过程完成后,就可以实现跨平台安装了。install.sh
脚本可以直接执行,通过判断本地系统版本相应的去下载安装包,自动进行安装。
$: curl -sfL https://raw.githubusercontent.com/liujianping/ts/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
Brew 安装
以上讲的是通过 SHELL 脚本的方式安装。对于MacOS系统而言,程序还可以打包进入brew
包管理服务中,通过brew install
的方式进行安装。
首先,在项目的https://github.com/liujianping/ts/releases发布页中找到MacOS的安装包地址:https://github.com/liujianping/ts/releases/download/v0.0.6/ts_0.0.6_Darwin_x86_64.tar.gz.
创建一个 brew formula
:
$: brew create https://github.com/liujianping/ts/releases/download/v0.0.6/ts_0.0.6_Darwin_x86_64.tar.gz
通过这个命令,brew
会创建文件:/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/ts.rb
.进行简单的修改,仅提供安装脚本:
# Documentation: https://docs.brew.sh/Formula-Cookbook
# https://rubydoc.brew.sh/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!
class Ts < Formula
desc "timestamp convert & compare tool"
homepage ""
url "https://github.com/liujianping/ts/releases/download/v0.0.6/ts_0.0.6_Darwin_x86_64.tar.gz"
sha256 "cf28627f973b03c2c103032f9c2be35d1d2f556fdf79f5139cc659b5e07924dd"
# depends_on "cmake" => :build
def install
bin.install "ts"
end
end
保存修改。现在在个人电脑上就可以进行brew install ts
安装了。但这还没完成发布。在个人 github
账号下创建一个homebrew-
前缀的repo
.如liujianping/homebrew-tap.将新创建文件: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/ts.rb
发布到该 repo
下。现在就可以通过 brew
的方式安装应用了。
$: brew tap liujianping/tap && brew install ts
小结
很多好的开源项目都有完善的安装指南,通过学习这些开源项目,将好的经验应用到自己的项目中,是一条捷径。
如果觉得有用,欢迎点赞我的开源项目: