| File: Commands\Package\Stage\StagePushCommand.cs | Web Access |
| Project: NuGet.CommandLine.XPlat.csproj (NuGet.CommandLine.XPlat) |
// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.CommandLine; using System.Threading.Tasks; using NuGet.Configuration; using NuGet.Credentials; using NuGet.Protocol; namespace NuGet.CommandLine.XPlat.Commands.Package.Stage { internal static class StagePushCommand { internal static void Register( Command stageCommand, Option<bool> interactiveOption, Func<ILoggerWithColor> getLogger) { Register( stageCommand, interactiveOption, getLogger, SetupSettingsAndRunAsync); } internal static Task<int> SetupSettingsAndRunAsync(StagePushCommandArgs args) { DefaultCredentialServiceUtility.SetupDefaultCredentialService( args.Logger, !args.Interactive); ISettings settings = XPlatUtility.ProcessConfigFile(args.ConfigFile); var packageSourceProvider = new PackageSourceProvider(settings); var sourceRepositoryProvider = new CachingSourceProvider(packageSourceProvider); return StagePushCommandRunner.RunAsync( args, settings, packageSourceProvider, sourceRepositoryProvider); } internal static void Register( Command stageCommand, Option<bool> interactiveOption, Func<ILoggerWithColor> getLogger, Func<StagePushCommandArgs, Task<int>> action) { var pushCommand = new DocumentedCommand( "push", Strings.StagePushCommand_Description, "https://aka.ms/dotnet/package/stage"); var packagePathArgument = new Argument<string>("PACKAGE_PATH") { Arity = ArgumentArity.ExactlyOne, Description = Strings.StagePushCommand_PackagePathArgument_Description, }; var sourceOption = new Option<string>("--source", "-s") { Arity = ArgumentArity.ExactlyOne, Description = Strings.Source_Description, }; var apiKeyOption = new Option<string>("--api-key", "-k") { Arity = ArgumentArity.ExactlyOne, Description = Strings.ApiKey_Description, }; var groupOption = new Option<string>("--group") { Arity = ArgumentArity.ExactlyOne, Description = Strings.StagePushCommand_GroupOption_Description, }; var noSymbolsOption = new Option<bool>("--no-symbols") { Arity = ArgumentArity.Zero, Description = Strings.StagePushCommand_NoSymbolsOption_Description, }; var configFileOption = new Option<string>("--configfile") { Arity = ArgumentArity.ExactlyOne, Description = Strings.Option_ConfigFile, }; pushCommand.Arguments.Add(packagePathArgument); pushCommand.Options.Add(sourceOption); pushCommand.Options.Add(apiKeyOption); pushCommand.Options.Add(groupOption); pushCommand.Options.Add(noSymbolsOption); pushCommand.Options.Add(configFileOption); pushCommand.Options.Add(interactiveOption); pushCommand.SetAction(async (parseResult, cancellationToken) => { ILoggerWithColor logger = getLogger(); try { var args = new StagePushCommandArgs { PackagePath = parseResult.GetValue(packagePathArgument)!, Source = parseResult.GetValue(sourceOption), ApiKey = parseResult.GetValue(apiKeyOption), GroupId = parseResult.GetValue(groupOption), NoSymbols = parseResult.GetValue(noSymbolsOption), ConfigFile = parseResult.GetValue(configFileOption), Interactive = parseResult.GetValue(interactiveOption), Logger = logger, CancellationToken = cancellationToken, }; return await action(args); } catch (ArgumentException ex) { logger.LogError(ex.Message); return ExitCodes.InvalidArguments; } }); stageCommand.Subcommands.Add(pushCommand); } } }