FlubuCore is a free, open source build & deployment project written in C# and released under MIT. It has 937 GitHub stars, 99 forks and 31 open issues, and was last pushed 6 months ago. On this registry it ranks #62 of 81 tracked projects in Build & Deployment, with 5 head-to-head comparisons available.

English | 中文

FlubuCore

Build Status NuGet Badge Gitter Member project of .NET Foundation Member project of .NET Core Community License

Introduction

"FlubuCore - Fluent Builder Core" is a cross platform build and deployment automation system. You can define your build and deployment scripts in C# using an intuitive fluent interface. This gives you code completion, IntelliSense, debugging, FlubuCore custom analyzers, and native access to the whole .NET ecosystem inside of your scripts.

FlubuCore in action

FlubuCore offers a .net (core) console application that uses power of roslyn to compile and execute scripts. Above example can be run from console with:

  • FlubuCore runner (.NET 4.62+) flubu.exe Default
  • FlubuCore dotnet cli tool (.NET Core 1.0+) dotnet flubu Default
  • FlubuCore local or global tool (.NET Core 2.1+) flubu Default

Features and Advantages

  • Intuitive an easy to learn. C#, fluent interface, and IntelliSense make even most complex script creation a breeze.
    [FromArg("nugetKey", "Nuget api key for publishing Flubu nuget packages.")]
    public string NugetApiKey { get; set; }

    protected override void ConfigureTargets(ITaskContext context)
    {
        var pack = context.CreateTarget("Pack")
            .SetDescription("Prepare's nuget package.")
            .AddCoreTask(x => x.Pack()
                .NoBuild()
                .OutputDirectory(OutputDirectory)
                .WithArguments("--force")); //you can add your own custom arguments on each task

        var branch = context.BuildSystems().Travis().Branch;
       
        var nugetPush = context.CreateTarget("Nuget.publish")
            .SetDescription("Publishes nuget package.")
            .DependsOn(pack)
            .AddCoreTask(x => x.NugetPush($"{OutputDirectory}/NetCoreOpenSource.nupkg")
                .ServerUrl("https://www.nuget.org/api/v2/package")
                .ApiKey(NugetApiKey)
            )
            .When(c => c.BuildSystems().RunningOn == BuildSystemType.TravisCI
                        && !string.IsNullOrEmpty(branch)
                        && branch.EndsWith("stable", StringComparison.OrdinalIgnoreCase));
    }
  • Large number of often used built-in tasks like e.g. versioning, running tests, creating deployment packages, publishing NuGet packages, docker tasks, git tasts, sql tasks, npm tasks, executing PowerShell, managing IIS scripts and many more.
context.CreateTarget("build")
   .AddTask(x => x.GitVersionTask())
   .AddTask(x => x.CompileSolutionTask("MySolution.sln").BuildConfiguration("Release");

context.CreateTarget("run.tests")
   .AddTask(x => x.XunitTaskByProjectName("MyProject").StopOnFail())
   .AddTask(x => x.NUnitTask(NunitCmdOptions.V3, "MyProject2").ExcludeCategory("Linux"))
   .AddCoreTask(x => x.CoverletTask("MyProject.dll"));
context.CreateTarget("DoExample")
        .Do(c =>
        {
            // write your awesome code.
            File.Copy("NotSoAwesome.txt", Path.Combine(OutputDirectory, "JustAnExample.txt") );
            // Access flubu built in tasks in DO if needed.
            c.Tasks().GenerateT4Template("example.TT").Execute(c);                
        })
        .AddTask(x => x.CompileSolutionTask())
        .Do(NuGetPackageReferencingExample);
[NugetPackage("Newtonsoft.json", "11.0.2")]
[Assembly(".\Lib\EntityFramework.dll")]
public class BuildScript : DefaultBuildScript
{
   public void NuGetPackageReferencingExample(ITaskContext context)
    {
        JsonConvert.SerializeObject("Example");
    }
}
context.CreateTarget("Run.Libz")
    .AddTask(x => x.RunProgramTask(@"packages\LibZ.Tool\1.2.0\tools\libz.exe")
        .WorkingFolder(@".\src")
        .WithArguments("add")
        .WithArguments("--libz", "Assemblies.libz"));
public class SimpleScript : DefaultBuildScript
{
   [FromArg("c", "The configuration to use for building the project.")]
   public string Configuration { get; set; } = "Release"

   [FromArg("sn", "If true app is deployed on second node. Otherwise not.")]
   public bool deployOnSecondNode { get; set; }

   protected override void ConfigureTargets(ITaskContext context)
   {
        context.CreateTarget("build")
           .AddCoreTask(x => x.Build()
               .Configuration(Configuration)
               .ForMember(x =>  x.Framework("net462"), "f", "The target framework to build for.")); 
   }
}
 flubu build -c=Debug -f=netcoreapp2.0

FlubuCore interactive mode

readme truncated — read the full docs on github

Frequently asked questions

Is FlubuCore free to use?

FlubuCore is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does FlubuCore do?

A cross platform build and deployment automation system for building projects and executing deployment scripts using C# code.

What is FlubuCore written in?

FlubuCore is primarily written in C#. Its source is publicly available at https://github.com/dotnetcore/FlubuCore, and it has 937 GitHub stars.