最終更新日:
goreleaser を使って GitHub Actions で自動でリリースしたい。
GitHub Actions のドキュメント
goreleaser のドキュメント
目次
ディレクトリ構成
.
├── .github
│ └── workflows
│ ├── go.yml
│ └── release.yml
├── .goreleaser.yaml
├── cmd
│ └── example-cli
│ └── main.go
├── example.go
├── go.mod
├── LICENSE
└── README.md
.goreleaser.yaml
goreleaser init すれば .goreleaser.yaml が作成されるのでドキュメントを見ながら適宜書き換える。
version: 2
before:
hooks:
- go mod tidy
builds:
- main: ./cmd/example-cli/
binary: example-cli
ldflags:
- -s -w
- -X main.Name={{.ProjectName}}
- -X main.Version={{.Version}}
env:
- GO111MODULE=on
- CGO_ENABLED=0
goos:
- linux
- windows
- darwin
archives:
- format: tar.gz
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 }}
format_overrides:
- goos: windows
format: zip
files:
- LICENSE
checksum:
name_template: "checksums.txt"
algorithm: sha256
changelog:
sort: asc
filters:
exclude:
- "^docs:"
- "^test:"
.github/workflows/release.yml
以前のバージョンで使ってた release –rm-dist は release –clean に置き換える。 テストが通った場合にのみリリースを作成したいので、バージョンを示すタグが push された場合にリリースが作成されるように “v[0-9]+*” と記述してある。
name: Release
on:
push:
tags:
- "v[0-9]+*"
jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: 1.22.x
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: "~> v2"
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
goreleaser ローカルでのビルド手順
ローカルにインストールしている場合は以下の手順でビルドできる。
- .goreleaser.yaml ファイルの生成 (.gitignore に dist/ が追記される)
$ goreleaser init
- YAMLファイルの整合性/構文チェック
$ goreleaser check
• checking path=.goreleaser.yaml
• 1 configuration file(s) validated
• thanks for using goreleaser!
- ローカルでビルドする
$ goreleaser
403 Resource not accessible by integration エラーが出る場合の対処法
error=scm releases: failed to publish artifacts: could not release: POST: 403 Resource not accessible by integration []
リポジトリの設定から Settings -> Actions -> General -> Workflow permissions の Read and write permissions にチェックを入れる。
Workflow permissions
Choose the default permissions granted to the GITHUB_TOKEN when running workflows in this repository. You can specify more granular permissions in the workflow using YAML. Learn more about managing permissions.
● Read and write permissions
Workflows have read and write permissions in the repository for all scopes.
○ Read repository contents and packages permissions
Workflows have read permissions in the repository for the contents and packages scopes only.
これに限らずワークフロー/アクションズで
403: Resource not accessible by integration
のエラーメッセージが出る場合は上記の権限を与える必要がある。
コメント
コメントを投稿