最近在寫 Golang 的東西覺得每次 Release 都要自己手動 Build 執行檔很麻煩,所以就找了一下 GitHub 發現有一個很好用的 Action 它叫 GoReleaser。
GoReleaser 介紹
它可以做到自動 Build 再配合 actions/upload-artifact 就可以自動上傳執行檔到 GitHub artifact,如果有需要為檔案做 Signing 它也是可以完成的。
GoReleaser 支援
目前 GoReleaser 支援三種平台分別是 GitHub、GitLab 與 Gitea,不過本文只會介紹 GitHub 平台。
GoReleaser 設定方法
Build 測試
其實只要簡單新增一個檔案例如 .github/workflows/goreleaser.yaml 它就會自動做 Build 的動作了,此方法其實可以拿來做 Build 測試。
name: goreleaser
on:
pull_request:
push:
jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
-
name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.15
-
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 }}
自動上傳 GitHub artifact
上傳 Linux 與 macOS 執行檔
如果想要讓它自動上傳 Linux 與 macOS 執行檔到 artifact 可以把檔案修改成如下
name: goreleaser
on:
pull_request:
push:
jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
-
name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.15
-
name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
with:
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
name: Upload assets
uses: actions/upload-artifact@v2
with:
name: myapp
path: dist/*
上傳包含 Windows 的執行檔
預設情況並不會 Build Windows 執行檔,所以如果想要它一起處理 Windows 執行檔,可以在目錄加入 .goreleaser.yml 檔案跟它說還需要處理 Windows 執行檔的動作,而更多的設定參數可以參考文件。
builds:
-
env:
- CGO_ENABLED=0
goos:
- darwin
- linux
- windows
goarch:
- 386
- amd64
GoReleaser Pro
另外它還有付費功能的 GoReleaser Pro 可以處理上傳 apt 與 yum 之類的功能,如果需要可以研究一下。
GoReleaser Command Line
除了 GitHub Action 之外它還有 cmd 指令可以使用,例如可以把 go build 換成 goreleaser build 使用,它可以提供更多的 Build 功能。