LoginSignup
3
2

【CircleCI】"Only build pull requests" のオーバーライド機能を試してみた

Posted at

CircleCIで、「デフォルトブランチ以外の特定のブランチにマージしたらビルドを走らせたいなぁ」「ただ Only build pull requests は ON のままにしたいなぁ」と思っていたところ、ちょっと前に オーバーライド機能 がリリースされていたのを知ったので試してみた記事となります。

Only build pull requests とは

ビルドの実行を Pull Request の作成・更新時のみに変更してくれるという設定です。

Project Settings > Advanced Settings から設定が可能です。
スクリーンショット 2023-10-11 午前4.53.10.png

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_flagspr-only-branch-overrides のオーバーライド後の設定を記載します。
上記の例では release ブランチでもビルドを有効にするように設定を記載しています。(ブランチの指定は正規表現も可能なようです。)

実行が成功すると "" が返ってきます。

3. オーバーライド後の設定を取得

再度、現在の設定を取得すると pr-only-branch-overridesrelease が追加されていることが確認できました。

{
  ...
  "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でビルドの実行が行われることも確認できました。 :rocket:

まとめ

  • 2023年4月18日にリリースされた "Only build pull requests" のオーバーライド機能を試してみた。
  • 簡単に設定できるし、ブランチ指定も正規表現を使って柔軟にできそうなので、使えるところでは使っていきたい。
  1. https://circleci.canny.io/cloud-feature-requests/p/allow-branch-whitelist-to-override-only-build-pull-requests に詳しい経緯があるようです。

3
2
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
3
2