トップ «前の日記(2022/04/18 (月) ) 最新 次の日記(2022/04/20 (水) )» 編集 RSS feed

HsbtDiary


2022/04/19 (火) [長年日記]

Asakusa.rb 第 657 回

今週も引き続き discord で開催。

https://asakusarb.esa.io/posts/1087

この日は最初から最後まで rubygems の cargo builder のテストコードが trivy などのスキャナに反応して「ん〜」となっている問題を解決していた。cargo update が動かなくてなんだこれは〜と言うのは別のエントリで。

cargo と git の組み合わせは難しい

先に書いたように rubygems の中にある Cargo.tomlcargo update で更新しようと思い色々調べていたのだけど

  • gitconfig で https で clone したくないので insteadOf を使って ssh に変換している
  • 上記の設定だと、cargo に内蔵されている git では ssh の認証を通すことができないので CARGO_NET_GIT_FETCH_WITH_CLI を設定している

と言う状態の時に git 参照を含む Cargo.tomlcargo update で更新できない状態になっていた。

具体的には cargo update を実行している途中で実行される以下のような git fetch が Git 2.36.0 では動かない。

git fetch --tags --force --update-head-ok 'https://github.com/rust-lang/rust-bindgen' '+refs/heads/:refs/remotes/origin/' '+HEAD:refs/remotes/origin/HEAD'

cargo 経由ということだけでもなく単独で実行しても動かないので、まあそういうものなのだろう。

結論としては以下のように ssh-agent を常に使うように設定した上で

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_ed25519

git cli を使う環境変数を無しにして cargo 内蔵の git をそのまま使うようにしたら全てが解決した。この辺、めちゃくちゃハマるのでもう少しいい感じになってほしい...。