All Versions
34
Latest Version
Avg Release Cycle
53 days
Latest Release
1621 days ago

Changelog History
Page 3

  • v2.12.3

    October 06, 2018
  • v2.12.2

    October 01, 2018
  • v2.12.0 Changes

    • โž• Added Git tasks:Clone, Pull Add, Commit, Push, Tag, RemoveFilesTask

        context.Tasks().GitTasks().Commit();
      
    • โž• Added Docker tasks: Build, Run, Stop, RemoveContainer, RemoveImage

        context.Tasks().DockerTasks().Build(".");
      
  • v2.11.2

    August 28, 2018
  • v2.11.0 Changes

    • ๐Ÿ”Œ FlubuCore cake plugin which allows you to use any cake addin in FlubuCore.
    • โž• Added FlubuCore specific code analyzers. Added target parameter analyzers when specifing target's with Target attribute. Added FromArg attribute analyzer.
    • ๐ŸŽ Greatly improved performance for .net core.
    • ๐Ÿ‘Œ Improved nuget package resolving performance.
  • v2.10.0 Changes

    July 26, 2018
    • ๐Ÿ”ง Json configuration file can now be specified by machine name. FlubuSettings.{MachineName}.Json
    • โž• Added WaitForDebugger task context extension.
  • v2.9.0 Changes

  • v2.8.2 Changes

    • FlubuCore is now available as .net core global tool. dotnet tool install --global FlubuCore.GlobalTool
    • ๐ŸŒ Flubu dotnet cli tool and web api is now available for .net core 2.1.
    • ๐Ÿ”ง Console arguments, configuration properties, enviroment variables can now be passed to script properties with FromArg attribute. Property doesn't need to have attribute. Argument key in that case is same as the property name.

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

      protected override void ConfigureBuildProperties(IBuildPropertiesContext context)
      {
      }
      
      protected override void ConfigureTargets(ITaskContext context)
      {
          context.CreateTarget("Deploy.Exapmle")
              .AddTask(x => x.FlubuWebApiTasks().GetTokenTask("user", "pass").SetWebApiBaseUrl("noade1Url"))
              .AddTask(x => x.FlubuWebApiTasks().UploadPackageTask("packageDir", "*.zip"))
              .AddTask(x => x.FlubuWebApiTasks().ExecuteScriptTask("Deploy", "DeployScript.cs"))
              .Group(target =>
                  {
                  target.AddTask(x => x.FlubuWebApiTasks().GetTokenTask("user", "pass").SetWebApiBaseUrl("noade2Url"))
                             .AddTask(x => x.FlubuWebApiTasks().UploadPackageTask("packageDir", "*.zip"))
                             .AddTask(x => x.FlubuWebApiTasks().ExecuteScriptTask("Deploy", "DeployScript.cs"));
                   },
                   when: c => deployOnSecondNode);
       }
      

      }

    You could then pass argument to property like so:

    ๐Ÿš€ Dotnet flubu Deploy.Example -sn=true

    • Target's can now be defined with attribute on method.

      [Target("targetName", "a", "b")]
      [Target("targetName2", "c", "d")]
      [Target("targetName3", "e", "f")]
      public void Example(ITargetFluentInterface target, string source, string destination)
      {
              target.AddTask(x => x.CopyFileTask(source, destination, true));
      }
      
  • v2.7.0 Changes

    • โž• Added Xunit task - For running xunit tasks with xunit console runner.
    • ๐Ÿ”Š WebApi: Option to include flubu web api server logs into ExecuteScript response.
    • WebApi: Option to include StackTrace to error response.
    • โž• Added Build system providers - You can acces various build, commit... information for various build systems (such as Jenkins, TeamCity, AppVeyor, Travis...)

      protected override void ConfigureTargets(ITaskContext context) { bool isLocalBuild = context.BuildSystems().IsLocalBuild; var gitCommitId = context.BuildSystems().Jenkins().GitCommitId; }

    • ๐Ÿ‘€ Added conditonal task execution with when cluase on single task (see bellow for group of tasks)

      context.CreateTarget("Example") .AddTask(x => x.CompileSolutionTask()) .AddTask(x => x.PublishNuGetPackageTask("packageId", "pathToNuspec")) .When(c => c.BuildSystems().Jenkins().IsRunningOnJenkins);

    • โž• Added finally block on single task. Finally block acts just like finally in try catch (see bellow for group of tasks)

      context.CreateTarget("Example") .AddTask(x => x.CompileSolutionTask()) .AddTask(x => x.PublishNuGetPackageTask("packageId", "pathToNuspec") .Finally(c => c.Tasks().DeleteFilesTask("pathtoNuspec", ".", true).Execute(c)));

    • โž• Added onError block on single task. You can perform some custom action when error occures on single task(see bellow for group of tasks)

      context.CreateTarget("Example") .AddTask(x => x.CompileSolutionTask()) .AddTask(x => x.PublishNuGetPackageTask("packageId", "pathToNuspec") .OnError((c, ex) => c.Tasks().DeleteFilesTask("pathtoNuspec", ".", true).Execute(context)));

    • Added conditonal task execution with When clause on group of tasks.

      protected override void ConfigureTargets(ITaskContext context) { context.CreateTarget("Example") .AddCoreTask(x => x.Build()) .Group( target => { target.AddCoreTask(x => x.Pack()); target.AddCoreTask(x => x.NugetPush("pathToPackage")); }, when: c => !c.BuildSystems().Jenkins().IsRunningOnJenkins); }

    • Finally on group of tasks: Added onFinally block on group of tasks. onFinally acts just like finally in try/catch.

      context.CreateTarget("Example")
              .AddCoreTask(x => x.Build())
              .Group(
                  target =>
                  {
                      target.AddCoreTask(x => x.Pack());
                      target.AddCoreTask(x => x.NugetPush("pathToPackage"));
                  },
                  onFinally: c =>
                  {
                      c.Tasks().DeleteFilesTask("pathToNupkg", "*.*", true).Execute(c);
                  });
      
    • OnError on group of tasks: You can perform some custom action when error occures in any of tasks that are in group.

      context.CreateTarget("Example")
          .AddCoreTask(x => x.Build())
          .Group(
              target =>
              {
                  target.AddCoreTask(x => x.Pack());
                  target.AddCoreTask(x => x.NugetPush("pathToPackage"));
              },
              onError: (c, error) =>
              {
                 //// some custom action when error occures in any of the task in group.
              });
      
  • v2.6.0 Changes

    • โž• Added option to add multiple tasks, dependencies With (anonimous) method to target with Do method.

      protected override void ConfigureTargets(ITaskContext context)
      {
          context.CreateTarget("deploy.PreProduction")
              .Do(Deploy, @"C:\Web", "AppPool_Preprod", "PreProduction");
      
          context.CreateTarget("deploy.Production")
              .Do(Deploy, @"d:\Web", "AppPool_Prod", "Production");
      }
      
      public void Deploy(ITargetFluentInterface target, string deployPath, string appPoolName, string enviromentName)
      {
          target.AddTask(x => x.IisTasks().ControlAppPoolTask(appPoolName, ControlApplicationPoolAction.Stop))
              .Do(UnzipPackage)
              .AddTask(x => x.DeleteDirectoryTask(deployPath, false).Retry(30, 5000))
              .AddTask(x => x.CreateDirectoryTask(deployPath, false))
              .AddTask(x => x.CopyDirectoryStructureTask(@"Packages\WebApi", deployPath, true))
              .AddTask(x => x.IisTasks().ControlAppPoolTask(appPoolName, ControlApplicationPoolAction.Start));
      }