using System.CommandLine; using Geekeey.Core.Properties; using Microsoft.Extensions.FileSystemGlobbing; namespace Geekeey.Core.Commands; internal sealed class Release : Command { private static readonly Option Repository = new("--repository") { Required = true, CustomParser = Parsers.Uri }; private static readonly Option Version = new("--version") { Required = true }; private static readonly Option Draft = new("--draft") { CustomParser = Parsers.Pattern }; private static readonly Option PreRelease = new("--prerelease") { CustomParser = Parsers.Pattern }; private static readonly Option Title = new("--title"); private static readonly Option Notes = new("--notes"); private static readonly Option Attachments = new("--attachments") { CustomParser = Parsers.Matcher }; public Release() : base("release", Resources.ReleaseCommandDescription) { Add(Repository); Add(Version); Add(Draft); Add(PreRelease); Add(Title); Add(Notes); Add(Attachments); SetAction(HandleAsync); } private Task HandleAsync(ParseResult result, CancellationToken cancellationToken) { var server = result.GetRequiredValue(Program.Server); var access = result.GetRequiredValue(Program.Token); // relative repository urls are resolved against the server url var repository = result.GetRequiredValue(Repository); if (!repository.IsAbsoluteUri) { repository = new Uri(new Uri(server), repository); } var version = result.GetRequiredValue(Version); var draft = result.GetValue(Draft); var prerelease = result.GetValue(PreRelease); var title = result.GetValue(Title); var notes = result.GetValue(Notes); var attachments = result.GetValue(Attachments); // Implementation for checkout command goes here. return Task.FromResult(0); } }