最近在寫 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 功能。
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!