4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【検証】Renovateをオプションでカスタマイズして少し動かしてみる

Posted at

はじめに

こんにちは。
前回の記事Renovate導入の続きになります。
今回はオプションをいくつか設定してRenovateの挙動をカスタマイズして試してみます。

Renovateの各種オプション

Renovateはオプションを設定することでより便利に利用することができます。
設定オプションには大きく、以下があります。

例えば、GitHubアプリとして公開されているRenovateを最初にリポジトリに紐づけた際にRenovateが自動で作成するプルリクエストに含まれる以下JSONファイル。

renovate.json
{
  "extends": [
    "config:base"
  ]
}

config:baseという、プリセットが使用されています。こう書くことで、下記設定したことと同義です。

{
  "extends": [
    ":dependencyDashboard",
    ":semanticPrefixFixDepsChoreOthers",
    ":ignoreModulesAndTests",
    ":autodetectPinVersions",
    ":prHourlyLimit2",
    ":prConcurrentLimit10",
    "group:monorepos",
    "group:recommended",
    "workarounds:all"
  ]
}

それぞれの設定はここ に詳しく載っています。
個々に設定を追加していくのもありですが、入れたい設定がまとまっているプリセットがあれば
それを使った方が簡潔に記述できます。

セルフホスト環境は特に持っていないので、
以降ではリポジトリ、プリセットの設定をいくつか試してみたいと思います。

(今回試す設定)

  • リポジトリ
    • assignees -> Renovateが作成したプルリクエストを自動でアサインする設定
    • reviewers -> Renovateが作成したプルリクエストにレビュワーを自動でアサインする設定
    • automerge -> Renovateが作成したプルリクエストを自動マージする設定
    • packageRules -> パッケージ単位にRenovateを設定(特定のパッケージは監視対象外とするなど)
    • schedule -> 日次、週次など、Renovateの実行タイミングを制御する設定
  • プリセット
    • group:allNonMajor -> マイナー・パッチバージョンアップデートを一つのプルリクエストにまとめる設定

【検証】assignees・reviewers

assigneesを設定することで、Renovateがプルリクエストを作成した際のアサイン先を設定できます。

renovate.json
{
  "extends": [
    "config:base"
  ],
  "assignees": ["@mytysoldier"]
}
package.json抜粋
"devDependencies": {
    "request": "2.88.0"
  },

上記をリポジトリにプッシュします。

作成されたプルリクエストを見ると、assigneeが設定されていることがわかります。
スクリーンショット 2022-04-11 8.37.11.png

reviewersも試してみます。Renovateがプルリクエストを作成した際に自動でレビュワーを設定できます。

renovate.json
{
  "extends": [
    "config:base"
  ],
  "reviewers": ["@mytysoldier"]
}
package.json抜粋
"devDependencies": {
    "request": "2.88.0"
  },

上記をリポジトリにプッシュします。

スクリーンショット 2022-04-11 8.43.21.png

プルリクエスト作られない。。なんで?

スクリーンショット 2022-04-11 8.44.09.png

「Dependency Dashboard」をみたら、明示的にチェックボックスをチェックしないといけないみたいなので、チェック入れてみます。(assigneesの検証で試したのと同内容の修正だったからかな)

スクリーンショット 2022-04-11 8.46.29.png

今度はプルリクエストが作成され、レビュワーも設定されています。

【検証】automerge

automergeを検証してみます。こちらは、Renovateがプルリクエストを作成した際、指定条件に該当するものはそのまま自動的にマージするような設定です。
注意点として、automergeはプライベートリポジトリだとうまく動作しないようです。
なので、今回はパブリックリポジトリで検証します。

renovate.json
{
  "extends": [
    "config:base",
    ":skipStatusChecks"
  ],
  "packageRules": [
    {
      "matchDepTypes": ["devDependencies"],
      "automerge": true
    }
  ]
}
package.json抜粋
"devDependencies": {
    "request": "2.88.0"
  },

上記では、devDependenciesの変更をautomergeの対象として設定しています。
これでautomergeが動くかといえば実はそうではなく、何らかのテストが通ったことが確認できたら(テスト成功したら)、Renovateによるautomergeが動く、ということのようです。
今回はautomergeの検証用に、skipStatusChecksというオプションを使用しています。
このオプションを設定することで、テストの実行結果の確認はスキップされ、automergeが行われます。

上記をリポジトリにプッシュします。

スクリーンショット 2022-04-15 9.14.32.png

Renovateによる変更が自動マージされ、requestライブラリが最新版(2.88.2)に更新されています。

【検証】packageRules

パッケージ名を指定して、指定パッケージの更新ルールなどを設定することができます。
例)

renovate.json
{
  "extends": [
    "config:base"
  ],
  "packageRules": [
    {
      "matchPackagePatterns": ["org.junit.jupiter"]
    }
  ]
}
build.gradle抜粋
dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1"
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.9'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.9'
    testImplementation 'org.junit.jupiter:junit-jupiter:5.6.9'
    testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.1'
}

上記のように設定することで、org.junit.jupiterパッケージの更新は1つのプルリクエストにまとめる、といったことができます。
上記をリポジトリにプッシュします。

スクリーンショット 2022-04-12 21.59.47.png

上記の感じに、複数のライブラリのバージョンアップデートをまとめて、1つのプルリクエストで作成されます。

【検証】schedule

scheduleを設定することで、Renovateによる監視の実行タイミングを制御できます。
before 3am on Mondayや、before 2amといった形に指定できます。
なお、Schedule Presets を使用することもできます。
Schedule Presetsを使った場合、schedule:earlyMondaysschedule:daily といった形で設定できます。
意味はそれぞれ、さきほどのbefore 3am on Mondaybefore 2amと同義です。

ちなみに、いままではscheduleは特に設定せずに動かしていました。
その場合は、リポジトリに変更がプッシュされる都度、Renovateのチェックが走ります。

renovate.json
{
  "extends": [
    "config:base"
  ],
  "schedule": "before 10pm"
}
package.json抜粋
"devDependencies": {
    "request": "2.88.0"
  }

上記をリポジトリにプッシュします。

スクリーンショット 2022-04-13 21.44.30.png

プルリクエストが作成されます。

【検証】group:allNonMajor

group:allNonMajorは、セマンティックバージョンニングでいう、x.y.zのxにあたるメジャー以外のバージョン更新は、一つのプルリクエストにまとめる設定になります。

renovate.json
{
  "extends": [
    "config:base",
    "group:allNonMajor"
  ]
}
build.gradle抜粋
dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0"
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.0'
    testImplementation 'org.junit.jupiter:junit-jupiter:5.7.2'
    testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:0.6.1'
}
package.json抜粋
"devDependencies": {
    "request": "2.88.0"
  }

上記をリポジトリにプッシュします。

スクリーンショット 2022-04-13 21.55.32.png

プルリクエストが2つ作られ、

スクリーンショット 2022-04-13 21.56.15.png

all non-majorの方は1つのプルリクエストに変更がまとめられ、

スクリーンショット 2022-04-13 21.58.28.png

メジャーバージョン更新は別プルリクエストで作成されます。

終わりに

ここまで、簡単にですがRenovateのいくつかのオプションを試してみました。
ここで試したのはほんの一部で、さらにもっと多くのオプションがあるので、
興味ある方は、公式サイト を見てみてください。
読んでいただきありがとうございました!

参考情報

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?