Context
Make causes issues:
- make has hidden test failures before and must be used very carefully to prevent silently discarding errors. Generally when make fails, it fails in a way that hides issues, which can be extremely dangerous.
- Makefile scripts are difficult to write. The syntax is bash-like, but not bash, which can lead to very confusing errors if any more advanced scripting features are used. As a result, we use extremely simple Makefile} scripts.
- Users must have make available and installed, which is a problem for users not on macOS or Linux.
- We almost never take advantage of the artifact tracking features of make (i.e. almost all of our make targets are .PHONY).
We should find a better system for managing builds, tests, and scripts.
Definition of done
Replace make with something that resolves the above issues. A replacement should have the following characteristics:
- Fail in an obvious and reliable manner. Never swallow errors.
- Take less time to define and update targets.
- Be more operating system agnostic. Ideally all that should be required is that Go is installed, but we may still have to use Bash scripts for some tasks.
Pitfalls
We will probably find things we don't like about any build/script system. We need to pick the right tradeoffs so the make replacement reduces maintenance cost, but it may not immediately be obvious what the tradeoffs are.
- related to
-
GODRIVER-2104 Improve how topologies are tested
- Backlog