Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions src/Nitro/CommandLine/src/CommandLine/.config/dotnet-tools.json

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ private static async Task<int> ExecuteAsync(
CancellationToken cancellationToken)
{
var result = await client.ShowApiCommandQuery.ExecuteAsync(id, cancellationToken);

var data = result.EnsureData();
console.EnsureNoErrors(result);
var data = console.EnsureData(result);

if (data.Node is IApiDetailPrompt_Api node)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
using ChilliCream.Nitro.CommandLine.Helpers;
using ChilliCream.Nitro.CommandLine.Options;
using StrawberryShake;
using static ChilliCream.Nitro.CommandLine.ThrowHelper;

namespace ChilliCream.Nitro.CommandLine.Commands.Clients;

Expand All @@ -21,17 +20,30 @@ public PublishClientCommand() : base("publish")
AddOption(Opt<ClientIdOption>.Instance);
AddOption(Opt<ForceOption>.Instance);
AddOption(Opt<OptionalWaitForApprovalOption>.Instance);
AddOption(Opt<OptionalSourceMetadataOption>.Instance);

this.SetHandler(
ExecuteAsync,
Bind.FromServiceProvider<IAnsiConsole>(),
Bind.FromServiceProvider<IApiClient>(),
Opt<TagOption>.Instance,
Opt<StageNameOption>.Instance,
Opt<ClientIdOption>.Instance,
Opt<ForceOption>.Instance,
Opt<OptionalWaitForApprovalOption>.Instance,
Bind.FromServiceProvider<CancellationToken>());
this.SetHandler(async context =>
{
var console = context.BindingContext.GetRequiredService<IAnsiConsole>();
var client = context.BindingContext.GetRequiredService<IApiClient>();
var tag = context.ParseResult.GetValueForOption(Opt<TagOption>.Instance)!;
var stage = context.ParseResult.GetValueForOption(Opt<StageNameOption>.Instance)!;
var clientId = context.ParseResult.GetValueForOption(Opt<ClientIdOption>.Instance)!;
var force = context.ParseResult.GetValueForOption(Opt<ForceOption>.Instance);
var waitForApproval = context.ParseResult.GetValueForOption(Opt<OptionalWaitForApprovalOption>.Instance);
var sourceMetadataJson = context.ParseResult.GetValueForOption(Opt<OptionalSourceMetadataOption>.Instance);

context.ExitCode = await ExecuteAsync(
console,
client,
tag,
stage,
clientId,
force,
waitForApproval,
sourceMetadataJson,
context.GetCancellationToken());
});
}

private static async Task<int> ExecuteAsync(
Expand All @@ -42,6 +54,7 @@ private static async Task<int> ExecuteAsync(
string clientId,
bool force,
bool waitForApproval,
string? sourceMetadataJson,
CancellationToken ct)
{
console.Title(
Expand Down Expand Up @@ -73,7 +86,8 @@ async Task PublishClient(StatusContext? ctx)
ClientId = clientId,
Stage = stage,
Tag = tag,
WaitForApproval = waitForApproval
WaitForApproval = waitForApproval,
Source = SourceMetadataHelper.Parse(sourceMetadataJson)
};

if (force)
Expand All @@ -96,11 +110,7 @@ async Task PublishClient(StatusContext? ctx)

await foreach (var x in subscription.ToAsyncEnumerable().WithCancellation(ct))
{
if (x.Errors is { Count: > 0 } errors)
{
console.PrintErrorsAndExit(errors);
throw Exit("No request ID returned");
}
console.EnsureNoErrors(x);

switch (x.Data?.OnClientVersionPublishingUpdate)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ private static async Task<int> ExecuteAsync(
CancellationToken cancellationToken)
{
var result = await client.ShowClientCommandQuery.ExecuteAsync(id, cancellationToken);

var data = result.EnsureData();
console.EnsureNoErrors(result);
var data = console.EnsureData(result);

if (data.Node is IClientDetailPrompt_Client node)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public UploadClientCommand() : base("upload")
AddOption(Opt<TagOption>.Instance);
AddOption(Opt<OperationsFileOption>.Instance);
AddOption(Opt<ClientIdOption>.Instance);
AddOption(Opt<OptionalSourceMetadataOption>.Instance);

this.SetHandler(
ExecuteAsync,
Expand All @@ -24,6 +25,7 @@ public UploadClientCommand() : base("upload")
Opt<TagOption>.Instance,
Opt<OperationsFileOption>.Instance,
Opt<ClientIdOption>.Instance,
Opt<OptionalSourceMetadataOption>.Instance,
Bind.FromServiceProvider<CancellationToken>());
}

Expand All @@ -33,6 +35,7 @@ private static async Task<int> ExecuteAsync(
string tag,
FileInfo operationsFile,
string clientId,
string? sourceMetadataJson,
CancellationToken cancellationToken)
{
console.Title($"Upload operations {operationsFile.FullName.EscapeMarkup()}");
Expand Down Expand Up @@ -63,7 +66,8 @@ async Task UploadClient(StatusContext? ctx)
{
Operations = new Upload(stream, "operations.graphql"),
ClientId = clientId,
Tag = tag
Tag = tag,
Source = SourceMetadataHelper.Parse(sourceMetadataJson)
};

console.Log("Uploading Client..");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
using ChilliCream.Nitro.CommandLine.Helpers;
using ChilliCream.Nitro.CommandLine.Options;
using StrawberryShake;
using static ChilliCream.Nitro.CommandLine.ThrowHelper;

namespace ChilliCream.Nitro.CommandLine.Commands.Clients;

Expand All @@ -19,6 +18,7 @@ public ValidateClientCommand() : base("validate")
AddOption(Opt<StageNameOption>.Instance);
AddOption(Opt<ClientIdOption>.Instance);
AddOption(Opt<OperationsFileOption>.Instance);
AddOption(Opt<OptionalSourceMetadataOption>.Instance);

this.SetHandler(
ExecuteAsync,
Expand All @@ -27,6 +27,7 @@ public ValidateClientCommand() : base("validate")
Opt<StageNameOption>.Instance,
Opt<ClientIdOption>.Instance,
Opt<OperationsFileOption>.Instance,
Opt<OptionalSourceMetadataOption>.Instance,
Bind.FromServiceProvider<CancellationToken>());
}

Expand All @@ -36,6 +37,7 @@ private static async Task<int> ExecuteAsync(
string stage,
string clientId,
FileInfo operationsFile,
string? sourceMetadataJson,
CancellationToken ct)
{
console.Title($"Validate to {stage.EscapeMarkup()}");
Expand Down Expand Up @@ -68,7 +70,8 @@ async Task ValidateClient(StatusContext? ctx)
{
ClientId = clientId,
Stage = stage,
Operations = new Upload(stream, "operations.graphql")
Operations = new Upload(stream, "operations.graphql"),
Source = SourceMetadataHelper.Parse(sourceMetadataJson)
};

console.Log("Create validation request");
Expand All @@ -85,11 +88,7 @@ async Task ValidateClient(StatusContext? ctx)

await foreach (var x in subscription.ToAsyncEnumerable().WithCancellation(ct))
{
if (x.Errors is { Count: > 0 } errors)
{
console.PrintErrorsAndExit(errors);
throw Exit("No request ID returned");
}
console.EnsureNoErrors(x);

switch (x.Data?.OnClientVersionValidationUpdate)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ private static async Task<int> ExecuteAsync(
CancellationToken cancellationToken)
{
var result = await client.ShowEnvironmentCommandQuery.ExecuteAsync(id, cancellationToken);

var data = result.EnsureData();
console.EnsureNoErrors(result);
var data = console.EnsureData(result);

if (data.Node is IEnvironmentDetailPrompt_Environment node)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public FusionPublishCommand() : base("publish")
AddOption(Opt<SourceSchemaFileListOption>.Instance);
AddOption(archiveOption);
AddOption(Opt<WorkingDirectoryOption>.Instance);
AddOption(Opt<OptionalSourceMetadataOption>.Instance);
this.AddNitroCloudDefaultOptions();

AddValidator(result =>
Expand Down Expand Up @@ -72,6 +73,7 @@ public FusionPublishCommand() : base("publish")
var stageName = context.ParseResult.GetValueForOption(Opt<StageNameOption>.Instance)!;
var apiId = context.ParseResult.GetValueForOption(Opt<ApiIdOption>.Instance)!;
var tag = context.ParseResult.GetValueForOption(Opt<TagOption>.Instance)!;
var sourceMetadataJson = context.ParseResult.GetValueForOption(Opt<OptionalSourceMetadataOption>.Instance);

var console = context.BindingContext.GetRequiredService<IAnsiConsole>();
var apiClient = context.BindingContext.GetRequiredService<IApiClient>();
Expand All @@ -85,6 +87,7 @@ public FusionPublishCommand() : base("publish")
apiId,
stageName,
tag,
sourceMetadataJson,
console,
apiClient,
httpClientFactory,
Expand All @@ -100,11 +103,14 @@ private static async Task<int> ExecuteAsync(
string apiId,
string stageName,
string tag,
string? sourceMetadataJson,
IAnsiConsole console,
IApiClient client,
IHttpClientFactory httpClientFactory,
CancellationToken cancellationToken)
{
var source = SourceMetadataHelper.Parse(sourceMetadataJson);

if (archiveFile is not null)
{
if (!File.Exists(archiveFile))
Expand All @@ -117,9 +123,9 @@ private static async Task<int> ExecuteAsync(
stageName,
tag,
archiveFile,
source,
console,
client,
httpClientFactory,
cancellationToken);
}

Expand Down Expand Up @@ -198,21 +204,23 @@ private static async Task<int> ExecuteAsync(
stageName,
tag,
newSourceSchemas,
sourceSchemaVersions,
compositionSettings: null,
source,
console,
client,
httpClientFactory,
cancellationToken);
}

internal static async Task<int> PublishFusionConfigurationAsync(
private static async Task<int> PublishFusionConfigurationAsync(
string apiId,
string stageName,
string tag,
string archiveFilePath,
SourceMetadataInput? source,
IAnsiConsole console,
IApiClient client,
IHttpClientFactory httpClientFactory,
CancellationToken cancellationToken)
{
await using var archiveStream = File.Open(archiveFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
Expand All @@ -237,7 +245,9 @@ await console
tag,
subgraphId: null,
subgraphName: null,
sourceSchemaVersions: null,
waitForApproval: false,
source,
context,
console,
client,
Expand Down Expand Up @@ -288,7 +298,9 @@ await FusionPublishHelpers.UploadFusionArchiveAsync(
tag,
subgraphId: null,
subgraphName: null,
sourceSchemaVersions: null,
waitForApproval: false,
source,
statusContext: null,
console,
client,
Expand Down Expand Up @@ -330,12 +342,14 @@ await FusionPublishHelpers.ReleaseDeploymentSlot(
return ExitCodes.Success;
}

internal static async Task<int> PublishFusionConfigurationAsync(
private static async Task<int> PublishFusionConfigurationAsync(
string apiId,
string stageName,
string tag,
Dictionary<string, (SourceSchemaText, JsonDocument)> newSourceSchemas,
FusionPublishHelpers.SourceSchemaVersion[] sourceSchemaVersions,
CompositionSettings? compositionSettings,
SourceMetadataInput? source,
IAnsiConsole console,
IApiClient client,
IHttpClientFactory httpClientFactory,
Expand Down Expand Up @@ -472,11 +486,11 @@ Task<string> RequestDeploymentSlotAsync(StatusContext? statusContext)
apiId,
stageName,
tag,
// As we could be publishing multiple source schemas,
// we do not associate this publish with a specific subgraph.
subgraphId: null,
subgraphName: null,
sourceSchemaVersions,
waitForApproval: false,
source,
statusContext,
console,
client,
Expand Down Expand Up @@ -534,7 +548,7 @@ async Task UploadConfigurationAsync(Stream stream, StatusContext? statusContext)
}
}

private static SourceSchemaVersion ParseSourceSchemaVersion(string input, string tag)
private static FusionPublishHelpers.SourceSchemaVersion ParseSourceSchemaVersion(string input, string tag)
{
var atIndex = input.LastIndexOf('@');

Expand All @@ -553,16 +567,14 @@ private static SourceSchemaVersion ParseSourceSchemaVersion(string input, string
throw new ArgumentException("The source schema version after the '@' cannot be empty.", nameof(input));
}

return new SourceSchemaVersion(name, version);
return new FusionPublishHelpers.SourceSchemaVersion(name, version);
}

if (string.IsNullOrWhiteSpace(input))
{
throw new ArgumentException("The source schema name cannot be empty.", nameof(input));
}

return new SourceSchemaVersion(input, tag);
return new FusionPublishHelpers.SourceSchemaVersion(input, tag);
}

private sealed record SourceSchemaVersion(string Name, string Version);
}
Loading
Loading