@nixCraft make.
It's ugly, weird and convoluted. But also omnipresent. Focused. Cross-language. Predictable.
Uglier and dirtier than node package.json-"scripts", rake, ./scripts/, 'artisan', cargo, go or any framework- or language specific runner/builder/deployer. But it's always there. Consistency++
I'll add a simple `make install, make test, make build, make run, make deploy` to each project - from web to rust. It wraps the projects' native tooling, r calls docker, or shell scripts etc.