Full IDE support

    Builds are full-fledged C# projects. No preprocessing involved! That means all the powerful IDE features like auto-completion, refactorings and formatting will celebrate their comeback. Targets are defined as expression-bodied properties and therefore provide superior navigation. Also target dependency definitions and rename refactorings benefit from this approach. Ultimately, debugging is available just as you know it. No more writing debug output to the console!

    Bootstrapping for all platforms included.

    Value Injections

    Fields can be marked with different attributes to get their value injected prior to execution. For instance, [Parameter] retrieves the value from command-line arguments and environment variables with the same name as the field.

    Parameter Injection

    Path Construction

    Absolute and relative paths can be constructed using the / or + operators, which will automatically adjust the directory separator to the underlying OS. If required, paths can also be casted to match other platforms.

    Path Construction

    Default Settings

    Common metadata, like solution file or repository url, and best-practice settings, like custom loggers or coverage filters, are automatically loaded into DefaultSettings and can be used to invoke tools more efficiently.

    Adaptive Logging

    Log output is optimized for the best readability. Depending on the current environment the build is running on, target captions will be printed in various figlet fonts or utilize service messages if supported by the CI system.

    Code Generation

    Implementing support for CLI tools is crucial for build systems. We provide a code generator to solve this problem! It works based on JSON definition files which are usually written within several minutes. As output we generate a comprehensive structure of entry methods, data classes, enumerations and extension methods. Not only does this structure implement the builder pattern; we also provide extension points for more complicated implementations as well as specialized methods for manipulating boolean, list and other argument types.