最近 dependabot でライブラリ更新を自動化している repository の dependabot.yml
を手入れしていたのでそのメモ。
Gradle: settings.gradle
で依存取得先を設定している場合に更新検知できないライブラリがある
2024-02-19 追記
以下の修正によって dependencyResulutionManagement
の設定は読まれるようになった:
追記おわり
Project の依存解決の設定を settings.gradle
の dependencyResolutionManagement
や pluginManagement
で記述している場合、一部のライブラリの更新検知ができないということが起こる。 Log を見てみると maven-metadata.xml
の取得先として Maven Central (plugin の場合はこれに加えて Gradle plugin portal) しか参照しておらず、たとえば Android の Jetpack library など Google Maven Repository に配置されているライブラリはバージョン情報の取得に失敗していることがわかる。
# e.g. AndroidX Core updater | YYYY/MM/DD hh:mm:ss INFO <job_xxxxx> Checking if androidx.core:core-ktx 1.12.0 needs updating proxy | YYYY/MM/DD hh:mm:ss [xxxx] GET https://repo.maven.apache.org:443/maven2/androidx/core/core-ktx/maven-metadata.xml proxy | YYYY/MM/DD hh:mm:ss [xxxx] 404 https://repo.maven.apache.org:443/maven2/androidx/core/core-ktx/maven-metadata.xml updater | YYYY/MM/DD hh:mm:ss INFO <job_xxxxx> Latest version is updater | YYYY/MM/DD hh:mm:ss INFO <job_xxxxx> Requirements to unlock update_not_possible updater | YYYY/MM/DD hh:mm:ss INFO <job_xxxxx> Requirements update strategy updater | YYYY/MM/DD hh:mm:ss INFO <job_xxxxx> No update possible for androidx.core:core-ktx 1.12.0
build.gradle
で依存解決の設定を記述している場合は設定した repository が maven-metadata.xml
の取得先に追加されていて期待通りにバージョン情報を取得できているので参照先の取得のために settings.gradle
を読んでいないのだと思われる。 Dependabot のコードを何となく眺めた感じでもそうっぽい気がする。根拠にしてるのは以下のファイル:
これに関する issue はすでに報告されている:
以下の issue のコメントに workaround が示されており、 private package へアクセスするための設定に使われる registries
にアクセスしたい maven repository について追記してそれを参照するようにすれば metadata の取得先に追加される。
version: 2 # ↓を追加 registries: maven-google: type: maven-repository url: "https://dl.google.com/dl/android/maven2/" # https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/dsl/RepositoryHandler.html#google-- updates: - package-ecosystem: "gradle" directory: "/" # ↓を追加 registries: - maven-google # ...
設定を追記した後の実行ログは以下のような感じ。 maven-metadata.xml
の取得時のアクセス先に https://dl.google.com:443/dl/android/maven2/
が増えて、そちらで取得成功しておりバージョン情報の評価ができていることがわかる。
updater | YYYY/MM/DD hh:mm:ss INFO <job_xxxxx> Checking if androidx.core:core-ktx 1.12.0 needs updating proxy | YYYY/MM/DD hh:mm:ss [xxxx] GET https://repo.maven.apache.org:443/maven2/androidx/core/core-ktx/maven-metadata.xml proxy | YYYY/MM/DD hh:mm:ss [xxxx] 404 https://repo.maven.apache.org:443/maven2/androidx/core/core-ktx/maven-metadata.xml proxy | YYYY/MM/DD hh:mm:ss [xxxx] GET https://dl.google.com:443/dl/android/maven2/androidx/core/core-ktx/maven-metadata.xml proxy | YYYY/MM/DD hh:mm:ss [xxxx] 200 https://dl.google.com:443/dl/android/maven2/androidx/core/core-ktx/maven-metadata.xml updater | YYYY/MM/DD hh:mm:ss INFO <job_xxxxx> Latest version is 1.12.0 updater | YYYY/MM/DD hh:mm:ss INFO <job_xxxxx> No update needed for androidx.core:core-ktx 1.12.0
GitHub Actions: repository local な composite action 内で使用している action の更新検知をしたい
Repository 内で composite action を定義している場合、その中で使われている action の更新を検知するには /
で設定しているのとは別にそれぞれの composite action に対して設定を書く必要がある。
参考:
version: 2 updates: - package-ecosystem: "github-actions" directory: "/" # これは .github/workflows/ 以下の yaml が対象になる # ... - package-ecosystem: "github-actions" directory: "/.github/actions/my-action1" # ... - package-ecosystem: "github-actions" directory: "/.github/actions/my-action2" # ...
directory
の指定にワイルドカードを使えるようにする feature request はあるにはあるけど何年も動いてないのであまり期待できなそう:
おわりに
セットアップまで含めて Renovate 使うのとどっちが楽なんだろ