haskell-jp / atcoder-lang-updates #8

すみません, containers を最新版に更新すると installed ghc-heap-9.4.4 とconflict して Hackage上から落としてくるのですが,Hackage上には ghc-heap-9.4.1ghc-heap-9.6.1 など x.y.1 しかないため containers をアップデートしながら ghc-heap-9.4.4 をインストールすることは不可能とわかりました.「使えない」状態でインストールされるかどうか,も上手に検証できないため, ghc-heap は排除します.
license report は 取り敢えず cabal v2-freeze だけやった Mac 上の環境で cabal-plan license-report を走らせて書いてきました.
なんとかfreeze 前に手元環境で Exposed modules の imports を全部チェックできました! 生成したチェック用のソースは: https://gist.github.com/gksato/0993d739f2ac6e81100f41815a27a978#file-3-imports-hs
コードテストばっかり投げてて実際の提出をサボっていて,数日前にやっと
https://atcoder.jp/contests/language-test-202301/submissions/40808418
を投げたのですが,そしたら

コンパイルエラー
Warning: The package list for '' is 16 days old.
Run 'cabal update' to get the latest list of available packages.
Warning: The package list for '' is 16 days old.
Run 'cabal update' to get the latest list of available packages.
Warning: The directory
/home/runner/.cabal/store/ghc-9.4.4/incoming/new-2/home/runner/.cabal/store/ghc-9.4.4/submission-0.1.0.0-e-main-65f18b2df59be1b1a37cc9cf6a1a6fef2ceea8c33303cd81c9373b649724db38/bin
is not in the system search path.

という警告が出てしまいました.

その上,最後の, Warning: The directory 云々の警告は未だ原因調査できておらず,どうやったら除去できるかもよくわかりません(あとで questions にも投げようかと思います).

しかし,今回こちらで問題にしたいのは Warning: The package list for 云々の方です.これは見慣れた警告で,なんとかなりそうです.言語/ライブラリ追加は終了しているものの,コマンド変更は未だ受け付けられていますので,コンパイル・インストールコマンドを修正して解決してしまって良さそうです.この警告が出される条件を cabal-install のコードを追って確かめれば,ad-hoc には,コンパイルコマンド

$ source ~/.ghcup/env && cd /judge/submission && cabal v2-install --installdir=.. --install-method=copy --offline

を実行する直前に,package repository cacheのtarのmodification dateを更新しておけばいいとわかります:

$ touch ~/.cabal/packages/hackage.haskell.org/01-index.tar

しかし,この方法はあまりに ad-hoc で implementation-dependent なので,この方法を実行していいかわからず,相談がしたかったのでこちらに書き込ませていただきました.

なお,このような方法に頼らなくても, cabal --ignore-expiry v2-install でコンパイルするか, cabal.projectignore-expiry: True を足すかすれば良いかと思ったのですが, ignore-expirycabal v2-update の時に Hackage の署名の期限を検証しないことを表すもので,この問題には無関係のようですね(勘違いして cabal の github に issue を投げてしまったので,恥ずかしい思いをしました).
よくわからないんですけど、 Warning: The package list for '' is 16 days old. については cabal update をどこかで実行すればよいように見えるんですが、ダメなんですかね?
あと、
Warning: The directory
/home/runner/.cabal/store/ghc-9.4.4/incoming/new-2/home/runner/.cabal/store/ghc-9.4.4/submission-0.1.0.0-e-main-65f18b2df59be1b1a37cc9cf6a1a6fef2ceea8c33303cd81c9373b649724db38/bin
is not in the system search path.

こちらは件のパスが PATH に入っていない、というものなので、可能なら無視したほうがいいと思います。
cabal v2-update はコンパイル時に実行しようとするとインターネット接続を仮定してしまうので,だめです.後半は無視した方が良いのはわかっているのですが,そのパス的にどうにもバグくさいのでどうしたら良いかがよくわからないという状況です.
ありそうなのは, cabal v2-build が これらのWarning を出さないように見えるので,

cabal v2-build && cabal v2-install --verbose=0 --installdir=.. --install-method=copy --offline

でやっちゃう,というのは手としてあるかもしれません.
... Replies ...
ただ,手元環境とサーバ環境で表示される警告が違うので,あんまり確信を持って修正できないのが正直なところなんですよね….
あるいは,さっきのコマンドだと2回コンパイルしてしまうみたいなので,

cabal v2-build && cabal v2-exec -- bash -c 'cp $(which main) ../main'

でもいいかもしれないですね.
意見募集: とくに反対がなければ,コンパイルコマンドを

cd /judge/submission
source ~/.ghcup/env
cabal v2-build --offline && cabal v2-exec -- bash -c 'cp $(which main) ../'

に変更しようと思いますが,どうでしょう?
... Replies ...
cabal v2-install --verbose=0 ではだめでしたか?
... Replies ...
なるほど.ご指摘を受けて修正するなら,

cd /judge/submission
source ~/.ghcup/env
cabal v2-build --offline && cp $(cabal list-bin main) ../

でしょうか.
cabal v2-installの挙動はちょっと調べてもよくわからないところがあるので,v2-installは使わずv2-buildしてバイナリ抜き出す方針が良さそうですね
では,改善もされたことですし,明日まで待って特に反対がなければ

cd /judge/submission
source ~/.ghcup/env
cabal v2-build --offline && cp $(cabal list-bin main) ../

に提案シートを書き換えた上で feedback に追加freezeの要望を出します.
... Replies ...
報告を忘れていましたが,昨日未明(おとといの深夜)に記入してきました.
提案ページの編集
フィードバックページの編集
Language Test Contestが4/11版に更新されたようです
https://atcoder.jp/contests/language-test-202301