diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index b2cef523..32ad5816 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -36,6 +36,9 @@ permissions: repository-projects: none security-events: none statuses: write +concurrency: + group: 'lint-${{ github.event.pull_request.number }}' + cancel-in-progress: true jobs: lint: diff --git a/src/Nuke/GithubActions/CustomFileWriterExtensions.cs b/src/Nuke/GithubActions/CustomFileWriterExtensions.cs index 6785e2ed..ce733515 100644 --- a/src/Nuke/GithubActions/CustomFileWriterExtensions.cs +++ b/src/Nuke/GithubActions/CustomFileWriterExtensions.cs @@ -25,9 +25,9 @@ public static void WriteKeyValues(this CustomFileWriter writer, string key, IDic } } - private static void WriteValue(CustomFileWriter writer, KeyValuePair kvp) + internal static void WriteValue(this CustomFileWriter writer, KeyValuePair kvp) { - var (key, value) = kvp; + ( var key, var value ) = kvp; if (value.StartsWith('>') || value.StartsWith('|')) { var values = value.Split('\n'); @@ -52,4 +52,4 @@ private static void WriteValue(CustomFileWriter writer, KeyValuePair + /// The constructor for the + /// + /// + public GitHubActionsInputAttribute(string name) : base(name) { } + /// /// The type of the input /// @@ -16,20 +22,25 @@ public sealed class GitHubActionsInputAttribute : TriggerValueAttribute /// public bool? Required { get; set; } - /// - /// The constructor for the - /// - /// - public GitHubActionsInputAttribute(string name) : base(name) - { - } - /// /// Convert the attribute into an input /// /// public GitHubActionsInput ToInput() { - return new GitHubActionsInput(Name, Type, Default, Description, Required, Alias); + return new( + Name, + Type, + Default, + Description, + Required, + Alias + ); + } + + /// + public override ITriggerValue ToTriggerValue() + { + return ToInput(); } -} +} \ No newline at end of file diff --git a/src/Nuke/GithubActions/GitHubActionsLintAttribute.cs b/src/Nuke/GithubActions/GitHubActionsLintAttribute.cs index 972c8812..546e4521 100644 --- a/src/Nuke/GithubActions/GitHubActionsLintAttribute.cs +++ b/src/Nuke/GithubActions/GitHubActionsLintAttribute.cs @@ -1,3 +1,4 @@ +using System.Reflection; using Nuke.Common.CI; using Nuke.Common.CI.GitHubActions; using Nuke.Common.Execution; @@ -66,11 +67,27 @@ public override ConfigurationEntity GetConfiguration(IReadOnlyCollection() + .Where(z => z.Name == TokenSecret) + .Select(z => z.ToTriggerValue()) + .Select(value => string.IsNullOrWhiteSpace(value.Prefix) ? value.Name : $"{value.Prefix}.{value.Name}") + .FirstOrDefault() + ?? $$$"""secrets.{{{TokenSecret}}}"""; + + configuration.Concurrency = new() + { + CancelInProgress = true, + Group = "lint-${{ github.event.pull_request.number }}", + }; + buildJob .ConfigureStep( step => { - step.Token ??= $$$"""${{ secrets.{{{TokenSecret}}} }}"""; + step.Token ??= $$$"""${{ {{{secretPath}}} }}"""; step.FetchDepth = 0; step.Repository = "${{ github.event.pull_request.head.repo.full_name }}"; step.Ref = "${{ github.event.pull_request.head.ref }}"; @@ -91,7 +108,7 @@ public override ConfigurationEntity GetConfiguration(IReadOnlyCollection - /// Is the secret required + /// The constructor for the /// - public bool? Required { get; set; } + /// + public GitHubActionsSecretAttribute(string name) : base(name) { } /// - /// The constructor for the + /// Is the secret required /// - /// - public GitHubActionsSecretAttribute(string name) : base(name) - { - } + public bool? Required { get; set; } /// /// Convert to a secret @@ -25,6 +23,12 @@ public GitHubActionsSecretAttribute(string name) : base(name) /// public GitHubActionsSecret ToSecret() { - return new GitHubActionsSecret(Name, Description, Required, Alias); + return new(Name, Description, Required, Alias); + } + + /// + public override ITriggerValue ToTriggerValue() + { + return ToSecret(); } -} +} \ No newline at end of file diff --git a/src/Nuke/GithubActions/GitHubActionsVariableAttribute.cs b/src/Nuke/GithubActions/GitHubActionsVariableAttribute.cs index 8d93ba9b..0b48d4e6 100644 --- a/src/Nuke/GithubActions/GitHubActionsVariableAttribute.cs +++ b/src/Nuke/GithubActions/GitHubActionsVariableAttribute.cs @@ -7,17 +7,15 @@ namespace Rocket.Surgery.Nuke.GithubActions; public sealed class GitHubActionsVariableAttribute : TriggerValueAttribute { /// - /// Is the variable required + /// The constructor for the /// - public bool? Required { get; set; } + /// + public GitHubActionsVariableAttribute(string name) : base(name) { } /// - /// The constructor for the + /// Is the variable required /// - /// - public GitHubActionsVariableAttribute(string name) : base(name) - { - } + public bool? Required { get; set; } /// /// Convert to a variable @@ -25,6 +23,12 @@ public GitHubActionsVariableAttribute(string name) : base(name) /// public GitHubActionsVariable ToVariable() { - return new GitHubActionsVariable(Name, Description, Alias); + return new(Name, Description, Alias); + } + + /// + public override ITriggerValue ToTriggerValue() + { + return ToVariable(); } -} +} \ No newline at end of file diff --git a/src/Nuke/GithubActions/OnePasswordConnectServerSecretAttribute.cs b/src/Nuke/GithubActions/OnePasswordConnectServerSecretAttribute.cs index 020da721..57f9e8a1 100644 --- a/src/Nuke/GithubActions/OnePasswordConnectServerSecretAttribute.cs +++ b/src/Nuke/GithubActions/OnePasswordConnectServerSecretAttribute.cs @@ -71,4 +71,10 @@ public OnePasswordConnectServerSecret ToSecret() ConnectToken ?? "OP_CONNECT_TOKEN" ); } + + /// + public override ITriggerValue ToTriggerValue() + { + return ToSecret(); + } } \ No newline at end of file diff --git a/src/Nuke/GithubActions/OnePasswordSecretAttribute.cs b/src/Nuke/GithubActions/OnePasswordSecretAttribute.cs index 9ee3a7d3..4d11223e 100644 --- a/src/Nuke/GithubActions/OnePasswordSecretAttribute.cs +++ b/src/Nuke/GithubActions/OnePasswordSecretAttribute.cs @@ -120,4 +120,10 @@ internal ITriggerValue ToSecret() Secret ?? "OP_SERVICE_ACCOUNT_TOKEN" ); } + + /// + public override ITriggerValue ToTriggerValue() + { + return ToSecret(); + } } \ No newline at end of file diff --git a/src/Nuke/GithubActions/OnePasswordServiceAccountSecretAttribute.cs b/src/Nuke/GithubActions/OnePasswordServiceAccountSecretAttribute.cs index d177f4ab..5738b192 100644 --- a/src/Nuke/GithubActions/OnePasswordServiceAccountSecretAttribute.cs +++ b/src/Nuke/GithubActions/OnePasswordServiceAccountSecretAttribute.cs @@ -60,4 +60,10 @@ public OnePasswordServiceAccountSecret ToSecret() Secret ?? "OP_SERVICE_ACCOUNT_TOKEN" ); } + + /// + public override ITriggerValue ToTriggerValue() + { + return ToSecret(); + } } \ No newline at end of file diff --git a/src/Nuke/GithubActions/RocketSurgeonGitHubActionsConfiguration.cs b/src/Nuke/GithubActions/RocketSurgeonGitHubActionsConfiguration.cs index 655869ae..00e96cbc 100644 --- a/src/Nuke/GithubActions/RocketSurgeonGitHubActionsConfiguration.cs +++ b/src/Nuke/GithubActions/RocketSurgeonGitHubActionsConfiguration.cs @@ -35,12 +35,22 @@ public class RocketSurgeonGitHubActionsConfiguration : ConfigurationEntity public List Jobs { get; set; } = new(); /// - /// The dependencies of this job + /// The dependencies of this workflow /// public Dictionary Environment { get; set; } = new(StringComparer.OrdinalIgnoreCase); /// - /// The permissions of this workflow + /// The concurrency of the workflow + /// + public RocketSurgeonsGithubActionsConcurrency? Concurrency { get; set; } + + /// + /// The defaults of the job + /// + public RocketSurgeonsGithubActionsDefaults? Defaults { get; set; } + + /// + /// The permissions of this workflow /// public GitHubActionsPermissions Permissions { get; set; } = new(); @@ -66,6 +76,17 @@ public override void Write(CustomFileWriter writer) Permissions.Write(writer); writer.WriteKeyValues("env", Environment); + if (Concurrency is { } concurrency) + { + writer.WriteLine("concurrency:"); + concurrency.Write(writer); + } + + if (Defaults is { } defaults) + { + writer.WriteLine("defaults:"); + defaults.Write(writer); + } writer.WriteLine(); @@ -75,4 +96,4 @@ public override void Write(CustomFileWriter writer) Jobs.ForEach(x => x.Write(writer)); } } -} +} \ No newline at end of file diff --git a/src/Nuke/GithubActions/RocketSurgeonsGithubActionsConcurrency.cs b/src/Nuke/GithubActions/RocketSurgeonsGithubActionsConcurrency.cs new file mode 100644 index 00000000..9358a333 --- /dev/null +++ b/src/Nuke/GithubActions/RocketSurgeonsGithubActionsConcurrency.cs @@ -0,0 +1,34 @@ +using Nuke.Common.CI; + +namespace Rocket.Surgery.Nuke.GithubActions; + +/// +/// The concurrency settings for a workflow or job +/// +public class RocketSurgeonsGithubActionsConcurrency : ConfigurationEntity +{ + /// + /// The concurrency group + /// + public string? Group { get; set; } + + /// + /// Cancel existing jobs + /// + public bool? CancelInProgress { get; set; } + + /// + public override void Write(CustomFileWriter writer) + { + using var _ = writer.Indent(); + if (!string.IsNullOrWhiteSpace(Group)) + { + writer.WriteValue(new("group", Group)); + } + + if (CancelInProgress.HasValue) + { + writer.WriteLine($"cancel-in-progress: {CancelInProgress.Value.ToString().ToLowerInvariant()}"); + } + } +} \ No newline at end of file diff --git a/src/Nuke/GithubActions/RocketSurgeonsGithubActionsDefaults.cs b/src/Nuke/GithubActions/RocketSurgeonsGithubActionsDefaults.cs new file mode 100644 index 00000000..6578777f --- /dev/null +++ b/src/Nuke/GithubActions/RocketSurgeonsGithubActionsDefaults.cs @@ -0,0 +1,23 @@ +using Nuke.Common.CI; + +namespace Rocket.Surgery.Nuke.GithubActions; + +/// +/// The job defaults +/// +public class RocketSurgeonsGithubActionsDefaults : ConfigurationEntity +{ + /// + /// The defaults of run + /// + public RocketSurgeonsGithubActionsDefaultsRun? Run { get; set; } + + /// + public override void Write(CustomFileWriter writer) + { + using var _ = writer.Indent(); + if (Run is null) return; + writer.WriteLine("run:"); + Run.Write(writer); + } +} \ No newline at end of file diff --git a/src/Nuke/GithubActions/RocketSurgeonsGithubActionsDefaultsRun.cs b/src/Nuke/GithubActions/RocketSurgeonsGithubActionsDefaultsRun.cs new file mode 100644 index 00000000..1eef99c5 --- /dev/null +++ b/src/Nuke/GithubActions/RocketSurgeonsGithubActionsDefaultsRun.cs @@ -0,0 +1,28 @@ +using Nuke.Common.CI; + +namespace Rocket.Surgery.Nuke.GithubActions; + +/// +/// The job run defaults +/// +public class RocketSurgeonsGithubActionsDefaultsRun : ConfigurationEntity +{ + /// + /// The shell + /// + public GithubActionShell? Shell { get; set; } + + /// + /// The working directory where the script is run + /// + public string? WorkingDirectory { get; set; } + + public override void Write(CustomFileWriter writer) + { + using var _ = writer.Indent(); + if (!string.IsNullOrWhiteSpace(WorkingDirectory)) + writer.WriteLine($"working-directory: {WorkingDirectory}"); + if (!string.IsNullOrWhiteSpace(Shell?.ToString())) + writer.WriteLine($"shell: {Shell}"); + } +} \ No newline at end of file diff --git a/src/Nuke/GithubActions/RocketSurgeonsGithubActionsJobBase.cs b/src/Nuke/GithubActions/RocketSurgeonsGithubActionsJobBase.cs index 80f96977..8b50e5ec 100644 --- a/src/Nuke/GithubActions/RocketSurgeonsGithubActionsJobBase.cs +++ b/src/Nuke/GithubActions/RocketSurgeonsGithubActionsJobBase.cs @@ -40,6 +40,16 @@ protected RocketSurgeonsGithubActionsJobBase(string name) /// public GithubActionCondition? If { get; set; } + /// + /// The concurrency of the job + /// + public RocketSurgeonsGithubActionsConcurrency? Concurrency { get; set; } + + /// + /// The defaults of the job + /// + public RocketSurgeonsGithubActionsDefaults? Defaults { get; set; } + /// /// The outputs of this job /// @@ -65,6 +75,17 @@ public override void Write(CustomFileWriter writer) writer.WriteKeyValues("outputs", Outputs.ToDictionary(z => $"{z.StepName}{z.OutputName.Pascalize()}".Camelize(), z => z.ToString())); writer.WriteKeyValues("env", Environment); + if (Concurrency is { } concurrency) + { + writer.WriteLine("concurrency:"); + concurrency.Write(writer); + } + + if (Defaults is { } defaults) + { + writer.WriteLine("defaults:"); + defaults.Write(writer); + } if (!string.IsNullOrWhiteSpace(If?.ToString())) { @@ -72,4 +93,4 @@ public override void Write(CustomFileWriter writer) } } } -} +} \ No newline at end of file diff --git a/src/Nuke/GithubActions/TriggerValueAttribute.cs b/src/Nuke/GithubActions/TriggerValueAttribute.cs index 9d0dde32..54495b38 100644 --- a/src/Nuke/GithubActions/TriggerValueAttribute.cs +++ b/src/Nuke/GithubActions/TriggerValueAttribute.cs @@ -6,6 +6,15 @@ namespace Rocket.Surgery.Nuke.GithubActions; [AttributeUsage(AttributeTargets.Class)] public abstract class TriggerValueAttribute : Attribute { + /// + /// The default constructor + /// + /// + protected TriggerValueAttribute(string name) + { + Name = name; + } + /// /// The name of the trigger value /// @@ -27,11 +36,8 @@ public abstract class TriggerValueAttribute : Attribute public string? Default { get; set; } /// - /// The default constructor + /// An internal way to get access to the trigger value /// - /// - protected TriggerValueAttribute(string name) - { - Name = name; - } -} + /// + public abstract ITriggerValue ToTriggerValue(); +} \ No newline at end of file diff --git a/src/Nuke/PublicAPI.Shipped.txt b/src/Nuke/PublicAPI.Shipped.txt index 79d71c99..a8735cc5 100644 --- a/src/Nuke/PublicAPI.Shipped.txt +++ b/src/Nuke/PublicAPI.Shipped.txt @@ -1,4 +1,5 @@ #nullable enable +abstract Rocket.Surgery.Nuke.GithubActions.TriggerValueAttribute.ToTriggerValue() -> Rocket.Surgery.Nuke.GithubActions.ITriggerValue! override Rocket.Surgery.Nuke.Azp.AzurePipelinesParameter.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void override Rocket.Surgery.Nuke.Azp.AzurePipelinesSteps.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void override Rocket.Surgery.Nuke.AzurePipelinesStepsAttribute.ConfigurationFile.get -> Nuke.Common.IO.AbsolutePath! @@ -26,8 +27,10 @@ override Rocket.Surgery.Nuke.GithubActions.DownloadArtifactSet.ComputeStepName(s override Rocket.Surgery.Nuke.GithubActions.DownloadArtifactSet.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void override Rocket.Surgery.Nuke.GithubActions.GithubActionCondition.ToString() -> string? override Rocket.Surgery.Nuke.GithubActions.GithubActionShell.ToString() -> string! +override Rocket.Surgery.Nuke.GithubActions.GitHubActionsInputAttribute.ToTriggerValue() -> Rocket.Surgery.Nuke.GithubActions.ITriggerValue! override Rocket.Surgery.Nuke.GithubActions.GitHubActionsLintAttribute.GetConfiguration(System.Collections.Generic.IReadOnlyCollection! relevantTargets) -> Nuke.Common.CI.ConfigurationEntity! override Rocket.Surgery.Nuke.GithubActions.GithubActionsNukeParameter.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void +override Rocket.Surgery.Nuke.GithubActions.GitHubActionsSecretAttribute.ToTriggerValue() -> Rocket.Surgery.Nuke.GithubActions.ITriggerValue! override Rocket.Surgery.Nuke.GithubActions.GitHubActionsStepOutput.ToString() -> string! override Rocket.Surgery.Nuke.GithubActions.GitHubActionsStepsAttribute.GeneratedFiles.get -> System.Collections.Generic.IEnumerable! override Rocket.Surgery.Nuke.GithubActions.GitHubActionsStepsAttribute.GetConfiguration(System.Collections.Generic.IReadOnlyCollection! relevantTargets) -> Nuke.Common.CI.ConfigurationEntity! @@ -36,11 +39,18 @@ override Rocket.Surgery.Nuke.GithubActions.GitHubActionsStepsAttribute.RelevantT override Rocket.Surgery.Nuke.GithubActions.GithubActionsStepsAttributeBase.ConfigurationFile.get -> Nuke.Common.IO.AbsolutePath! override Rocket.Surgery.Nuke.GithubActions.GithubActionsStepsAttributeBase.CreateWriter(System.IO.StreamWriter! streamWriter) -> Nuke.Common.Utilities.CustomFileWriter! override Rocket.Surgery.Nuke.GithubActions.GithubActionsStepsAttributeBase.HostType.get -> System.Type! +override Rocket.Surgery.Nuke.GithubActions.GitHubActionsVariableAttribute.ToTriggerValue() -> Rocket.Surgery.Nuke.GithubActions.ITriggerValue! override Rocket.Surgery.Nuke.GithubActions.GitHubActionsWorkflowOutput.ToString() -> string! override Rocket.Surgery.Nuke.GithubActions.HeadlessRunStep.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void +override Rocket.Surgery.Nuke.GithubActions.OnePasswordConnectServerSecretAttribute.ToTriggerValue() -> Rocket.Surgery.Nuke.GithubActions.ITriggerValue! +override Rocket.Surgery.Nuke.GithubActions.OnePasswordSecretAttribute.ToTriggerValue() -> Rocket.Surgery.Nuke.GithubActions.ITriggerValue! +override Rocket.Surgery.Nuke.GithubActions.OnePasswordServiceAccountSecretAttribute.ToTriggerValue() -> Rocket.Surgery.Nuke.GithubActions.ITriggerValue! override Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsConfiguration.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void override Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsVcsTrigger.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void override Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsWorkflowTrigger.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void +override Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsConcurrency.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void +override Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaults.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void +override Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaultsRun.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void override Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJob.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void override Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJobBase.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void override Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubWorkflowJob.Write(Nuke.Common.Utilities.CustomFileWriter! writer) -> void @@ -522,6 +532,10 @@ Rocket.Surgery.Nuke.GithubActions.OnePasswordServiceAccountSecretAttribute.Secre Rocket.Surgery.Nuke.GithubActions.OnePasswordServiceAccountSecretAttribute.ToSecret() -> Rocket.Surgery.Nuke.GithubActions.OnePasswordServiceAccountSecret! Rocket.Surgery.Nuke.GithubActions.OnePasswordServiceAccountSecretAttribute.Variable.get -> string? Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsConfiguration +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsConfiguration.Concurrency.get -> Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsConcurrency? +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsConfiguration.Concurrency.set -> void +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsConfiguration.Defaults.get -> Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaults? +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsConfiguration.Defaults.set -> void Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsConfiguration.DetailedTriggers.get -> System.Collections.Generic.List! Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsConfiguration.DetailedTriggers.set -> void Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsConfiguration.Environment.get -> System.Collections.Generic.Dictionary! @@ -563,6 +577,22 @@ Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsWorkflowTrigger.Outp Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsWorkflowTrigger.RocketSurgeonGitHubActionsWorkflowTrigger() -> void Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsWorkflowTrigger.Secrets.get -> System.Collections.Generic.List! Rocket.Surgery.Nuke.GithubActions.RocketSurgeonGitHubActionsWorkflowTrigger.Secrets.set -> void +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsConcurrency +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsConcurrency.CancelInProgress.get -> bool? +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsConcurrency.CancelInProgress.set -> void +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsConcurrency.Group.get -> string? +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsConcurrency.Group.set -> void +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsConcurrency.RocketSurgeonsGithubActionsConcurrency() -> void +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaults +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaults.RocketSurgeonsGithubActionsDefaults() -> void +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaults.Run.get -> Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaultsRun? +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaults.Run.set -> void +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaultsRun +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaultsRun.RocketSurgeonsGithubActionsDefaultsRun() -> void +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaultsRun.Shell.get -> Rocket.Surgery.Nuke.GithubActions.GithubActionShell? +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaultsRun.Shell.set -> void +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaultsRun.WorkingDirectory.get -> string? +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaultsRun.WorkingDirectory.set -> void Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJob Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJob.FailFast.get -> bool Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJob.FailFast.set -> void @@ -576,6 +606,10 @@ Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJob.RunsOn.set -> v Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJob.Steps.get -> System.Collections.Generic.List! Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJob.Steps.set -> void Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJobBase +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJobBase.Concurrency.get -> Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsConcurrency? +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJobBase.Concurrency.set -> void +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJobBase.Defaults.get -> Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsDefaults? +Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJobBase.Defaults.set -> void Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJobBase.Environment.get -> System.Collections.Generic.Dictionary! Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJobBase.Environment.set -> void Rocket.Surgery.Nuke.GithubActions.RocketSurgeonsGithubActionsJobBase.If.get -> Rocket.Surgery.Nuke.GithubActions.GithubActionCondition?