I usually use makefiles.
just is interesting, it takes makefile syntax(ish) and has better errors and helpful command output. Supports dependencies between jobs
Taskfile is pretty great too, replaces a makefile with a dead simple set of shell scripts. Includes a template to get you started, but really is just bash.