Golang項(xiàng)目在github創(chuàng)建release后自動(dòng)生成二進(jìn)制文件的方法
希望達(dá)到的效果
工具類的Golang項(xiàng)目需要編譯成二進(jìn)制文件后在命令行中運(yùn)行,所以希望在github里面創(chuàng)建一個(gè)新的release后能自動(dòng)編譯成針對(duì)各個(gè)平臺(tái)的二進(jìn)制文件,如下圖所示:
實(shí)現(xiàn)方式
借助 GoReleaser 這款工具配合 github actions 可以很方便實(shí)現(xiàn)這種效果,下面講解下具體實(shí)現(xiàn)方法。
首先需要在 Golang 項(xiàng)目的根目錄創(chuàng)建 GoReleaser 配置文件 .goreleaser.yaml,內(nèi)容如下:
# This is an example .goreleaser.yml file with some sensible defaults. # Make sure to check the documentation at https://goreleaser.com before: hooks: # You may remove this if you don't use go modules. - go mod tidy # you may remove this if you don't need go generate - go generate ./... builds: - env: - CGO_ENABLED=0 goos: - linux - windows - darwin archives: - format: tar.gz # this name template makes the OS and Arch compatible with the results of uname. name_template: >- {{ .ProjectName }}_ {{- title .Os }}_ {{- if eq .Arch "amd64" }}x86_64 {{- else if eq .Arch "386" }}i386 {{- else }}{{ .Arch }}{{ end }} {{- if .Arm }}v{{ .Arm }}{{ end }} # use zip for windows archives format_overrides: - goos: windows format: zip checksum: name_template: 'checksums.txt' snapshot: name_template: "{{ incpatch .Version }}-next" changelog: sort: asc filters: exclude: - '^docs:' - '^test:' # The lines beneath this are called `modelines`. See `:help modeline` # Feel free to remove those if you don't want/use them. # yaml-language-server: $schema=https://goreleaser.com/static/schema.json # vim: set ts=2 sw=2 tw=0 fo=cnqoj
然后創(chuàng)建 github actions 配置文件, 在Golang項(xiàng)目的根目錄創(chuàng)建 .github 文件夾,在這個(gè)文件夾里面創(chuàng)建 workflows 文件夾,在 workflows 文件夾里面創(chuàng)建 release.yaml 文件,內(nèi)容如下:
name: goreleaser on: push: # run only against tags tags: - '*' permissions: contents: write # packages: write # issues: write jobs: goreleaser: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - run: git fetch --force --tags - uses: actions/setup-go@v3 with: go-version: '>=1.20.2' cache: true # More assembly might be required: Docker logins, GPG, etc. It all depends # on your needs. - uses: goreleaser/goreleaser-action@v4 with: # either 'goreleaser' (default) or 'goreleaser-pro': distribution: goreleaser version: latest args: release --clean env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Your GoReleaser Pro key, if you are using the 'goreleaser-pro' # distribution: # GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}
這個(gè)文件的內(nèi)容不需要做任何修改,提交代碼并將代碼 push 到 github 后,在 github 的 release 頁(yè)面新建一個(gè) release 后,在 Actions 頁(yè)面就可以看到有一個(gè)workflow在運(yùn)行:
等這個(gè) workflow 運(yùn)行完成以后,在 release 的 Assets 里面就會(huì)出現(xiàn)針對(duì)各個(gè)平臺(tái)的二進(jìn)制文件。
到此這篇關(guān)于Golang項(xiàng)目在github創(chuàng)建release后如何自動(dòng)生成二進(jìn)制文件的文章就介紹到這了,更多相關(guān)go自動(dòng)生成二進(jìn)制文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang使用iconv報(bào)undefined:XXX的問(wèn)題處理方案
這篇文章主要介紹了golang使用iconv報(bào)undefined:XXX的問(wèn)題處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Golang實(shí)現(xiàn)協(xié)程超時(shí)控制的方式總結(jié)
我們知道,go協(xié)程如果不做好處理,很容易造成內(nèi)存泄漏,所以對(duì)goroutine做超時(shí)控制,才能有效避免這種情況發(fā)生,本文為大家整理了兩個(gè)常見(jiàn)的Golang超時(shí)控制方法,需要的可以收藏一下2023-05-05gRPC的發(fā)布訂閱模式及REST接口和超時(shí)控制
這篇文章主要為大家介紹了gRPC的發(fā)布訂閱模式及REST接口和超時(shí)控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06golang抓取網(wǎng)頁(yè)并分析頁(yè)面包含的鏈接方法
今天小編就為大家分享一篇golang抓取網(wǎng)頁(yè)并分析頁(yè)面包含的鏈接方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Golang新提案:panic?能不能加個(gè)?PanicError?
這篇文章主要為大家介紹了Golang的新提案關(guān)于panic能不能加個(gè)PanicError的問(wèn)題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12