先日リリースされた Go 1.20 をGitHub Actionsで使いたい場合、以下のような記述をすると Go 1.2 が入ってしまいます。
- uses: actions/setup-go@v3 with: go-version: 1.20
この件は golangci-lint の Go 1.20 対応 Pull Request でもはまっていたのをみかけました。
github.com
対処法としては以下のように文字列として指定するとちゃんと 1.20 が入ります。
- uses: actions/setup-go@v3 with: - go-version: 1.20 + go-version: '1.20'
もしくは、 go-version-file
を指定してファイルからバージョンをパースする形にした場合もちゃんと 1.20 が入るっぽいです。
- uses: actions/setup-go@v3 with: - go-version: 1.20 + go-version-file: 'go.mod'
// go.mod ファイルの例 module example.com/hello go 1.20
go-version-file
については以前もブログで紹介しました、他の言語の setup 系でも対応していることが多いです。なおバージョンをパースする実装はそれぞれのActionで書かれていそうなのでもしかしたら挙動にばらつきがあるかもしれません。
blog.stenyan.jp
そもそもこの挙動の原因はどこにあるのか
例えば actions/setup-go
にPull Requestを出してこの現象を回避できればみんな助かりそうと思いましたが、どうやら他の言語でも同じことは起きていそうで、Actionsのyamlはこういう挙動になっているということがわかりました。
issue が actions/runner
に立っていますが、2023/2現在まだOpenな状態です。
github.com
コメントのやり取りを見る限り、runnerのYAMLをパースする処理で integer も float もまとめて numberToken
としてパースしてしまっているためか最終的に区別がつかなくなっているのではないかとのこと。
github.com
同じ人がそろそろ治せると良さそうだねと先週コメントしていたのでもしかしたらそのうち治るかもしれませんね。
github.com
治るまでの間はこういうfloatっぽい数値は文字列として指定する、みたいに意識して書く必要がありそうです。