/cake

Cake (C# Make) is a build automation system.

Primary LanguageC#MIT LicenseMIT

#Cake

Cake (C# Make) is a build automation system using C#.

Build status

##Table of contents

  1. Roadmap
  2. Implemented functionality
  3. Example
  4. Documentation
  5. Contributors
  6. Contributing
  7. External add-ons
  8. License

##Roadmap

The Cake engine is pretty much done, but there are still improvements to be made. I'm still experimenting with the script API to make it as easy and intuitive as possible, so expect changes along the road.

A roadmap can be found here.

##Implemented functionality

This is a list of the currently implemented functionality.

  • MSBuild
  • MSTest
  • xUnit
  • NUnit
  • NuGet pack
  • NuGet push
  • NuGet restore
  • ILMerge
  • WiX (Candle and Light)
  • SignTool
  • File copying/moving/deleting
  • Directory creation/cleaning/deleting
  • File/Directory globbing
  • Compression (zip)
  • AssemblyInfo patching
  • Release notes parser

For more information and examples of how to use Cake, see the Documentation.

##Example

###1. Download Cake

C:\Project> NuGet.exe install Cake -OutputDirectory Tools -ExcludeVersion

###2. Create build script

var target = Argument("target", "NuGet");
var configuration = Argument("configuration", "Release");

Task("Clean")
    .Does(() =>
{
    // Clean directories.
    CleanDirectory("./build");
    CleanDirectory("./build/bin");
    CleanDirectories("./src/**/bin/" + configuration);
});

Task("Restore-NuGet-Packages")
    .IsDependentOn("Clean")
    .Does(context =>
{
    // Restore NuGet packages.
    NuGetRestore("./src/Cake.sln");    
});

Task("Build")
    .IsDependentOn("Restore-NuGet-Packages")
    .Does(() =>
{
    MSBuild("./src/Cake.sln", s => 
        s.SetConfiguration(configuration));
});

Task("Unit-Tests")
    .IsDependentOn("Build")
    .Does(() =>
{
    XUnit("./src/**/bin/" + configuration + "/*.Tests.dll");
});

Task("Copy-Files")
    .IsDependentOn("Unit-Tests")
    .Does(() =>
{
    var sourcePath = "./src/Cake/bin/" + configuration;    
    var files = GetFiles(sourcePath + "/**/*.dll") + GetFiles(sourcePath + "/**/*.exe");
    var destinationPath = "./build/bin";

    CopyFiles(files, destinationPath);
});

Task("Pack")
    .IsDependentOn("Copy-Files")
    .Does(() =>
{   
    var root = "./build/bin";
    var output = "./build/" + configuration + ".zip";

    Zip(root, output);
});

Task("NuGet")
    .Description("Create NuGet package")
    .IsDependentOn("Pack")
    .Does(() =>
{
    // Create NuGet package.
    NuGetPack("./Cake.nuspec", new NuGetPackSettings {
        Version = "0.1.0",
        BasePath = "./build/bin",
        OutputDirectory = "./build",
        NoPackageAnalysis = true
    });
});

RunTarget(target);

###3. Run build script

C:\Project\Tools\Cake> Cake.exe ../../build.csx -verbosity=verbose -target=Pack

Documentation

You can read the latest documentation at http://cake.readthedocs.org/.

Contributors

Contributions have been accepted from:

Patrik Svensson (@patriksvensson)
Mattias Karlsson (@devlead)
Fredrik Leijon (@FredrikL)
Viktor Elofsson (@vktr)
Jeff Doolittle (@jeffdoolittle)
Richard Simpson (@RichiCoder1)

Thank you very much!

Contributing

So you’re thinking about contributing to Cake? Great! It’s really appreciated.

Make sure you've read the contribution guidelines before sending that epic pull request.

  • Fork the repository.
  • Make your feature addition or bug fix.
  • Don't forget the unit tests.
  • Send a pull request. Bonus for topic branches. Funny .gif will be your reward.

External add-ons

AliaSql: https://www.nuget.org/packages/Cake.AliaSql
Unity: https://github.com/patriksvensson/Cake.Unity

License

Copyright (c) 2014, Patrik Svensson and contributors.
Cake is provided as-is under the MIT license. For more information see LICENSE.