如何使用 Go Release Binary GitHub 动作
How to use Go Release Binary GitHub Action
有人能让 Go Release Binary GitHub Action 工作吗?应该
Automate publishing Go build artifacts for GitHub releases through GitHub Actions
readme 看起来很简单,但我想尽了所有的想象力来让它工作但无济于事。在其问题轨道中提出了类似的问题,但没有得到答案。
有人帮忙。
顺便说一句,在寻找答案时,我偶然发现了 this commit logs,这本书 interesting/amusing 值得一读。也就是说,让它工作似乎是一场艰苦的战斗,但作者最终放弃了(his/her 最新 commits/tags 没有任何发布)
结论:
原来我的项目没有 go mod
并且 Go Release 中有问题导致它无法工作。然后由 this and this.
修复
实际上我自己写了 release workflow 来生成 Go 二进制文件。
从我的角度来看,唯一不明显的步骤是:
- 我有一个发布说明生成步骤,其中包含自上次发布标记以来的非合并提交列表。
- 我为 GOOS 和 GOARCH 对使用矩阵构建,并在“获取 OS 和架构信息”步骤中进行一些 Bash 字符串操作。
softprops/action-gh-release
的好处在于,只要工作流 运行 是由推送到同一标签触发的,您就可以继续向同一版本添加工件。
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
name: Latest Release
defaults:
run:
shell: bash
jobs:
lint:
name: Lint files
runs-on: 'ubuntu-latest'
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: '1.16.3'
- name: golangci-lint
uses: golangci/golangci-lint-action@v2.5.2
with:
version: latest
test:
name: Run tests
runs-on: 'ubuntu-latest'
needs: lint
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: '1.16.3'
- run: go test -v -cover
release:
name: Create Release
runs-on: 'ubuntu-latest'
needs: test
strategy:
matrix:
# List of GOOS and GOARCH pairs from `go tool dist list`
goosarch:
- 'aix/ppc64'
# etc
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: actions/setup-go@v2
with:
go-version: '1.16.3'
- name: Get OS and arch info
run: |
GOOSARCH=${{matrix.goosarch}}
GOOS=${GOOSARCH%/*}
GOARCH=${GOOSARCH#*/}
BINARY_NAME=${{github.repository}}-$GOOS-$GOARCH
echo "BINARY_NAME=$BINARY_NAME" >> $GITHUB_ENV
echo "GOOS=$GOOS" >> $GITHUB_ENV
echo "GOARCH=$GOARCH" >> $GITHUB_ENV
- name: Build
run: |
go build -o "$BINARY_NAME" -v
- name: Release Notes
run:
git log $(git describe HEAD~ --tags --abbrev=0)..HEAD --pretty='format:* %h %s%n * %an <%ae>' --no-merges >> ".github/RELEASE-TEMPLATE.md"
- name: Release with Notes
uses: softprops/action-gh-release@v1
with:
body_path: ".github/RELEASE-TEMPLATE.md"
draft: true
files: ${{env.BINARY_NAME}}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
有人能让 Go Release Binary GitHub Action 工作吗?应该
Automate publishing Go build artifacts for GitHub releases through GitHub Actions
readme 看起来很简单,但我想尽了所有的想象力来让它工作但无济于事。在其问题轨道中提出了类似的问题,但没有得到答案。
有人帮忙。
顺便说一句,在寻找答案时,我偶然发现了 this commit logs,这本书 interesting/amusing 值得一读。也就是说,让它工作似乎是一场艰苦的战斗,但作者最终放弃了(his/her 最新 commits/tags 没有任何发布)
结论:
原来我的项目没有 go mod
并且 Go Release 中有问题导致它无法工作。然后由 this and this.
实际上我自己写了 release workflow 来生成 Go 二进制文件。
从我的角度来看,唯一不明显的步骤是:
- 我有一个发布说明生成步骤,其中包含自上次发布标记以来的非合并提交列表。
- 我为 GOOS 和 GOARCH 对使用矩阵构建,并在“获取 OS 和架构信息”步骤中进行一些 Bash 字符串操作。
softprops/action-gh-release
的好处在于,只要工作流 运行 是由推送到同一标签触发的,您就可以继续向同一版本添加工件。
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
name: Latest Release
defaults:
run:
shell: bash
jobs:
lint:
name: Lint files
runs-on: 'ubuntu-latest'
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: '1.16.3'
- name: golangci-lint
uses: golangci/golangci-lint-action@v2.5.2
with:
version: latest
test:
name: Run tests
runs-on: 'ubuntu-latest'
needs: lint
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: '1.16.3'
- run: go test -v -cover
release:
name: Create Release
runs-on: 'ubuntu-latest'
needs: test
strategy:
matrix:
# List of GOOS and GOARCH pairs from `go tool dist list`
goosarch:
- 'aix/ppc64'
# etc
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: actions/setup-go@v2
with:
go-version: '1.16.3'
- name: Get OS and arch info
run: |
GOOSARCH=${{matrix.goosarch}}
GOOS=${GOOSARCH%/*}
GOARCH=${GOOSARCH#*/}
BINARY_NAME=${{github.repository}}-$GOOS-$GOARCH
echo "BINARY_NAME=$BINARY_NAME" >> $GITHUB_ENV
echo "GOOS=$GOOS" >> $GITHUB_ENV
echo "GOARCH=$GOARCH" >> $GITHUB_ENV
- name: Build
run: |
go build -o "$BINARY_NAME" -v
- name: Release Notes
run:
git log $(git describe HEAD~ --tags --abbrev=0)..HEAD --pretty='format:* %h %s%n * %an <%ae>' --no-merges >> ".github/RELEASE-TEMPLATE.md"
- name: Release with Notes
uses: softprops/action-gh-release@v1
with:
body_path: ".github/RELEASE-TEMPLATE.md"
draft: true
files: ${{env.BINARY_NAME}}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}