CI で `--if-present` は絶対に使うな というお話
タイトルの通りです
--if-present
は絶対に使うな」
はじめに「CI で 事前知識
--if-present
は npm script の実行時につけられるオプション。
もし npm script が無くても exit 0 扱いにしてエラーにしない。
You can use the --if-present flag to avoid exiting with a non-zero exit code when the script is undefined. This lets you run potentially undefined scripts without breaking the execution chain.
You can use the --if-present flag to avoid exiting with a non-zero exit code when the script is undefined. This lets you run potentially undefined scripts without breaking the execution chain.
あっ、まったく同じ文章なんだな...
yarn には見つからなかったので npm と pnpm のみに存在する?
背景
下記のような step があった。
npm run lint --if-present
一見すると lint 通してそうですね。
でも、CI で通っているはずなのに、デプロイのステップで lint エラーが出現するという事態が起こったわけです。
問題
「もし lint のスクリプトが無くても CI 通るし、便利じゃん」
危険すぎます。
ケース1「npm script 書き換えよう」
チェック系の script まとめたいし、lint
じゃなくて check:lint
とかにしようかな?
はい、この変更以降、lintチェックは一切動いていないのに誰も気づきません。
ケース2「typo しちゃった」
npm run lnit --if-present
typo しちゃってるけど、CI 通ってるし大丈夫そうだね。
はい、何にも担保できてないステップで Action 時間だけ消費してるのに誰も気づきません。
--if-present
は絶対に使うな」
結論「CI で 補足
もちろん、定常的かつ確実性が必要なプロセスでなければ、--if-present
は便利に使えるタイミングもあります。
npm run fix:format --if-present --workspaces
こんな感じで実行できれば、fix:format が定義されたものだけでしっかり フォーマット fix できたりします。
commit の hooks に入れてもいいかもしれないですね。
Discussion