標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

AppVeyor で nyagos がビルドできなくなっていたのを直した

nyagos は Windows7, 8.1 もまだサポートしているので、ビルドの要件は Go 1.20.14 だが、AppVeyor ではデフォルトの Go でビルドするようにしていた。

だが、 go fmt の最後で次のようなエラーになるようになってしまった。

go: downloading github.com/Microsoft/go-winio v0.6.2
go: downloading github.com/rivo/uniseg v0.4.7
go: updates to go.mod needed; to update it:
    go mod tidy
mingw32-make: *** [Makefile:31: snapshot] Error 1

ローカルでも make GO=go.exe で実行すると再現するのだが、この時は気付かず、Go を 1.20.14 を指定すれば直るだろうと、Goの参照先を 1.20 へ変更してみた。

--- a/appveyor.yml
+++ b/appveyor.yml
@@ -31,7 +31,7 @@
   #- appveyor DownloadFile https://dl.google.com/go/go1.12.windows-386.zip
   #- 7z x go1.12.windows-386.zip -oC:\ >nul
   - set "INSTALLDIR=%APPVEYOR_BUILD_FOLDER%\%DEST_DIR%\%PLATFORM%"
-  - set "PATH=C:\msys64\mingw64\bin;C:\go\bin;%PATH%"
+  - set "PATH=C:\msys64\mingw64\bin;C:\go120\bin;%PATH%"
   - set "GOARCH=%PLATFORM:i386=386%"
   - mkdir "%INSTALLDIR%" > nul 2>&1

が、今度は go build の方で妙なエラーが出る。なんで、go1.21.8 のライブラリが使われてるんだ?

go: downloading github.com/rivo/uniseg v0.4.7
set "CGO_ENABLED=0" && go build -ldflags "-s -w -X main.version=4.4.15_1-46-g2ef328ec"
# internal/unsafeheader
compile: version "go1.21.8" does not match go tool version "go1.20.14"
# internal/goarch
compile: version "go1.21.8" does not match go tool version "go1.20.14"
# internal/coverage/rtcov
    :以下、同じようなエラー

どうも、設定しなくてもよい GOROOT が設定されていて、それが go1.21.8 の方へ向いているように思われた。次のように appveyor.yml にて明示的に GOROOT を go120 を指すようにしたところ、エラーは解消した。

--- a/appveyor.yml
+++ b/appveyor.yml
@@ -22,6 +22,7 @@
   global:
     dest_dir: bin
     gopath: C:\Users\appveyor\go
+    goroot: C:\go120
   matrix:
     - platform: i386
     - platform: amd64

なお、最初のエラーメッセージにあるとおり、go mod tidy を実行することでも直るようだ。これを実行すると、go.mod に toolchain 文が追記される。

--- a/go.mod
+++ b/go.mod
@@ -1,7 +1,9 @@
 module github.com/nyaosorg/nyagos

-go 1.19
+go 1.21

+toolchain go1.22.3
+
 require (
        github.com/atotto/clipboard v0.1.4
        github.com/dustin/go-humanize v1.0.1

しかし、5月2日までは問題なくビルドできていたのになぁ。その後のこっちの修正はドキュメントしかなかったし。

AppVeyor側で何があったんだろうと思って、Updateを見たが、使っている Visual Studio 2019 ベースのイメージが更新されたのは4月4日で、確かに Go1.22 初登場っぽいが、ちょっと時期が早い。うーむ、わからん。