nashcft's blog

時々何か書く。

Dependabot: 設定の備忘録

最近 dependabot でライブラリ更新を自動化している repository の dependabot.yml を手入れしていたのでそのメモ。

Gradle: settings.gradle で依存取得先を設定している場合に更新検知できないライブラリがある

2024-02-19 追記

以下の修正によって dependencyResulutionManagement の設定は読まれるようになった:

github.com

追記おわり

Project の依存解決の設定を settings.gradledependencyResolutionManagementpluginManagement で記述している場合、一部のライブラリの更新検知ができないということが起こる。 Log を見てみると maven-metadata.xml の取得先として Maven Central (plugin の場合はこれに加えて Gradle plugin portal) しか参照しておらず、たとえば AndroidJetpack 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 のコードを何となく眺めた感じでもそうっぽい気がする。根拠にしてるのは以下のファイル:

github.com

これに関する issue はすでに報告されている:

github.com

以下の issue のコメントに workaround が示されており、 private package へアクセスするための設定に使われる registries にアクセスしたい maven repository について追記してそれを参照するようにすれば metadata の取得先に追加される。

github.com

docs.github.com

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 に対して設定を書く必要がある。

参考:

qiita.com

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 はあるにはあるけど何年も動いてないのであまり期待できなそう:

github.com

おわりに

セットアップまで含めて Renovate 使うのとどっちが楽なんだろ