CircleCIで、「デフォルトブランチ以外の特定のブランチにマージしたらビルドを走らせたいなぁ」「ただ Only build pull requests は ON のままにしたいなぁ」と思っていたところ、ちょっと前に オーバーライド機能 がリリースされていたのを知ったので試してみた記事となります。
Only build pull requests とは
ビルドの実行を Pull Request の作成・更新時のみに変更してくれるという設定です。
Project Settings > Advanced Settings から設定が可能です。
ON にすることで無駄なビルド実行を抑えられたり、例えば Danger を使う場合には ON にすることが推奨されていたりします。
Only build pull requests を ON にした場合、ビルド実行の契機としては
- Pull Request 作成・更新時
- デフォルトブランチ更新時
- tag更新時
となりますが、デフォルトブランチ以外でも Pull Request を作成しなくともビルド実行をしたいケースがあるかなと思います。
オーバーライド機能
それと同じ要望があったかわかりませんが1、2023年4月18日にオーバーライド機能がリリースされたようです。
CircleCI APIを用いて設定する感じのようで、Webページ上でポチポチ設定するものではないようです。
試してみる。
さくっと使えそうだったので試してみました。
API 呼び出しにはトークンが必要なので、CircleCI にログインした状態で https://app.circleci.com/settings/user/tokens にアクセスし、トークンを発行する必要があります。
1. 現在の設定を取得
curl -X GET --header "Circle-Token: <token>"
--header "Accept: application/json"
--header "Content-Type: application/json"
'https://circleci.com/api/v1.1/project/<vcs-type>/<org-slug>/<project-slug>/settings'
-
<token>
には、取得したトークンを入れます。 -
<vcs-type>/<org-slug>/<project-slug>
には、例えば https://github.com/android/nowinandroid の場合は、gh/android/nowinandroid
が入ります。
実行すると色々と情報が記載された JSON が返ってきて、 feature_flags
というキーに pr-only-branch-overrides
があることがわかると思います。
{
...
"feature_flags": {
"setup-workflows": false,
"pr-only-branch-overrides": [
"master"
],
"write-settings-requires-admin": false,
"disable-ssh": false,
"set-github-status": true,
"ai-error-summarization": true,
"build-prs-only": true,
"forks-receive-secret-env-vars": false,
"build-fork-prs": false,
"autocancel-builds": true,
"oss": true
},
...
}
試したリポジトリでは、デフォルトブランチを master
にしていたので、pr-only-branch-overrides
には master
だけが入っている状態になっています。
2. 設定のオーバーライド
curl -X PUT --header "Circle-Token: <token>"
--header "Accept: application/json"
--header "Content-Type: application/json"
--data '{"feature_flags":{"pr-only-branch-overrides": "master, release"}}'
'https://circleci.com/api/v1.1/project/vcs-type/org-slug/project-slug/settings'
-
<token>
<vcs-type>/<org-slug>/<project-slug>
は取得時と同様です。
--data
には feature_flags
の pr-only-branch-overrides
のオーバーライド後の設定を記載します。
上記の例では release
ブランチでもビルドを有効にするように設定を記載しています。(ブランチの指定は正規表現も可能なようです。)
実行が成功すると ""
が返ってきます。
3. オーバーライド後の設定を取得
再度、現在の設定を取得すると pr-only-branch-overrides
に release
が追加されていることが確認できました。
{
...
"feature_flags": {
"setup-workflows": false,
"pr-only-branch-overrides": [
"release",
"master"
],
"write-settings-requires-admin": false,
"disable-ssh": false,
"set-github-status": true,
"ai-error-summarization": true,
"build-prs-only": true,
"forks-receive-secret-env-vars": false,
"build-fork-prs": false,
"autocancel-builds": true,
"oss": true
},
...
}
オーバーライド実行後に、試しに release
ブランチを Push しただけでも、CircleCIでビルドの実行が行われることも確認できました。
まとめ
- 2023年4月18日にリリースされた "Only build pull requests" のオーバーライド機能を試してみた。
- 簡単に設定できるし、ブランチ指定も正規表現を使って柔軟にできそうなので、使えるところでは使っていきたい。