diff --git a/src/Dockerfile b/src/Dockerfile index abbc1615..420fa0eb 100755 --- a/src/Dockerfile +++ b/src/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 @@ -6,7 +6,7 @@ EXPOSE 443 RUN apt-get -y update RUN apt-get install -y libsecret-1-0 -FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src COPY ["./Nox.Cli.Server/Nox.Cli.Server.csproj", "Nox.Cli.Server/"] diff --git a/src/Nox.Cli.Abstractions/Caching/INoxCliCacheManager.cs b/src/Nox.Cli.Abstractions/Caching/INoxCliCacheManager.cs index 41447ab2..1d7e6a75 100755 --- a/src/Nox.Cli.Abstractions/Caching/INoxCliCacheManager.cs +++ b/src/Nox.Cli.Abstractions/Caching/INoxCliCacheManager.cs @@ -1,4 +1,5 @@ using Nox.Cli.Abstractions.Configuration; +using Nox.Cli.Configuration; namespace Nox.Cli.Abstractions.Caching; @@ -11,7 +12,7 @@ public interface INoxCliCacheManager IManifestConfiguration? Manifest { get; } - List? Workflows { get; } + List? Workflows { get; } List BuildLog { get; } diff --git a/src/Nox.Cli.Configuration/ActionConfiguration.cs b/src/Nox.Cli.Abstractions/Configuration/ActionConfiguration.cs similarity index 91% rename from src/Nox.Cli.Configuration/ActionConfiguration.cs rename to src/Nox.Cli.Abstractions/Configuration/ActionConfiguration.cs index 2719bdd7..e291c94f 100755 --- a/src/Nox.Cli.Configuration/ActionConfiguration.cs +++ b/src/Nox.Cli.Abstractions/Configuration/ActionConfiguration.cs @@ -2,7 +2,7 @@ namespace Nox.Cli.Configuration; -public class ActionConfiguration: IActionConfiguration +public class ActionConfiguration { public string Id { get; set; } = string.Empty; public string? If { get; set; } = null; diff --git a/src/Nox.Cli.Configuration/CliConfiguration.cs b/src/Nox.Cli.Abstractions/Configuration/CliConfiguration.cs similarity index 87% rename from src/Nox.Cli.Configuration/CliConfiguration.cs rename to src/Nox.Cli.Abstractions/Configuration/CliConfiguration.cs index 419171be..ed7db369 100755 --- a/src/Nox.Cli.Configuration/CliConfiguration.cs +++ b/src/Nox.Cli.Abstractions/Configuration/CliConfiguration.cs @@ -2,7 +2,7 @@ namespace Nox.Cli.Configuration; -public class CliConfiguration: ICliConfiguration +public class CliConfiguration { public string Branch { get; set; } = string.Empty; public string Command { get; set; } = string.Empty; diff --git a/src/Nox.Cli.Abstractions/Configuration/IActionConfiguration.cs b/src/Nox.Cli.Abstractions/Configuration/IActionConfiguration.cs deleted file mode 100755 index 6f7d8284..00000000 --- a/src/Nox.Cli.Abstractions/Configuration/IActionConfiguration.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Nox.Cli.Abstractions; - -public interface IActionConfiguration -{ - string Id { get; set; } - string? If { get; set; } - string Name { get; set; } - string Uses { get; set; } - Dictionary With { get; set; } - Dictionary? Validate { get; set; } - NoxActionDisplayMessage? Display { get; set; } - bool ContinueOnError { get; set; } - bool RunAtServer { get; set; } -} \ No newline at end of file diff --git a/src/Nox.Cli.Abstractions/Configuration/ICliConfiguration.cs b/src/Nox.Cli.Abstractions/Configuration/ICliConfiguration.cs deleted file mode 100755 index 0ae58207..00000000 --- a/src/Nox.Cli.Abstractions/Configuration/ICliConfiguration.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Nox.Cli.Abstractions.Configuration; - -public interface ICliConfiguration -{ - string Branch { get; set; } - string Command { get; set; } - string? CommandAlias { get; set; } - string? Description { get; set; } - List? Examples { get; set; } - -} \ No newline at end of file diff --git a/src/Nox.Cli.Abstractions/Configuration/IJobConfiguration.cs b/src/Nox.Cli.Abstractions/Configuration/IJobConfiguration.cs deleted file mode 100644 index e2b9d423..00000000 --- a/src/Nox.Cli.Abstractions/Configuration/IJobConfiguration.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Nox.Cli.Abstractions.Configuration; - -public interface IJobConfiguration -{ - string Id { get; set; } - string Name { get; set; } - string? If { get; set; } - string? ForEach { get; set; } - NoxJobDisplayMessage? Display { get; set; } - List Steps { get; set; } -} \ No newline at end of file diff --git a/src/Nox.Cli.Abstractions/Configuration/IWorkflowConfiguration.cs b/src/Nox.Cli.Abstractions/Configuration/IWorkflowConfiguration.cs deleted file mode 100755 index f8643757..00000000 --- a/src/Nox.Cli.Abstractions/Configuration/IWorkflowConfiguration.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Nox.Cli.Abstractions.Configuration; - -public interface IWorkflowConfiguration -{ - string Name { get; set; } - string Description { get; set; } - ICliConfiguration Cli { get; set; } - List Jobs { get; set; } -} \ No newline at end of file diff --git a/src/Nox.Cli.Configuration/JobConfiguration.cs b/src/Nox.Cli.Abstractions/Configuration/JobConfiguration.cs similarity index 75% rename from src/Nox.Cli.Configuration/JobConfiguration.cs rename to src/Nox.Cli.Abstractions/Configuration/JobConfiguration.cs index 8ba50c7d..c7c9b12b 100644 --- a/src/Nox.Cli.Configuration/JobConfiguration.cs +++ b/src/Nox.Cli.Abstractions/Configuration/JobConfiguration.cs @@ -3,7 +3,7 @@ namespace Nox.Cli.Configuration; -public class JobConfiguration: IJobConfiguration +public class JobConfiguration { public string Id { get; set; } = string.Empty; @@ -13,5 +13,5 @@ public class JobConfiguration: IJobConfiguration public string? ForEach { get; set; } public NoxJobDisplayMessage? Display { get; set; } - public List Steps { get; set; } = new(); + public List Steps { get; set; } = new(); } \ No newline at end of file diff --git a/src/Nox.Cli.Abstractions/Configuration/WorkflowConfiguration.cs b/src/Nox.Cli.Abstractions/Configuration/WorkflowConfiguration.cs new file mode 100755 index 00000000..5f5292f6 --- /dev/null +++ b/src/Nox.Cli.Abstractions/Configuration/WorkflowConfiguration.cs @@ -0,0 +1,13 @@ +using Nox.Cli.Abstractions.Configuration; +using Nox.Yaml; + +namespace Nox.Cli.Configuration; + +public class WorkflowConfiguration: YamlConfigNode +{ + public string Name { get; set; } = string.Empty; + public string Description { get; set; } = string.Empty; + public CliConfiguration Cli { get; set; } = null!; + public List Jobs { get; set; } = new(); +} + diff --git a/src/Nox.Cli.Abstractions/INoxWorkflowExecutor.cs b/src/Nox.Cli.Abstractions/INoxWorkflowExecutor.cs index 7dbcbda0..ab5d512d 100755 --- a/src/Nox.Cli.Abstractions/INoxWorkflowExecutor.cs +++ b/src/Nox.Cli.Abstractions/INoxWorkflowExecutor.cs @@ -1,9 +1,10 @@ using Nox.Cli.Abstractions.Configuration; +using Nox.Cli.Configuration; using Spectre.Console.Cli; namespace Nox.Cli.Abstractions; public interface INoxWorkflowExecutor { - Task Execute(IWorkflowConfiguration workflow, IRemainingArguments arguments); + Task Execute(WorkflowConfiguration workflow, IRemainingArguments arguments); } \ No newline at end of file diff --git a/src/Nox.Cli.Abstractions/Nox.Cli.Abstractions.csproj b/src/Nox.Cli.Abstractions/Nox.Cli.Abstractions.csproj index e2e08535..5c096f77 100755 --- a/src/Nox.Cli.Abstractions/Nox.Cli.Abstractions.csproj +++ b/src/Nox.Cli.Abstractions/Nox.Cli.Abstractions.csproj @@ -8,8 +8,8 @@ - + - + diff --git a/src/Nox.Cli.Caching/Nox.Cli.Caching.csproj b/src/Nox.Cli.Caching/Nox.Cli.Caching.csproj index 9e307b9b..8b271631 100755 --- a/src/Nox.Cli.Caching/Nox.Cli.Caching.csproj +++ b/src/Nox.Cli.Caching/Nox.Cli.Caching.csproj @@ -14,10 +14,10 @@ - + + - diff --git a/src/Nox.Cli.Caching/NoxCliCacheManager.cs b/src/Nox.Cli.Caching/NoxCliCacheManager.cs index a1091d45..b659e8ff 100755 --- a/src/Nox.Cli.Caching/NoxCliCacheManager.cs +++ b/src/Nox.Cli.Caching/NoxCliCacheManager.cs @@ -9,6 +9,7 @@ using Nox.Cli.Abstractions.Helpers; using Nox.Cli.Configuration; using Nox.Cli.Helpers; +using Nox.Yaml; using RestSharp; using Spectre.Console; using YamlDotNet.Serialization; @@ -31,7 +32,7 @@ public class NoxCliCacheManager: INoxCliCacheManager private Uri? _workflowUri; private List _buildLog; private IManifestConfiguration? _manifest; - private List? _workflows; + private List? _workflows; private IPersistedTokenCache? _tokenCache; private IDeserializer _deserializer; private string? _tenantId; @@ -96,7 +97,7 @@ public IManifestConfiguration? Manifest get => _manifest; } - public List? Workflows + public List? Workflows { get => _workflows; } @@ -349,10 +350,13 @@ internal void GetOnlineWorkflowsAndManifest(IDictionary yamlFile File.Delete(Path.Combine(_workflowCachePath, orphanEntry)); } - foreach (var entry in yamlFiles) - { - yamlFiles[entry.Key] = YamlHelper.ResolveYamlReferences(Path.Combine(_workflowCachePath, entry.Key)); - } + + + + // foreach (var entry in yamlFiles) + // { + // yamlFiles[entry.Key] = YamlHelper.ResolveYamlReferences(Path.Combine(_workflowCachePath, entry.Key)); + // } _cache!.WorkflowInfo = onlineFiles; if (hasRefreshed) RaiseBuildEvent($"[bold yellow]Workflow cache successfully updated from remote.[/]"); @@ -403,9 +407,9 @@ private IDeserializer BuildDeserializer() return new DeserializerBuilder() .WithNamingConvention(HyphenatedNamingConvention.Instance) .IgnoreUnmatchedProperties() - .WithTypeMapping() - .WithTypeMapping() - .WithTypeMapping() + //.WithTypeMapping() + //.WithTypeMapping() + //.WithTypeMapping() .WithTypeMapping() .WithTypeMapping() .WithTypeMapping() @@ -426,16 +430,20 @@ internal void ResolveManifest(Dictionary yamlFiles) internal void ResolveWorkflows(Dictionary yamlFiles) { - _workflows = new List(); - foreach (var yaml in yamlFiles.Where(kv => kv.Key.EndsWith(FileExtension.WorkflowDefinition.TrimStart('*')))) + _workflows = new List(); + var workflowFiles = yamlFiles.Where(f => f.Key.EndsWith("workflow.nox.yaml", StringComparison.OrdinalIgnoreCase)); + foreach (var workflowFile in workflowFiles) { + var reader = new YamlConfigurationReader() + .WithFile(Path.Combine(_workflowCachePath, workflowFile.Key)); try { - _workflows.Add(_deserializer.Deserialize(yaml.Value)); + var workflow = reader.Read(); + _workflows.Add(workflow); } - catch (Exception ex) + catch(Exception ex) { - throw new NoxCliException($"Unable to deserialize workflow {yaml.Key}. {ex.Message}"); + throw new NoxCliException($"Unable to parse workflow file {workflowFile.Key}", ex); } } } diff --git a/src/Nox.Cli.Configuration/WorkflowConfiguration.cs b/src/Nox.Cli.Configuration/WorkflowConfiguration.cs deleted file mode 100755 index dd09e2f9..00000000 --- a/src/Nox.Cli.Configuration/WorkflowConfiguration.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Nox.Cli.Abstractions.Configuration; - -namespace Nox.Cli.Configuration; - -public class WorkflowConfiguration: IWorkflowConfiguration -{ - public string Name { get; set; } = string.Empty; - public string Description { get; set; } = string.Empty; - public ICliConfiguration Cli { get; set; } = null!; - public List Jobs { get; set; } = new(); -} - diff --git a/src/Nox.Cli.Server/Nox.Cli.Server.csproj b/src/Nox.Cli.Server/Nox.Cli.Server.csproj index 786e20c8..1676b457 100755 --- a/src/Nox.Cli.Server/Nox.Cli.Server.csproj +++ b/src/Nox.Cli.Server/Nox.Cli.Server.csproj @@ -10,7 +10,7 @@ - + diff --git a/src/Nox.Cli.Variables/ClientVariableProvider.cs b/src/Nox.Cli.Variables/ClientVariableProvider.cs index 527a2314..8346a719 100755 --- a/src/Nox.Cli.Variables/ClientVariableProvider.cs +++ b/src/Nox.Cli.Variables/ClientVariableProvider.cs @@ -3,6 +3,7 @@ using Nox.Cli.Abstractions; using Nox.Cli.Abstractions.Caching; using Nox.Cli.Abstractions.Configuration; +using Nox.Cli.Configuration; using Nox.Cli.Variables.Secrets; using Nox.Solution; using YamlDotNet.Serialization; @@ -22,7 +23,7 @@ public class ClientVariableProvider: IClientVariableProvider public ClientVariableProvider( - IWorkflowConfiguration workflow, + WorkflowConfiguration workflow, IOrgSecretResolver orgSecretResolver, NoxSolution? projectConfig = null, ILocalTaskExecutorConfiguration? lteConfig = null, @@ -187,7 +188,7 @@ public void ResolveJobVariables(INoxJob job) } } - private void Initialize(IWorkflowConfiguration workflow) + private void Initialize(WorkflowConfiguration workflow) { var serializer = new SerializerBuilder() .WithNamingConvention(CamelCaseNamingConvention.Instance) diff --git a/src/Nox.Cli.Variables/Nox.Cli.Variables.csproj b/src/Nox.Cli.Variables/Nox.Cli.Variables.csproj index d7ff7cf7..3ac64cd8 100755 --- a/src/Nox.Cli.Variables/Nox.Cli.Variables.csproj +++ b/src/Nox.Cli.Variables/Nox.Cli.Variables.csproj @@ -17,7 +17,7 @@ - + diff --git a/src/Nox.Cli.WorkflowBuilder/Nox.Cli.WorkflowBuilder.csproj b/src/Nox.Cli.WorkflowBuilder/Nox.Cli.WorkflowBuilder.csproj new file mode 100644 index 00000000..6836c680 --- /dev/null +++ b/src/Nox.Cli.WorkflowBuilder/Nox.Cli.WorkflowBuilder.csproj @@ -0,0 +1,9 @@ + + + + net7.0 + enable + enable + + + diff --git a/src/Nox.Cli.WorkflowBuilder/WorkflowConfigurationReader.cs b/src/Nox.Cli.WorkflowBuilder/WorkflowConfigurationReader.cs new file mode 100644 index 00000000..92e98c6c --- /dev/null +++ b/src/Nox.Cli.WorkflowBuilder/WorkflowConfigurationReader.cs @@ -0,0 +1,6 @@ +namespace Nox.Cli.WorkflowBuilder; + +public class WorkflowConfigurationReader +{ + +} \ No newline at end of file diff --git a/src/Nox.Cli/Actions/NoxWorkflowContext.cs b/src/Nox.Cli/Actions/NoxWorkflowContext.cs index 925bed64..91dc5594 100755 --- a/src/Nox.Cli/Actions/NoxWorkflowContext.cs +++ b/src/Nox.Cli/Actions/NoxWorkflowContext.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using Nox.Cli.Abstractions.Caching; using Nox.Cli.Abstractions.Exceptions; +using Nox.Cli.Configuration; using Nox.Cli.Variables.Secrets; using Nox.Secrets.Abstractions; using Nox.Solution; @@ -15,7 +16,7 @@ namespace Nox.Cli.Actions; public class NoxWorkflowContext : INoxWorkflowContext { - private readonly IWorkflowConfiguration _workflow; + private readonly WorkflowConfiguration _workflow; private readonly NoxJobDictionary _jobs; private IDictionary _steps; private readonly IClientVariableProvider _varProvider; @@ -39,7 +40,7 @@ public class NoxWorkflowContext : INoxWorkflowContext public INoxAction? CurrentAction => _currentAction; public NoxWorkflowContext( - IWorkflowConfiguration workflow, + WorkflowConfiguration workflow, NoxSolution projectConfig, IOrgSecretResolver orgSecretResolver, INoxCliCacheManager cacheManager, @@ -260,7 +261,7 @@ public INoxJob ParseJob(string jobId, int sequence) return newJob; } - private Dictionary ParseSteps(IJobConfiguration jobConfiguration, bool ignoreDuplicateSteps = false) + private Dictionary ParseSteps(JobConfiguration jobConfiguration, bool ignoreDuplicateSteps = false) { var sequence = 1; var steps = new Dictionary(StringComparer.OrdinalIgnoreCase); diff --git a/src/Nox.Cli/Actions/NoxWorkflowExecutor.cs b/src/Nox.Cli/Actions/NoxWorkflowExecutor.cs index 82cf32da..3567ecae 100755 --- a/src/Nox.Cli/Actions/NoxWorkflowExecutor.cs +++ b/src/Nox.Cli/Actions/NoxWorkflowExecutor.cs @@ -3,6 +3,7 @@ using Nox.Cli.Abstractions.Caching; using Nox.Cli.Abstractions.Configuration; using Nox.Cli.Abstractions.Exceptions; +using Nox.Cli.Configuration; using Nox.Cli.ServerIntegration; using Nox.Cli.Variables; using Nox.Cli.Variables.Secrets; @@ -43,7 +44,7 @@ public NoxWorkflowExecutor( _noxSecretsResolver = noxSecretsResolver; } - public async Task Execute(IWorkflowConfiguration workflow, IRemainingArguments arguments) + public async Task Execute(WorkflowConfiguration workflow, IRemainingArguments arguments) { var workflowDescription = $"[seagreen1]Executing workflow: {workflow.Name.EscapeMarkup()}[/]"; _console.WriteLine(); diff --git a/src/Nox.Cli/Nox.Cli.csproj b/src/Nox.Cli/Nox.Cli.csproj index 31947a8a..16f618b0 100755 --- a/src/Nox.Cli/Nox.Cli.csproj +++ b/src/Nox.Cli/Nox.Cli.csproj @@ -39,7 +39,7 @@ - + diff --git a/src/Nox.Cli/Properties/launchSettings.json b/src/Nox.Cli/Properties/launchSettings.json index c969d511..184d2a53 100755 --- a/src/Nox.Cli/Properties/launchSettings.json +++ b/src/Nox.Cli/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "Nox.Cli": { "commandName": "Project", - "commandLineArgs": "sync helm-chart", + "commandLineArgs": "sync vc", "workingDirectory": "/home/jan/demo/CliDemo", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development"