はじめに
先日、sd-tailwindcss-transformerというライブラリをリリースしました。
このライブラリを作成するにあたってsemantic-releaseとrenovateを利用していたのですが、少し問題が起きてしまったので問題の内容と対処法をこの記事で残しておきたいと思います。
semantic-releaseとは
semantic-releaseとはコミットメッセージのprefixをもとにパッケージのバージョンの更新やRelease Noteの作成などを実行してくれるライブラリです。
具体的にはprefixがfix
だったらFix Release、feat
だったらFeature Releaseになります。
コミットメッセージのフォーマットはAngular Commit Message Conventionsを踏襲しているようです。
今回、ライブラリの作成においてはgithub actionsを利用しmainブランチに対象のコミットがされたらバージョンが更新されるように設定していました。
renovate
renovateは依存パッケージに更新があった場合、それを検知して自動でpull requestを作成してくれるgithub appです。
今回はautomerge
を有効にして依存パッケージの更新がminorかpatchだったら自動でmainブランチにマージするようにしていました。
起こった問題
文脈から予想はつくかと思いますが、
今回起きた問題はrenovateが作成したコミットのprefixがfix
になっていたためそのpull requestがauto mergeされた結果、semantic-releaseによって意図せずバージョンが上がってしまったというものでした。
renovateはデフォルトではprefixにchore
を使用しますが、設定ファイルのオプションで"extends": ["config:base"]
を設定している場合は、production dependenciesの更新のみfix
が使われるみたいです。
今回はまさにこのケースでした。
対処法
automerge
を無効にするという対処法もありますが、minorやpatchなどの更新がある度に毎回手動でマージするのはやはり面倒でした。
"extends": ["config:base"]
を設定している場合でもprefixがchore
でコミットされるように設定できれば良いので、ドキュメントを漁ってみたところsemanticCommitTypeというオプションがありました。
このオプションの値をchore
に設定することでprefixが全てchore
でコミットされるようになりました。
まとめ
今回は個人開発だったので意図せずバージョンが上がったことによる影響はほとんどありませんでしたが、ある程度の規模で影響範囲が大きいプロジェクトで使う場合は気をつけないといけないと思いました。