• Build file is a text file named Makesurefile.
  • Build file uses directives.
  • Build file consists of a set of goals.
  • A goal is a labeled piece of shell.
  • A goal can declare dependencies on other goals. During execution each referenced dependency will run only once despite the number of occurrences in dependency tree. Dependencies will run in proper sequence according to the inferred topological order. Dependency loops will be reported as error.
  • Goal bodies are executed in separate shell invocations. It means, you can’t easily pass variables from one goal to another. This is done on purpose to enforce declarative style.
  • By default, goals are run with bash. You can change to sh with @shell sh directive specified before all goals.
  • For convenience in all shell invocations the current directory is automatically set to the one of Makesurefile. Typically, this is the root of the project. This allows using relative paths without bothering of the way the build is run.
  • Goal can declare @reached_if directive (link). This allows skipping goal execution if it's already satisfied.