yumemi-inc / flutter-mobile-project-template

MIT License
37 stars 7 forks source link

[Feature]: melos exec コマンドがパッケージ間の依存関係に応じて実行される設定を追加する #87

Closed Kotaro666-dev closed 9 months ago

Kotaro666-dev commented 9 months ago

これに関する既存の Issue はありますか?

動機

GitHub ワークフロー check-dff > Regenerate code ステップが失敗する

最新の main ブランチを反映していても、ワークフローが失敗することが多々ありました。

失敗したワークフローのログ: https://github.com/yumemi-inc/flutter-mobile-project-template/actions/runs/7620279114/job/20754744487

ワークフローを再試行することを複数回トライすると成功するようになることを確認しました。

失敗する原因

エラーログを見る感じでは、flutter_app パッケージの build runner が走っているときに cores_core の生成ファイルが開けないと言われていることから、app_exception_notifier_provider.g.dart ファイルがまだ生成されていない可能性があります。

[flutter_app]: PathNotFoundException: Cannot open file, path = '/home/runner/work/flutter-mobile-project-template/flutter-mobile-project-template/packages/cores/core/lib/src/exception/provider/app_exception_notifier_provider.g.dart' (OS Error: No such file or directory, errno = 2)

flutter_app パッケージは cores_core パッケージに依存しているため、cores_core パッケージの生成ファイルが完了してから、flutter_app パッケージの build_runner が走るようにしたほうがいいのではないかと思いました。

提案

パッケージ間の依存関係が影響する melos exec コマンドに以下の設定を追加します。

concurrency

Defines the max concurrency value of how many packages will execute the command in at any one time. Defaults to 5.

参考資料: https://melos.invertase.dev/configuration/scripts#concurrency

orderDependents

Whether exec should order the execution of the script in multiple packages based on the dependency graph of the packages. The script will be executed in leaf packages first and then in packages that depend on them and so on. This is useful for example, for a script that generates code in multiple packages, which depend on each other. Defaults to false.

参考資料: https://melos.invertase.dev/configuration/scripts#orderdependents

Kotaro666-dev commented 9 months ago

以下の変更を提案する

背景

orderDependents を設定することで、以下のような実行になっていそう。