はじめに
先日CircleCIにようやく入門して、いろいろ設定を書いていたのですが、どうにも filters
で branch指定がうまくいかない。なんでかなぁ、と思っていたらYAMLの書き方が悪かった(CircleCIのValidationエラーにもならない)という話でした。
なかなか不毛で気が付きにくい感じがあるので、ちょっと書き残しておきます。
本題
以下の2つの filters
の位置をよく見てもらえれば全てです。
workflows:
version: 2
my-awesome-task:
jobs:
- hello-wrong:
filters:
branches:
only: master
- hello-correct:
filters:
branches:
only: development
上記をYAMLパーサーがどういう解釈をするかというと、以下のようなJSONになります。
{
"workflows": {
"version": 2,
"my-awesome-task": {
"jobs": [
{
"hello-wrong": null,
"filters": {
"branches": {
"only": "master"
}
}
},
{
"hello-correct": {
"filters": {
"branches": {
"only": "development"
}
}
}
}
]
}
}
}
1つめの filters
は hello-wrong
の子要素にならないんですね。
hello-wrong
の兄弟の要素になって、hello-wrong
Keyの Valueは null
になってます。
確かに、こういう意味を表したいときはあって、それならこう書くことになるのは自然で、言われてみれば納得なんですが、「私はそんなつもりで書いたんじゃない(涙)」という気分でした。
さいごに
CircleCIは間違ったKeyを指定するとValidatorが教えてくれることが多かったので、書式はあっているものと思い込んでいました(書いている内容が悪いと思っていた)。
JSONは設定を書くには野暮ったいですが、こういう間違いは起こりにくいですね。