2023年8月31日木曜日

circleCIのgitでsafe.directoryが必要になっていた

 

# 概要

* 自分で触ってないコードがローカル環境のrubocopチェックで止まっていた
* rubocopする前にgit diffをしているが、失敗しているように見える

```
echo "${BASE_REMOTE:=origin}"
echo "${TARGET_BRANCH:=master}"

diff_files=`git --no-pager diff $BASE_REMOTE/$TARGET_BRANCH...HEAD --name-only --diff-filter=MAR`
```

# 調査

* エラーメッセージで調べると、safe.directoryオプションが必要になったらしい

```
detected dubious ownership in repositor
```

[[git]操作時にdetected dubious ownership in repositoryが発生するようになった](https://qiita.com/nekotouma0114/items/5206607584ccef5fb6b5)

* Git 2.35.2以降に入った機能らしい

https://zenn.dev/gorohash/articles/72c9c84778194f
```
CVE-2022-24765という脆弱性に対応するためGit 2.35.2以降に入った機能です。このバージョン以降、Gitは実行ユーザーが所有権を持たない.gitディレクトリをデフォルトで読み込まないようになりました。この動作に例外を設けるのがsafe.directoryという設定項目です。
```

* gitのバージョンを上げた覚えはないが、rubyバージョンアップ対応がマージされたタイミングから発生しているように見える

## rubyバージョンアップ対応前後のdocker imageを確認

### ruby3.0.0

* debian/git 1:2.20.1-2+deb10u3
https://hub.docker.com/layers/library/ruby/3.0.0/images/sha256-df83fc949ee94198553d0a1ee6796e25965915e09d0238e32ae610f1d0923195?context=explore

### ruby3.1.4

* debian/git 1:2.39.2-1.1
https://hub.docker.com/layers/library/ruby/3.1.4/images/sha256-a9256495e9da29f16b290573346d041b579a0ec7d36178425e8b2c3998e7adc2?context=explore

# 結論

* rubyバージョンアップの際にdocker imageが変わったことで、gitのバージョンも上がっていた
* 以下のようにsafe.directoryを設定する
```
git config --global --add safe.directory /app
```

# 参考

[CircleCIでのUbuntu14.04サポート終了対応](https://www.pivotaltracker.com/story/show/181603739)