diff --git a/src/Fallout.Build/Attributes/ArgumentsFromGitCommitMessageAttribute.cs b/src/Fallout.Build/Attributes/ArgumentsFromGitCommitMessageAttribute.cs index 4dcd435f..d49347d6 100644 --- a/src/Fallout.Build/Attributes/ArgumentsFromGitCommitMessageAttribute.cs +++ b/src/Fallout.Build/Attributes/ArgumentsFromGitCommitMessageAttribute.cs @@ -12,7 +12,7 @@ public class ArgumentsFromGitCommitMessageAttribute : BuildExtensionAttributeBas { public string Prefix { get; set; } = "[nuke++]"; - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { if (BuildServerConfigurationGeneration.IsActive) return; diff --git a/src/Fallout.Build/Attributes/UnsetVisualStudioEnvironmentVariablesAttribute.cs b/src/Fallout.Build/Attributes/UnsetVisualStudioEnvironmentVariablesAttribute.cs index f8ca1f93..893437d1 100644 --- a/src/Fallout.Build/Attributes/UnsetVisualStudioEnvironmentVariablesAttribute.cs +++ b/src/Fallout.Build/Attributes/UnsetVisualStudioEnvironmentVariablesAttribute.cs @@ -7,7 +7,7 @@ namespace Fallout.Common.Execution; public class UnsetVisualStudioEnvironmentVariablesAttribute : BuildExtensionAttributeBase, IOnBuildCreated { - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { new[] { diff --git a/src/Fallout.Build/Attributes/VerbosityMappingAttribute.cs b/src/Fallout.Build/Attributes/VerbosityMappingAttribute.cs index 9afcd317..1bd09092 100644 --- a/src/Fallout.Build/Attributes/VerbosityMappingAttribute.cs +++ b/src/Fallout.Build/Attributes/VerbosityMappingAttribute.cs @@ -21,8 +21,8 @@ public VerbosityMappingAttribute(Type targetType) public string Verbose { get; set; } public void OnBuildInitialized( - IReadOnlyCollection executableTargets, - IReadOnlyCollection executionPlan) + IReadOnlyCollection executableTargets, + IReadOnlyCollection executionPlan) { object GetMappedValue(string name) => _targetType diff --git a/src/Fallout.Build/CICD/GenerateBuildServerConfigurationsAttribute.cs b/src/Fallout.Build/CICD/GenerateBuildServerConfigurationsAttribute.cs index bcc71641..5eccb091 100644 --- a/src/Fallout.Build/CICD/GenerateBuildServerConfigurationsAttribute.cs +++ b/src/Fallout.Build/CICD/GenerateBuildServerConfigurationsAttribute.cs @@ -10,7 +10,7 @@ namespace Fallout.Common.CI; public class GenerateBuildServerConfigurationsAttribute : BuildServerConfigurationGenerationAttributeBase, IOnBuildCreated { - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { var configurationId = ParameterService.GetParameter(ConfigurationParameterName); if (configurationId == null) @@ -23,7 +23,7 @@ public void OnBuildCreated(IReadOnlyCollection executableTarge .SingleOrDefaultOrError($"Found multiple {nameof(IConfigurationGenerator)} with same ID '{configurationId}'.") .NotNull("generator != null"); - generator.Generate(executableTargets); + generator.Generate(executableTargets.Cast().ToList()); Environment.Exit(0); } diff --git a/src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs b/src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs index 371214e8..9b5bf190 100644 --- a/src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs +++ b/src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs @@ -12,7 +12,7 @@ namespace Fallout.Common.CI; public class InvokeBuildServerConfigurationGenerationAttribute : BuildServerConfigurationGenerationAttributeBase, IOnBuildCreated { - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { if (Build.IsServerBuild || Build.IsInterceptorExecution) return; diff --git a/src/Fallout.Build/Execution/Extensibility/BuildExtensionAttributeBase.cs b/src/Fallout.Build/Execution/Extensibility/BuildExtensionAttributeBase.cs index 5d2a46d5..245fa6c2 100644 --- a/src/Fallout.Build/Execution/Extensibility/BuildExtensionAttributeBase.cs +++ b/src/Fallout.Build/Execution/Extensibility/BuildExtensionAttributeBase.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; namespace Fallout.Common.Execution; @@ -11,39 +9,7 @@ public abstract class BuildExtensionAttributeBase : Attribute, IBuildExtension public virtual float Priority { get; set; } } -public interface IOnBuildCreated : IBuildExtension -{ - void OnBuildCreated(IReadOnlyCollection executableTargets); -} - -public interface IOnBuildInitialized : IBuildExtension -{ - void OnBuildInitialized( - IReadOnlyCollection executableTargets, - IReadOnlyCollection executionPlan); -} - public interface IOnTargetSummaryUpdated : IBuildExtension { void OnTargetSummaryUpdated(IFalloutBuild build, ExecutableTarget target); } - -public interface IOnTargetSkipped : IBuildExtension -{ - void OnTargetSkipped(ExecutableTarget target); -} - -public interface IOnTargetRunning : IBuildExtension -{ - void OnTargetRunning(ExecutableTarget target); -} - -public interface IOnTargetSucceeded : IBuildExtension -{ - void OnTargetSucceeded(ExecutableTarget target); -} - -public interface IOnTargetFailed : IBuildExtension -{ - void OnTargetFailed(ExecutableTarget target); -} diff --git a/src/Fallout.Build/Execution/Extensions/ArgumentsFromParametersFileAttribute.cs b/src/Fallout.Build/Execution/Extensions/ArgumentsFromParametersFileAttribute.cs index cb344c29..96fc92a4 100644 --- a/src/Fallout.Build/Execution/Extensions/ArgumentsFromParametersFileAttribute.cs +++ b/src/Fallout.Build/Execution/Extensions/ArgumentsFromParametersFileAttribute.cs @@ -14,7 +14,7 @@ namespace Fallout.Common.Execution; public class ArgumentsFromParametersFileAttribute : BuildExtensionAttributeBase, IOnBuildCreated { - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { // TODO: probably remove if (!Constants.GetFalloutDirectory(FalloutBuild.RootDirectory).DirectoryExists()) diff --git a/src/Fallout.Build/Execution/Extensions/EventInvoker.cs b/src/Fallout.Build/Execution/Extensions/EventInvoker.cs index d435e3d1..b2045467 100644 --- a/src/Fallout.Build/Execution/Extensions/EventInvoker.cs +++ b/src/Fallout.Build/Execution/Extensions/EventInvoker.cs @@ -13,34 +13,34 @@ internal class EventInvoker : BuildExtensionAttributeBase, IOnTargetFailed, IOnBuildFinished { - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { ((FalloutBuild)Build).OnBuildCreated(); } public void OnBuildInitialized( - IReadOnlyCollection executableTargets, - IReadOnlyCollection executionPlan) + IReadOnlyCollection executableTargets, + IReadOnlyCollection executionPlan) { ((FalloutBuild)Build).OnBuildInitialized(); } - public void OnTargetRunning(ExecutableTarget target) + public void OnTargetRunning(ITargetModel target) { ((FalloutBuild)Build).OnTargetRunning(target.Name); } - public void OnTargetSkipped(ExecutableTarget target) + public void OnTargetSkipped(ITargetModel target) { ((FalloutBuild)Build).OnTargetSkipped(target.Name); } - public void OnTargetSucceeded(ExecutableTarget target) + public void OnTargetSucceeded(ITargetModel target) { ((FalloutBuild)Build).OnTargetSucceeded(target.Name); } - public void OnTargetFailed(ExecutableTarget target) + public void OnTargetFailed(ITargetModel target) { ((FalloutBuild)Build).OnTargetFailed(target.Name); } diff --git a/src/Fallout.Build/Execution/Extensions/HandleHelpRequestsAttribute.cs b/src/Fallout.Build/Execution/Extensions/HandleHelpRequestsAttribute.cs index d7a6c50d..eceafdb8 100644 --- a/src/Fallout.Build/Execution/Extensions/HandleHelpRequestsAttribute.cs +++ b/src/Fallout.Build/Execution/Extensions/HandleHelpRequestsAttribute.cs @@ -11,8 +11,8 @@ namespace Fallout.Common.Execution; internal class HandleHelpRequestsAttribute : BuildExtensionAttributeBase, IOnBuildInitialized { public void OnBuildInitialized( - IReadOnlyCollection executableTargets, - IReadOnlyCollection executionPlan) + IReadOnlyCollection executableTargets, + IReadOnlyCollection executionPlan) { if (Build.Help || executionPlan.Count == 0) { diff --git a/src/Fallout.Build/Execution/Extensions/HandlePlanRequestsAttribute.cs b/src/Fallout.Build/Execution/Extensions/HandlePlanRequestsAttribute.cs index 8d23c44a..eba65982 100644 --- a/src/Fallout.Build/Execution/Extensions/HandlePlanRequestsAttribute.cs +++ b/src/Fallout.Build/Execution/Extensions/HandlePlanRequestsAttribute.cs @@ -18,8 +18,8 @@ internal class HandlePlanRequestsAttribute : BuildExtensionAttributeBase, IOnBui private AbsolutePath HtmlFile => Build.TemporaryDirectory / HtmlFileName; public void OnBuildInitialized( - IReadOnlyCollection executableTargets, - IReadOnlyCollection executionPlan) + IReadOnlyCollection executableTargets, + IReadOnlyCollection executionPlan) { if (Build.Plan) { diff --git a/src/Fallout.Build/Execution/Extensions/HandleReSharperSurrogateArgumentsAttribute.cs b/src/Fallout.Build/Execution/Extensions/HandleReSharperSurrogateArgumentsAttribute.cs index 4942df6b..a44a2cfa 100644 --- a/src/Fallout.Build/Execution/Extensions/HandleReSharperSurrogateArgumentsAttribute.cs +++ b/src/Fallout.Build/Execution/Extensions/HandleReSharperSurrogateArgumentsAttribute.cs @@ -11,7 +11,7 @@ internal class HandleReSharperSurrogateArgumentsAttribute : BuildExtensionAttrib { private AbsolutePath ReSharperSurrogateFile => Constants.GetReSharperSurrogateFile(Build.RootDirectory); - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { if (!ReSharperSurrogateFile.Exists()) return; diff --git a/src/Fallout.Build/Execution/Extensions/HandleShellCompletionAttribute.cs b/src/Fallout.Build/Execution/Extensions/HandleShellCompletionAttribute.cs index d3b5a1d5..9fad3dfc 100644 --- a/src/Fallout.Build/Execution/Extensions/HandleShellCompletionAttribute.cs +++ b/src/Fallout.Build/Execution/Extensions/HandleShellCompletionAttribute.cs @@ -10,7 +10,7 @@ namespace Fallout.Common.Execution; internal class HandleShellCompletionAttribute : BuildExtensionAttributeBase, IOnBuildCreated { - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { if (BuildServerConfigurationGeneration.IsActive) return; diff --git a/src/Fallout.Build/Execution/Extensions/HandleVisualStudioDebuggingAttribute.cs b/src/Fallout.Build/Execution/Extensions/HandleVisualStudioDebuggingAttribute.cs index 492aeeca..33d429a5 100644 --- a/src/Fallout.Build/Execution/Extensions/HandleVisualStudioDebuggingAttribute.cs +++ b/src/Fallout.Build/Execution/Extensions/HandleVisualStudioDebuggingAttribute.cs @@ -13,7 +13,7 @@ internal class HandleVisualStudioDebuggingAttribute : BuildExtensionAttributeBas private AbsolutePath VisualStudioDebugFile => Constants.GetVisualStudioDebugFile(Build.RootDirectory); - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { if (!ParameterService.GetParameter(Constants.VisualStudioDebugParameterName)) return; diff --git a/src/Fallout.Build/Execution/Extensions/InjectNonParameterValuesAttribute.cs b/src/Fallout.Build/Execution/Extensions/InjectNonParameterValuesAttribute.cs index 5f738ada..3b19dc2c 100644 --- a/src/Fallout.Build/Execution/Extensions/InjectNonParameterValuesAttribute.cs +++ b/src/Fallout.Build/Execution/Extensions/InjectNonParameterValuesAttribute.cs @@ -10,8 +10,8 @@ namespace Fallout.Common.ValueInjection; internal class InjectNonParameterValuesAttribute : BuildExtensionAttributeBase, IOnBuildInitialized { public void OnBuildInitialized( - IReadOnlyCollection executableTargets, - IReadOnlyCollection executionPlan) + IReadOnlyCollection executableTargets, + IReadOnlyCollection executionPlan) { ValueInjectionUtility.InjectValues(Build, (member, attribute) => { @@ -25,7 +25,7 @@ public void OnBuildInitialized( if (member.HasCustomAttribute()) return false; - var requiredMembers = executionPlan.SelectMany(x => x.DelegateRequirements) + var requiredMembers = executionPlan.SelectMany(x => ((ExecutableTarget)x).DelegateRequirements) .Where(x => x is not Expression>) .Select(x => x.GetMemberInfo()).ToList(); diff --git a/src/Fallout.Build/Execution/Extensions/InjectParameterValuesAttribute.cs b/src/Fallout.Build/Execution/Extensions/InjectParameterValuesAttribute.cs index 449c23b0..cb65d24f 100644 --- a/src/Fallout.Build/Execution/Extensions/InjectParameterValuesAttribute.cs +++ b/src/Fallout.Build/Execution/Extensions/InjectParameterValuesAttribute.cs @@ -7,7 +7,7 @@ namespace Fallout.Common.ValueInjection; internal class InjectParameterValuesAttribute : BuildExtensionAttributeBase, IOnBuildCreated { - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { ValueInjectionUtility.InjectValues(Build, (_, attribute) => attribute.GetType() == typeof(ParameterAttribute)); } diff --git a/src/Fallout.Build/Execution/Extensions/TelemetryAttribute.cs b/src/Fallout.Build/Execution/Extensions/TelemetryAttribute.cs index 715e79bf..1ad86467 100644 --- a/src/Fallout.Build/Execution/Extensions/TelemetryAttribute.cs +++ b/src/Fallout.Build/Execution/Extensions/TelemetryAttribute.cs @@ -7,8 +7,8 @@ namespace Fallout.Common.Execution; internal class TelemetryAttribute : BuildExtensionAttributeBase, IOnBuildInitialized, IOnTargetSucceeded { public void OnBuildInitialized( - IReadOnlyCollection executableTargets, - IReadOnlyCollection executionPlan) + IReadOnlyCollection executableTargets, + IReadOnlyCollection executionPlan) { if (Build.IsInterceptorExecution) return; @@ -16,11 +16,11 @@ public void OnBuildInitialized( Telemetry.BuildStarted(Build); } - public void OnTargetSucceeded(ExecutableTarget target) + public void OnTargetSucceeded(ITargetModel target) { if (Build.IsInterceptorExecution) return; - Telemetry.TargetSucceeded(target, Build); + Telemetry.TargetSucceeded((ExecutableTarget)target, Build); } } diff --git a/src/Fallout.Build/Execution/Extensions/UpdateNotificationAttribute.cs b/src/Fallout.Build/Execution/Extensions/UpdateNotificationAttribute.cs index bbb3c57b..50524ffb 100644 --- a/src/Fallout.Build/Execution/Extensions/UpdateNotificationAttribute.cs +++ b/src/Fallout.Build/Execution/Extensions/UpdateNotificationAttribute.cs @@ -9,7 +9,7 @@ namespace Fallout.Common.Execution; internal class UpdateNotificationAttribute : BuildExtensionAttributeBase, IOnBuildCreated, IOnBuildFinished { - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { if (Build.IsLocalBuild && ShouldNotify) { diff --git a/src/Fallout.Common/Attributes/CheckPathEnvironmentVariableAttribute.cs b/src/Fallout.Common/Attributes/CheckPathEnvironmentVariableAttribute.cs index 26b24376..00be2b27 100644 --- a/src/Fallout.Common/Attributes/CheckPathEnvironmentVariableAttribute.cs +++ b/src/Fallout.Common/Attributes/CheckPathEnvironmentVariableAttribute.cs @@ -8,8 +8,8 @@ namespace Fallout.Common.Execution; public class CheckPathEnvironmentVariableAttribute : BuildExtensionAttributeBase, IOnBuildInitialized { public void OnBuildInitialized( - IReadOnlyCollection executableTargets, - IReadOnlyCollection executionPlan) + IReadOnlyCollection executableTargets, + IReadOnlyCollection executionPlan) { ProcessTasks.CheckPathEnvironmentVariable(); } diff --git a/src/Fallout.Common/Attributes/GlobbingOptionsAttribute.cs b/src/Fallout.Common/Attributes/GlobbingOptionsAttribute.cs index 5f84f04f..766f70f4 100644 --- a/src/Fallout.Common/Attributes/GlobbingOptionsAttribute.cs +++ b/src/Fallout.Common/Attributes/GlobbingOptionsAttribute.cs @@ -17,7 +17,7 @@ public GlobbingOptionsAttribute(GlobbingCaseSensitivity caseSensitivity) _caseSensitivity = caseSensitivity; } - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { Globbing.GlobbingCaseSensitivity = _caseSensitivity; } diff --git a/src/Fallout.Common/Attributes/HandleSingleFileExecutionAttribute.cs b/src/Fallout.Common/Attributes/HandleSingleFileExecutionAttribute.cs index 3034762e..df3474e7 100644 --- a/src/Fallout.Common/Attributes/HandleSingleFileExecutionAttribute.cs +++ b/src/Fallout.Common/Attributes/HandleSingleFileExecutionAttribute.cs @@ -17,7 +17,7 @@ public class HandleSingleFileExecutionAttribute : BuildExtensionAttributeBase, I { private const string ScriptUrl = "https://dot.net/v1/dotnet-install.sh"; - public void OnBuildCreated(IReadOnlyCollection executableTargets) + public void OnBuildCreated(IReadOnlyCollection executableTargets) { if (!IsSingleFileExecution) return; diff --git a/src/Fallout.Core/Execution/IBuildExtension.cs b/src/Fallout.Core/Execution/IBuildExtension.cs index d4d821aa..17d45835 100644 --- a/src/Fallout.Core/Execution/IBuildExtension.cs +++ b/src/Fallout.Core/Execution/IBuildExtension.cs @@ -1,3 +1,5 @@ +using System.Collections.Generic; + namespace Fallout.Common.Execution; /// @@ -9,9 +11,45 @@ public interface IBuildExtension float Priority { get; } } -/// -/// Build extension invoked once the build has finished (whatever the outcome). -/// +/// Build extension invoked once the executable targets have been created. +public interface IOnBuildCreated : IBuildExtension +{ + void OnBuildCreated(IReadOnlyCollection executableTargets); +} + +/// Build extension invoked once the build has been initialized and the plan computed. +public interface IOnBuildInitialized : IBuildExtension +{ + void OnBuildInitialized( + IReadOnlyCollection executableTargets, + IReadOnlyCollection executionPlan); +} + +/// Build extension invoked when a target is skipped. +public interface IOnTargetSkipped : IBuildExtension +{ + void OnTargetSkipped(ITargetModel target); +} + +/// Build extension invoked when a target starts running. +public interface IOnTargetRunning : IBuildExtension +{ + void OnTargetRunning(ITargetModel target); +} + +/// Build extension invoked when a target succeeds. +public interface IOnTargetSucceeded : IBuildExtension +{ + void OnTargetSucceeded(ITargetModel target); +} + +/// Build extension invoked when a target fails. +public interface IOnTargetFailed : IBuildExtension +{ + void OnTargetFailed(ITargetModel target); +} + +/// Build extension invoked once the build has finished (whatever the outcome). public interface IOnBuildFinished : IBuildExtension { void OnBuildFinished(); diff --git a/src/Tools/Fallout.Application.Tools.Coverage/DotCover/TeamCitySetDotCoverHomePathAttribute.cs b/src/Tools/Fallout.Application.Tools.Coverage/DotCover/TeamCitySetDotCoverHomePathAttribute.cs index ca999c4e..51990899 100644 --- a/src/Tools/Fallout.Application.Tools.Coverage/DotCover/TeamCitySetDotCoverHomePathAttribute.cs +++ b/src/Tools/Fallout.Application.Tools.Coverage/DotCover/TeamCitySetDotCoverHomePathAttribute.cs @@ -9,8 +9,8 @@ namespace Fallout.Common.Tools.DotCover; public class TeamCitySetDotCoverHomePathAttribute : BuildExtensionAttributeBase, IOnBuildInitialized { public void OnBuildInitialized( - IReadOnlyCollection executableTargets, - IReadOnlyCollection executionPlan) + IReadOnlyCollection executableTargets, + IReadOnlyCollection executionPlan) { TeamCity.Instance?.SetConfigurationParameter("teamcity.dotCover.home", DotCoverTasks.DotCoverPath); }