public static void TestDotNetCoreProjects(ICakeContext context, TaskConfig config)
        {
            DotNetCoreConfig dotNetCoreConfig = config.Load <DotNetCoreConfig>();

            DotNetCoreConfig.TestConfig     test     = dotNetCoreConfig.Test;
            DotNetCoreConfig.CoverageConfig coverage = dotNetCoreConfig.Coverage;

            if (test.Skip)
            {
                context.LogInfo("Skipping tests.");
                return;
            }

            EnvConfig env = config.Load <EnvConfig>();

            string testProjectFile = test.ProjectFile;

            if (testProjectFile is null)
            {
                throw new TaskConfigException("Build solution or project file not specified.");
            }

            var coverletSettings = new CoverletSettings
            {
                CollectCoverage         = true,
                CoverletOutputFormat    = CoverletOutputFormat.opencover,
                CoverletOutputDirectory = Path.Combine(env.Directories.TestOutput, "coverage"),
            };
            IList <string> excludeFilters = coverage.ExcludeFilters;

            if (excludeFilters.Count > 0)
            {
                coverletSettings.Exclude = excludeFilters.ToList();
            }
            IList <string> includeFilters = coverage.IncludeFilters;

            if (includeFilters.Count > 0)
            {
                coverletSettings.Include = includeFilters.ToList();
            }

            var settings = new DotNetCoreTestSettings
            {
                Configuration    = env.Configuration,
                OutputDirectory  = Path.Combine(env.Directories.BinaryOutput, "__build"),
                Logger           = test.Logger ?? "trx",
                ResultsDirectory = Path.Combine(env.Directories.TestOutput, "testresults"),
                NoBuild          = true,
                NoRestore        = true,
                Verbosity        = context.Log.Verbosity.ToVerbosity(),
            };
            string filter = test.Filter;

            if (!string.IsNullOrWhiteSpace(filter))
            {
                settings.Filter = filter;
            }

            context.DotNetCoreTest(testProjectFile, settings, coverletSettings);
        }
        public static void ConfigureDotNetCore(TaskConfig config)
        {
            DotNetCoreConfig cfg = config.Load <DotNetCoreConfig>();

            EnvConfig env = config.Load <EnvConfig>();
            string    workingDirectory = env.Directories.Working ?? Directory.GetCurrentDirectory();

            cfg.Build.ProjectFile = (Func <string>)(() => GetBuildProjectFile(workingDirectory));

            cfg.Test.Skip        = false;
            cfg.Test.ProjectFile = (Func <string>)(() => GetBuildProjectFile(workingDirectory));
            cfg.Test.Logger      = "trx";
        public static void PublishDotNetProjects(ICakeContext ctx, TaskConfig config)
        {
            EnvConfig env = config.Load <EnvConfig>();

            IList <DotNetCorePublisher> publishers = env.Publishers.OfType <DotNetCorePublisher>().ToList();

            if (publishers.Count == 0)
            {
                ctx.LogInfo("No .NET Core projects to publish. Specify a publisher.");
            }
            foreach (DotNetCorePublisher publisher in publishers)
            {
                string publishDirectory = Path.Combine(env.Directories.PublishOutput,
                                                       publisher.GetType().Name + Guid.NewGuid().ToString("N"));
                if (!Directory.Exists(publishDirectory))
                {
                    Directory.CreateDirectory(publishDirectory);
                }
                publisher.SetOutput(publishDirectory);
                switch (publisher)
                {
                case AspNetCorePublisher aspnet:
                    PublishAspNetCore(ctx, config, aspnet);
                    break;

                case NuGetPublisher nuget:
                    DotNetCoreConfig dnc = config.Load <DotNetCoreConfig>();
                    if (nuget.Source is null)
                    {
                        nuget.Source = dnc.NuGetPublisher.SourceFn;
                    }
                    if (nuget.Source is null)
                    {
                        nuget.Source = _ => "https: //api.nuget.org/v3/index.json";
                    }
                    if (nuget.ApiKey is null)
                    {
                        nuget.ApiKey = dnc.NuGetPublisher.ApiKeyFn;
                    }
                    PublishNuGet(ctx, config, nuget);
                    break;

                default:
                    throw new TaskConfigException($"Unrecognized .NET Core publisher type: {publisher.GetType().FullName}.");
                }
            }
        }
        public static void CleanDotNetCoreSolution(ICakeContext context, TaskConfig config)
        {
            context.LogInfo("Shutting down .NET Core build server");
            context.DotNetCoreBuildServerShutdown();

            DotNetCoreConfig cfg = config.Load <DotNetCoreConfig>();
            string           cleanProjectFile = cfg.Build.ProjectFile.Resolve();

            if (cleanProjectFile is null)
            {
                throw new TaskConfigException("Build solution or project file not specified.");
            }

            context.DotNetCoreClean(cleanProjectFile, new DotNetCoreCleanSettings
            {
                Verbosity = context.Log.Verbosity.ToVerbosity(),
            });
        }