GoReleaser の設定のいくつかが DEPRECATED になっていた
私は GoReleaser を使って GitHub にあるリポジトリに対してビルドとデプロイを行っているのだが[1],ビルド用の設定ファイル .goreleaser.yml については最初の頃に作ったのを(ほとんど設定を変えずに)使いまわしていた。で, Go 1.20 が出たのをきっかけに「RISC-V 用のバイナリも追加しよう」と色気を出したのだが,実際に手元で動かしてみたら,いくつかの設定が DEPRECATED になってることに気がついた。
この記事では非推奨になる(なった)設定のいくつかを覚え書きの形で残しておく。なお .goreleaser.yml ファイルの書きかた等についてはここでは言及しない。適当にググったら出てくると思う。 ChatGPT が吐くポエムに騙されないように(笑)
--rm-dist オプションは非推奨
手元の環境で,たとえば
$ goreleaser release --snapshot --skip-publish --rm-dist
などと起動すると,いきなり
DEPRECATED: --rm-dist was deprecated in favor of --clean, check https://goreleaser.com/deprecations#-rm-dist for more details
と叱られる。おぅふ orz
指示された Web ページを見ると
--rm-dist
has been deprecated in favor of--clean
.
(via “Deprecation notices - GoReleaser”)
と書かれていた。指示のとおりコマンドラインを
$ goreleaser release --snapshot --skip-publish --clean
などとすればOK。 GitHub Action の設定も変更する必要があるので,お忘れなく。
rlcp を有効にしておく
さらにワーニングは続く。
DEPRECATED: `archives.rlcp` will be the default soon, check https://goreleaser.com/deprecations#archivesrlcp for more info
これも指示された Web ページを見ると以下のように書かれていた。
This is not so much a deprecation property (yet), as it is a default behavior change.
The usage of relative longest common path (
rlcp
) on the destination side of archive files will be enabled by default by June 2023. Then, this option will be deprecated, and you will have another 6 months (until December 2023) to remove it.
(via “Deprecation notices - GoReleaser”)
とりあえず .goreleaser.yml ファイルで
archives:
-
rlcp: true
と設定しておけば今までどおりの動作でワーニングは出なくなるし,鼻の先はOKのようだ。問題の先送りとも言う(笑)
名前の置き換えはテンプレートで行う
つぎ行ってみよう。
DEPRECATED: `archives.replacements` should not be used anymore, check https://goreleaser.com/deprecations#archivesreplacements for more info
たとえば出力するアーカイブ・ファイル名のテンプレートを
archives:
- rlcp: true
format: tar.gz
format_overrides:
- goos: windows
format: zip
name_template: '{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
replacements:
darwin: Darwin
linux: Linux
windows: Windows
freebsd: FreeBSD
386: 32bit
amd64: 64bit
arm64: ARM64
riscv64: RISCV
などと定義していたとする。これらのうち replacements
の項目が DEPRECATED だと言っているようだ[2]。じゃあ,どうやって文字列を置き換えるかというと Go のテンプレート機能[3] を使えってことらしい。
Go のテンプレート機能を使って上の記述を書き直すと
archives:
- rlcp: true
format: tar.gz
format_overrides:
- goos: windows
format: zip
name_template: >-
{{ .ProjectName }}_
{{- .Version }}_
{{- if eq .Os "freebsd" }}FreeBSD
{{- else }}{{ title .Os }}{{ end }}_
{{- if eq .Arch "amd64" }}64bit
{{- else if eq .Arch "386" }}32bit
{{- else if eq .Arch "arm64" }}ARM64
{{- else if eq .Arch "riscv64" }}RISCV
{{- else }}{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}{{ end }}
という感じになる。この設定の下に GoReleaser で処理すると
• archives
• creating archive=dist/product_1.0.0_Windows_armv6.zip
• creating archive=dist/product_1.0.0_Linux_64bit.tar.gz
• creating archive=dist/product_1.0.0_FreeBSD_armv6.tar.gz
• creating archive=dist/product_1.0.0_Darwin_ARM64.tar.gz
• creating archive=dist/product_1.0.0_Darwin_64bit.tar.gz
• creating archive=dist/product_1.0.0_Windows_ARM64.zip
• creating archive=dist/product_1.0.0_Linux_32bit.tar.gz
• creating archive=dist/product_1.0.0_Linux_armv6.tar.gz
• creating archive=dist/product_1.0.0_Linux_ARM64.tar.gz
• creating archive=dist/product_1.0.0_Windows_32bit.zip
• creating archive=dist/product_1.0.0_Windows_64bit.zip
• creating archive=dist/product_1.0.0_Linux_RISCV.tar.gz
• creating archive=dist/product_1.0.0_FreeBSD_64bit.tar.gz
• creating archive=dist/product_1.0.0_FreeBSD_ARM64.tar.gz
• creating archive=dist/product_1.0.0_FreeBSD_32bit.tar.gz
という感じにファイルが生成された。よーし,うむうむ,よーし。
Discussion