Related: dependency management
Input:
- Code, configuration, documentation, binaries, … (literal any file)
- File specifying 3rd party dependencies
- Environment variables Side-effect:
- Run unit test, lint Output:
- Binary files and anything that are needed to run the software
- Documentation
Goal:
-
Avoid one-off way to build different projects
-
Define a set of rule to run to produce artifacts
-
Features
- How the rule is defined?
- How to detect change?
- Generate different artifacts: production, debug, local, (architecture, etc.) symbols, configuration, etc.?
- How to handle external dependencies: different packages, different package versions, conflict?
- Idempotent?
- Speed to build?
- Quality of the artifacts like size, speed
-
Tenets
- Repeatable, reproducible, standard
-
Common:
- Bazel
- C, C++: make
- Java: Apache maven