CircleCI で Android の CI を行うときは 公式のブログ記事にもあるように、
たいてい謹製で用意されている circleci/android
Orb を使用すると思います。
ところで、この Orb にはバージョンが切られているわけですが、
その更新は Renovate を導入して自動化することで
忘れることもなくチェックの手間もなく楽にできます:
しかしながら、この Orb が指定する executor
のタグに関しては
デフォルトそのままでバージョンアップをしてくれないので、
少しだけ工夫して renovate に面倒をみてもらうことにします。
サンプル CircleCI config
サンプルに Android Orb を使った最小の config を用意しました:
version: 2.1
orbs:
android: circleci/android@2.0.3
jobs:
build:
executor:
name: android/android-docker
resource-class: small
tag: 2022.08.1
steps:
- checkout
workflows:
android-workflow:
jobs:
- build
ここの jobs.build.executor
が実行する executor で、その executor.tag
が executor のイメージのタグですね。
このタグの一覧は cimg/android
のページで確認することができます:
サンプルでは 2022.08.1
を指定していますが、書いている今は 2022.09.2
が出ていますから、既に最新ではなくなっています。
Renovate で検出可能にする
Renovate の config を用意してみます:
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"regexManagers": [
]
}
ここの regexManagers
に正規表現のパターンを入れることで、任意のパターンと特定のデータソースの更新というふうに紐づけて更新してもらうことを考えます。
今回の例で言うと 次のような正規表現で executor とそのタグを検出することにします:
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"regexManagers": [
{
"fileMatch": [
".circleci/config.yml"
],
"matchStrings": [
"executor:\\s+name:\\s*android/android-docker(\\s+resource-class:.+)?\\s+tag:\\s*(?<currentValue>[0-9.]+)"
],
}
]
}
config.yml
の executor
以下の並びなど書き方がプロジェクトによって違う場合は、合うように matchStrings` を調整するとよいでしょう。
正規表現のテストができるサービスを使ったりすると便利です。
(※ renovate.json
では \
を \\
とエスケープしていて、逆に regex101 では /
を \/
とエスケープしていることに注意しましょう)
Docker データソースの指定
次に、cimg/android
を参照していることからわかるように、もとより Docker イメージなので Docker Registry をバージョン情報のソースとして更新してもらいたいと思います:
データソースとして docker
を指定することで Renovate がよしなに面倒をみてくれるようになります:
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"regexManagers": [
{
"fileMatch": [
".circleci/config.yml"
],
"matchStrings": [
"executor:\\s+name:\\s*android/android-docker(\\s+resource-class:.+)?\\s+tag:\\s*(?<currentValue>[0-9.]+)"
],
"depNameTemplate": "cimg/android",
"datasourceTemplate": "docker",
"versioningTemplate": "docker"
}
]
}
さらに 2022.08.1-node
のようなバリアントイメージを無視して、本流のみを採用できるように packageRules.allowedVersion
も指定します:
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"regexManagers": [...省略...],
"packageRules": [
{
"matchDatasources": [
"docker"
],
"matchPackageNames": [
"cimg/android"
],
"allowedVersions": "/^[0-9]{4}\\.[0-9]{2}\\.[0-9]+$/"
}
]
}
これで Renovate config の記述ができました。
確認する
これで今回のパターンを検出できることを確認します。
サンプルのリポジトリをつくってみました:
Renovate Dashboard で結果をみてみると検出され…
Renovate が android-docker
のタグの更新 PR を作ってくれたのでよさそうですね:
以上です。よき自動化ライフを。