public static TConfiguration UseNugetPush <TConfiguration>(this TConfiguration configuration, Action <INugetPushConfiguration> configurator = null)
            where TConfiguration : IConfiguration
        {
            INugetPushConfiguration pushConfiguration = new NugetPushConfiguration(configuration);

            configurator?.Invoke(pushConfiguration);

            configuration.AddStep(new NugetPushStep());
            return(configuration);
        }
        public bool Push(NugetPushConfiguration config)
        {
            ConsoleOutputUtil.WriteHeader("Pushing NuGet Package", _output);

            var rootPackageFilename = Path.GetFileNameWithoutExtension(_proj.TargetProjectFile);

            if (string.IsNullOrEmpty(rootPackageFilename))
            {
                throw new Exception(string.Format("Cannot derive root package file name from project path, \"{0}\"", _proj.TargetProjectFile));
            }

            var targetPackagePath = Path.Combine(_proj.TargetProjectDirectoryPath, string.Format("{0}.{1}.nupkg",
                                                                                                 rootPackageFilename,
                                                                                                 _proj.AssemblyInfo.CurrentAssemblyInfoVersion));

            var targetSymbolsPath = Path.Combine(_proj.TargetProjectDirectoryPath, string.Format("{0}.{1}.symbols.nupkg",
                                                                                                 rootPackageFilename,
                                                                                                 _proj.AssemblyInfo.CurrentAssemblyInfoVersion));

            if (!Push(targetPackagePath, config == null ? null : config.PackageConfiguration))
            {
                _output.Warning.WriteLine("- Done with Errors -");
                return(false);
            }

            if (config != null && config.SymbolsConfiguration != null &&
                !string.IsNullOrEmpty(config.SymbolsConfiguration.Source))
            {
                if (!Push(targetSymbolsPath, config.SymbolsConfiguration))
                {
                    _output.Warning.WriteLine("- Done with Errors -");
                    return(false);
                }
            }

            _output.Standard.WriteLine("- Done -");
            return(true);
        }
        public bool PatchBuildPackAndPublish(
            string versionPattern,
            bool doCreateSymbolsPackage   = true,
            NugetPushConfiguration config = null)
        {
            PatchAssemblyVersion(versionPattern);
            if (Build())
            {
                if (Pack(doCreateSymbolsPackage))
                {
                    if (Push(config))
                    {
                        return(true);
                    }
                }
            }

            _output.Standard.WriteLine();
            _output.Standard.WriteLine(("- PROCESS EXITED DUE TO ERRORS -"));
            _output.Standard.WriteLine();

            return(false);
        }