diff --git a/ModularPipelines.Analyzers/ModularPipelines.Analyzers.CodeFixes/MissingDependsOnAttributeCodeFixProvider.cs b/ModularPipelines.Analyzers/ModularPipelines.Analyzers.CodeFixes/MissingDependsOnAttributeCodeFixProvider.cs index c02a04e958..1e33b1230f 100644 --- a/ModularPipelines.Analyzers/ModularPipelines.Analyzers.CodeFixes/MissingDependsOnAttributeCodeFixProvider.cs +++ b/ModularPipelines.Analyzers/ModularPipelines.Analyzers.CodeFixes/MissingDependsOnAttributeCodeFixProvider.cs @@ -23,13 +23,23 @@ public sealed override FixAllProvider GetFixAllProvider() public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context) { var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false); + + if (root is null) + { + return; + } var diagnostic = context.Diagnostics.First(); var diagnosticSpan = diagnostic.Location.SourceSpan; // Find the type declaration identified by the diagnostic. - var declaration = root.FindToken(diagnosticSpan.Start).Parent.AncestorsAndSelf().OfType().First(); + var declaration = root.FindToken(diagnosticSpan.Start).Parent?.AncestorsAndSelf().OfType().First(); + if (declaration is null) + { + return; + } + // Register a code action that will invoke the fix. context.RegisterCodeFix( CodeAction.Create( @@ -50,7 +60,7 @@ private async Task AddAttribute(CodeFixContext context, TypeDeclaratio var name = context.Diagnostics.First().Properties["Name"]!; var attributes = typeDecl.AttributeLists.Add( - SyntaxFactory.AttributeList(SyntaxFactory.SingletonSeparatedList(CreateDependsOnAttribute(name, syntaxTree))) + SyntaxFactory.AttributeList(SyntaxFactory.SingletonSeparatedList(CreateDependsOnAttribute(name, syntaxTree!))) .WithTrailingTrivia(SyntaxFactory.ElasticCarriageReturnLineFeed) .NormalizeWhitespace()); diff --git a/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/ModularPipelinesAnalyzersUnitTest.cs b/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/ModularPipelinesAnalyzersUnitTest.cs index b5b5264879..44aab5e2c3 100644 --- a/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/ModularPipelinesAnalyzersUnitTest.cs +++ b/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/ModularPipelinesAnalyzersUnitTest.cs @@ -81,8 +81,6 @@ public async Task Empty_Source() [TestMethod] public async Task Good_Source() { - var test = @""; - await VerifyCS.VerifyAnalyzerAsync(FixedModuleSource); } diff --git a/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/Verifiers/CSharpAnalyzerVerifier.cs b/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/Verifiers/CSharpAnalyzerVerifier.cs index 79574c4dad..346de0593b 100644 --- a/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/Verifiers/CSharpAnalyzerVerifier.cs +++ b/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/Verifiers/CSharpAnalyzerVerifier.cs @@ -16,9 +16,24 @@ public Test() { var project = solution.GetProject(projectId); + if (project is null) + { + return solution; + } + var compilationOptions = project.CompilationOptions; + if (compilationOptions is null) + { + return solution; + } + var parseOptions = project.ParseOptions as CSharpParseOptions; + + if (parseOptions is null) + { + return solution; + } compilationOptions = compilationOptions.WithSpecificDiagnosticOptions(compilationOptions.SpecificDiagnosticOptions.SetItems(CSharpVerifierHelper.NullableWarnings)); diff --git a/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/Verifiers/CSharpCodeFixVerifier.cs b/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/Verifiers/CSharpCodeFixVerifier.cs index 1f7b45652e..8a7fbc65ef 100644 --- a/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/Verifiers/CSharpCodeFixVerifier.cs +++ b/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/Verifiers/CSharpCodeFixVerifier.cs @@ -18,10 +18,25 @@ public Test() { var project = solution.GetProject(projectId); + if (project is null) + { + return solution; + } + var compilationOptions = project.CompilationOptions; + if (compilationOptions is null) + { + return solution; + } + var parseOptions = project.ParseOptions as CSharpParseOptions; + if (parseOptions is null) + { + return solution; + } + compilationOptions = compilationOptions.WithSpecificDiagnosticOptions(compilationOptions.SpecificDiagnosticOptions.SetItems(CSharpVerifierHelper.NullableWarnings)); solution = solution.WithProjectCompilationOptions(projectId, compilationOptions) diff --git a/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/Verifiers/CSharpCodeRefactoringVerifier.cs b/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/Verifiers/CSharpCodeRefactoringVerifier.cs index caa42e0d74..381734608d 100644 --- a/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/Verifiers/CSharpCodeRefactoringVerifier.cs +++ b/ModularPipelines.Analyzers/ModularPipelines.Analyzers.Test/Verifiers/CSharpCodeRefactoringVerifier.cs @@ -16,9 +16,24 @@ public Test() { var project = solution.GetProject(projectId); + if (project is null) + { + return solution; + } + var compilationOptions = project.CompilationOptions; + if (compilationOptions is null) + { + return solution; + } + var parseOptions = project.ParseOptions as CSharpParseOptions; + + if (parseOptions is null) + { + return solution; + } compilationOptions = compilationOptions.WithSpecificDiagnosticOptions(compilationOptions.SpecificDiagnosticOptions.SetItems(CSharpVerifierHelper.NullableWarnings)); diff --git a/ModularPipelines.Analyzers/ModularPipelines.Analyzers/MissingDependsOnAttributeAnalyzer.cs b/ModularPipelines.Analyzers/ModularPipelines.Analyzers/MissingDependsOnAttributeAnalyzer.cs index d6bb6c692a..d01bf5d034 100644 --- a/ModularPipelines.Analyzers/ModularPipelines.Analyzers/MissingDependsOnAttributeAnalyzer.cs +++ b/ModularPipelines.Analyzers/ModularPipelines.Analyzers/MissingDependsOnAttributeAnalyzer.cs @@ -74,7 +74,7 @@ private void AnalyzeMissingDependsOnAttributes(SyntaxNodeAnalysisContext context if (!attributes.Any(x => IsDependsOnAttributeFor(x, namedTypeSymbol))) { - var properties = new Dictionary + var properties = new Dictionary { ["Name"] = namedTypeSymbol.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat) }.ToImmutableDictionary(); diff --git a/ModularPipelines.Analyzers/ModularPipelines.Analyzers/Resources.Designer.cs b/ModularPipelines.Analyzers/ModularPipelines.Analyzers/Resources.Designer.cs index 80043af14b..1a2977a26a 100644 --- a/ModularPipelines.Analyzers/ModularPipelines.Analyzers/Resources.Designer.cs +++ b/ModularPipelines.Analyzers/ModularPipelines.Analyzers/Resources.Designer.cs @@ -60,7 +60,7 @@ internal Resources() { } /// - /// Looks up a localized string similar to Missing DependsOn Attribute. + /// Looks up a localized string similar to Missing DependsOn Attribute.. /// internal static string AnalyzerDescription { get { diff --git a/ModularPipelines.Analyzers/ModularPipelines.Analyzers/Resources.resx b/ModularPipelines.Analyzers/ModularPipelines.Analyzers/Resources.resx index e588c52f46..d0c862aab2 100644 --- a/ModularPipelines.Analyzers/ModularPipelines.Analyzers/Resources.resx +++ b/ModularPipelines.Analyzers/ModularPipelines.Analyzers/Resources.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Missing DependsOn Attribute + Missing DependsOn Attribute. An optional longer localizable description of the diagnostic. diff --git a/ModularPipelines.Azure.Pipelines/Extensions/AzurePipelineExtensions.cs b/ModularPipelines.Azure.Pipelines/Extensions/AzurePipelineExtensions.cs index bce632a5e0..61ee84680b 100644 --- a/ModularPipelines.Azure.Pipelines/Extensions/AzurePipelineExtensions.cs +++ b/ModularPipelines.Azure.Pipelines/Extensions/AzurePipelineExtensions.cs @@ -18,9 +18,9 @@ public static void RegisterAzurePipelineContext() public static IServiceCollection RegisterAzurePipelineContext(this IServiceCollection services) { - services.TryAddSingleton(); - services.TryAddSingleton(); - services.TryAddSingleton(); + services.TryAddTransient(); + services.TryAddTransient(); + services.TryAddTransient(); return services; } diff --git a/ModularPipelines.Build/Modules/PackProjectsModule.cs b/ModularPipelines.Build/Modules/PackProjectsModule.cs index 4cb9223bd3..fe31c0a697 100644 --- a/ModularPipelines.Build/Modules/PackProjectsModule.cs +++ b/ModularPipelines.Build/Modules/PackProjectsModule.cs @@ -29,6 +29,7 @@ await context.DotNet().Build(new DotNetOptions { TargetPath = projectFile.Path, Configuration = Configuration.Release, + LogOutput = false }, cancellationToken); results.Add(await context.DotNet().Pack(new DotNetOptions diff --git a/ModularPipelines.Cmd/Extensions/CmdExtensions.cs b/ModularPipelines.Cmd/Extensions/CmdExtensions.cs index b72bb51c94..f7693bba7b 100644 --- a/ModularPipelines.Cmd/Extensions/CmdExtensions.cs +++ b/ModularPipelines.Cmd/Extensions/CmdExtensions.cs @@ -18,7 +18,7 @@ public static void RegisterCmdContext() public static IServiceCollection RegisterCmdContext(this IServiceCollection services) { - services.TryAddSingleton(); + services.TryAddTransient(); return services; } diff --git a/ModularPipelines.DotNet/Extensions/DotNetExtensions.cs b/ModularPipelines.DotNet/Extensions/DotNetExtensions.cs index a7ad5b9ba6..f031bab8d3 100644 --- a/ModularPipelines.DotNet/Extensions/DotNetExtensions.cs +++ b/ModularPipelines.DotNet/Extensions/DotNetExtensions.cs @@ -18,8 +18,8 @@ public static void RegisterDotNetContext() public static IServiceCollection RegisterDotNetContext(this IServiceCollection services) { - services.TryAddSingleton(); - services.TryAddSingleton(); + services.TryAddTransient(); + services.TryAddTransient(); return services; } diff --git a/ModularPipelines.DotNet/UnitTestResult.cs b/ModularPipelines.DotNet/UnitTestResult.cs index 103aed37ca..3083ec6885 100644 --- a/ModularPipelines.DotNet/UnitTestResult.cs +++ b/ModularPipelines.DotNet/UnitTestResult.cs @@ -7,38 +7,38 @@ namespace ModularPipelines.DotNet; public record UnitTestResult { [XmlAttribute("executionId")] - public string ExecutionId { get; init; } + public string? ExecutionId { get; init; } [XmlAttribute("testId")] - public string TestId { get; init; } + public string? TestId { get; init; } [XmlAttribute("testName")] - public string TestName { get; init; } + public string? TestName { get; init; } [XmlAttribute("computerName")] - public string ComputerName { get; init; } + public string? ComputerName { get; init; } [XmlAttribute("duration")] - public string Duration { get; init; } + public string? Duration { get; init; } [XmlAttribute("startTime")] - public string StartTime { get; init; } + public string? StartTime { get; init; } [XmlAttribute("endTime")] - public string EndTime { get; init; } + public string? EndTime { get; init; } [XmlAttribute("testType")] - public string TestType { get; init; } + public string? TestType { get; init; } [XmlAttribute("outcome")] - public string Outcome { get; init; } + public string? Outcome { get; init; } [XmlAttribute("testListId")] - public string TestListId { get; init; } + public string? TestListId { get; init; } [XmlAttribute("relativeResultsDirectory")] - public string RelativeResultsDirectory { get; init; } + public string? RelativeResultsDirectory { get; init; } [XmlElement("Output")] - public TestOutput Output { get; init; } + public TestOutput? Output { get; init; } } \ No newline at end of file diff --git a/ModularPipelines.Git/Extensions/GitExtensions.cs b/ModularPipelines.Git/Extensions/GitExtensions.cs index 7204c8f086..1a38fedd12 100644 --- a/ModularPipelines.Git/Extensions/GitExtensions.cs +++ b/ModularPipelines.Git/Extensions/GitExtensions.cs @@ -18,12 +18,12 @@ public static void RegisterGitContext() public static IServiceCollection RegisterGitContext(this IServiceCollection services) { - services.TryAddSingleton(); - services.TryAddSingleton(); - services.TryAddSingleton(); + services.TryAddTransient(); + services.TryAddTransient(); + services.TryAddTransient(); services.TryAddSingleton(); - services.TryAddSingleton(); - services.TryAddSingleton(); + services.TryAddTransient(); + services.TryAddTransient(); return services; } diff --git a/ModularPipelines.Git/GitInformation.cs b/ModularPipelines.Git/GitInformation.cs index 781c2c1af2..dcbe1467a9 100644 --- a/ModularPipelines.Git/GitInformation.cs +++ b/ModularPipelines.Git/GitInformation.cs @@ -1,5 +1,4 @@ using System.Runtime.CompilerServices; -using ModularPipelines.Context; using ModularPipelines.Git.Models; using ModularPipelines.Git.Options; @@ -10,32 +9,29 @@ internal class GitInformation : IGitInformation private readonly StaticGitInformation _staticGitInformation; private readonly GitCommandRunner _gitCommandRunner; private readonly IGitCommitMapper _gitCommitMapper; - private readonly IModuleContext _context; public GitInformation(StaticGitInformation staticGitInformation, GitCommandRunner gitCommandRunner, - IGitCommitMapper gitCommitMapper, - IModuleContext context) + IGitCommitMapper gitCommitMapper) { _staticGitInformation = staticGitInformation; _gitCommandRunner = gitCommandRunner; _gitCommitMapper = gitCommitMapper; - _context = context; } - public string BranchName => _staticGitInformation.BranchName; - public string DefaultBranchName => _staticGitInformation.DefaultBranchName; + public string? BranchName => _staticGitInformation.BranchName; + public string? DefaultBranchName => _staticGitInformation.DefaultBranchName; - public string Tag => _staticGitInformation.Tag; + public string? Tag => _staticGitInformation.Tag; public GitCommit? PreviousCommit => _staticGitInformation.PreviousCommit; public int CommitsOnBranch => _staticGitInformation.CommitsOnBranch; public DateTimeOffset LastCommitDateTime => _staticGitInformation.LastCommitDateTime; - public string LastCommitSha => _staticGitInformation.LastCommitSha; + public string? LastCommitSha => _staticGitInformation.LastCommitSha; - public string LastCommitShortSha => _staticGitInformation.LastCommitShortSha; + public string? LastCommitShortSha => _staticGitInformation.LastCommitShortSha; public IAsyncEnumerable Commits(GitOptions? options = null, CancellationToken cancellationToken = default) diff --git a/ModularPipelines.Git/Models/GitAuthor.cs b/ModularPipelines.Git/Models/GitAuthor.cs index 2c55b660ae..9e2d9bda76 100644 --- a/ModularPipelines.Git/Models/GitAuthor.cs +++ b/ModularPipelines.Git/Models/GitAuthor.cs @@ -2,7 +2,7 @@ public record GitAuthor { - public string Name { get; set; } - public string Email { get; set; } + public string? Name { get; set; } + public string? Email { get; set; } public DateTime Date { get; set; } } \ No newline at end of file diff --git a/ModularPipelines.Git/Models/GitCommit.cs b/ModularPipelines.Git/Models/GitCommit.cs index 807b1924ae..da9bd62207 100644 --- a/ModularPipelines.Git/Models/GitCommit.cs +++ b/ModularPipelines.Git/Models/GitCommit.cs @@ -2,8 +2,8 @@ public record GitCommit { - public GitHash Hash { get; set; } - public GitAuthor Author { get; set; } - public GitAuthor Committer { get; set; } - public GitMessage Message { get; set; } + public GitHash? Hash { get; set; } + public GitAuthor? Author { get; set; } + public GitAuthor? Committer { get; set; } + public GitMessage? Message { get; set; } } \ No newline at end of file diff --git a/ModularPipelines.Git/Models/GitFileStatus.cs b/ModularPipelines.Git/Models/GitFileStatus.cs index 3e691fc2d5..b9c4750882 100644 --- a/ModularPipelines.Git/Models/GitFileStatus.cs +++ b/ModularPipelines.Git/Models/GitFileStatus.cs @@ -2,6 +2,6 @@ public record GitFileStatus { - public string Status { get; set; } - public string File { get; set; } + public string? Status { get; set; } + public string? File { get; set; } } \ No newline at end of file diff --git a/ModularPipelines.Git/Models/GitHash.cs b/ModularPipelines.Git/Models/GitHash.cs index 880b29ed8f..1fa6c8c3db 100644 --- a/ModularPipelines.Git/Models/GitHash.cs +++ b/ModularPipelines.Git/Models/GitHash.cs @@ -2,6 +2,6 @@ public record GitHash { - public string Long { get; set; } - public string Short { get; set; } + public string? Long { get; set; } + public string? Short { get; set; } } \ No newline at end of file diff --git a/ModularPipelines.Git/Models/GitMessage.cs b/ModularPipelines.Git/Models/GitMessage.cs index 7104b50bf2..3e56d5a330 100644 --- a/ModularPipelines.Git/Models/GitMessage.cs +++ b/ModularPipelines.Git/Models/GitMessage.cs @@ -2,6 +2,6 @@ public record GitMessage { - public string Subject { get; set; } - public string Body { get; set; } + public string? Subject { get; set; } + public string? Body { get; set; } } \ No newline at end of file diff --git a/ModularPipelines.MicrosoftTeams/Extensions/MicrosoftTeamsExtensions.cs b/ModularPipelines.MicrosoftTeams/Extensions/MicrosoftTeamsExtensions.cs index cc6fc585c5..538da495d3 100644 --- a/ModularPipelines.MicrosoftTeams/Extensions/MicrosoftTeamsExtensions.cs +++ b/ModularPipelines.MicrosoftTeams/Extensions/MicrosoftTeamsExtensions.cs @@ -18,7 +18,7 @@ public static void RegisterMicrosoftTeamsContext() public static IServiceCollection RegisterMicrosoftTeamsContext(this IServiceCollection services) { - services.TryAddSingleton(); + services.TryAddTransient(); return services; } diff --git a/ModularPipelines.Node/Extensions/NodeExtensions.cs b/ModularPipelines.Node/Extensions/NodeExtensions.cs index 395c5c0fab..0da2f50d07 100644 --- a/ModularPipelines.Node/Extensions/NodeExtensions.cs +++ b/ModularPipelines.Node/Extensions/NodeExtensions.cs @@ -18,9 +18,9 @@ public static void RegisterNodeContext() public static IServiceCollection RegisterNodeContext(this IServiceCollection services) { - services.TryAddSingleton(); - services.TryAddSingleton(); - services.TryAddSingleton(); + services.TryAddTransient(); + services.TryAddTransient(); + services.TryAddTransient(); return services; } diff --git a/ModularPipelines.Node/Models/NpmRunOptions.cs b/ModularPipelines.Node/Models/NpmRunOptions.cs index b3c948a951..4144349d27 100644 --- a/ModularPipelines.Node/Models/NpmRunOptions.cs +++ b/ModularPipelines.Node/Models/NpmRunOptions.cs @@ -2,8 +2,7 @@ namespace ModularPipelines.Node.Models; -public record NpmRunOptions : CommandEnvironmentOptions +public record NpmRunOptions(string Target) : CommandEnvironmentOptions { - public string Target { get; init; } public IEnumerable? Arguments { get; init; } } \ No newline at end of file diff --git a/ModularPipelines.NuGet/Extensions/NuGetExtensions.cs b/ModularPipelines.NuGet/Extensions/NuGetExtensions.cs index 523d1ebe14..ab2d4fbe7e 100644 --- a/ModularPipelines.NuGet/Extensions/NuGetExtensions.cs +++ b/ModularPipelines.NuGet/Extensions/NuGetExtensions.cs @@ -21,7 +21,7 @@ public static IServiceCollection RegisterNuGetContext(this IServiceCollection se { services.RegisterDotNetContext(); - services.TryAddSingleton(); + services.TryAddTransient(); return services; } diff --git a/ModularPipelines.Powershell/Extensions/PowershellExtensions.cs b/ModularPipelines.Powershell/Extensions/PowershellExtensions.cs index 92b3493f9e..3e004e856a 100644 --- a/ModularPipelines.Powershell/Extensions/PowershellExtensions.cs +++ b/ModularPipelines.Powershell/Extensions/PowershellExtensions.cs @@ -18,7 +18,7 @@ public static void RegisterPowershellContext() public static IServiceCollection RegisterPowershellContext(this IServiceCollection services) { - services.TryAddSingleton(); + services.TryAddTransient(); return services; } diff --git a/ModularPipelines/Engine/ModuleInitializer.cs b/ModularPipelines/Engine/ModuleInitializer.cs index 1665763c1e..91e3f03eca 100644 --- a/ModularPipelines/Engine/ModuleInitializer.cs +++ b/ModularPipelines/Engine/ModuleInitializer.cs @@ -15,6 +15,8 @@ public ModuleInitializer(IServiceProvider serviceProvider) public ModuleBase Initialize(ModuleBase module) { - return module.Initialize(_serviceProvider.GetRequiredService()); + // Each context needs to be transient + var context = _serviceProvider.GetRequiredService(); + return module.Initialize(context); } } \ No newline at end of file