diff --git a/src/BuildPrediction/Predictors/ArtifactsSdkPredictor.cs b/src/BuildPrediction/Predictors/ArtifactsSdkPredictor.cs index 7b99f68..95319e7 100644 --- a/src/BuildPrediction/Predictors/ArtifactsSdkPredictor.cs +++ b/src/BuildPrediction/Predictors/ArtifactsSdkPredictor.cs @@ -18,7 +18,9 @@ public sealed class ArtifactsSdkPredictor : IProjectPredictor { internal const string UsingMicrosoftArtifactsSdkPropertyName = "UsingMicrosoftArtifactsSdk"; - internal const string ArtifactsItemName = "Artifacts"; + internal const string EnableArtifactsPropertyName = "EnableArtifacts"; + + internal const string ArtifactsItemName = "Artifact"; internal const string RobocopyItemName = "Robocopy"; @@ -50,6 +52,13 @@ public void PredictInputsAndOutputs(ProjectInstance projectInstance, ProjectPred return; } + // Check property which disables the functionality. + var enableArtifacts = projectInstance.GetPropertyValue(EnableArtifactsPropertyName); + if (enableArtifacts.Equals("false", StringComparison.OrdinalIgnoreCase)) + { + return; + } + // The Sdk allows both Artifacts and Robocopy items ProcessItems(projectInstance.GetItems(ArtifactsItemName), predictionReporter); ProcessItems(projectInstance.GetItems(RobocopyItemName), predictionReporter); diff --git a/src/BuildPredictionTests/Predictors/ArtifactsSdkPredictorTests.cs b/src/BuildPredictionTests/Predictors/ArtifactsSdkPredictorTests.cs index c254743..0255888 100644 --- a/src/BuildPredictionTests/Predictors/ArtifactsSdkPredictorTests.cs +++ b/src/BuildPredictionTests/Predictors/ArtifactsSdkPredictorTests.cs @@ -40,6 +40,26 @@ public void SkipWhenNotUsingSdk() .AssertNoPredictions(); } + [Fact] + public void SkipWhenDisabled() + { + ProjectRootElement projectRootElement = ProjectRootElement.Create(Path.Combine(_rootDir, @"src\project.csproj")); + projectRootElement.AddProperty(ArtifactsSdkPredictor.UsingMicrosoftArtifactsSdkPropertyName, "true"); + projectRootElement.AddProperty(ArtifactsSdkPredictor.EnableArtifactsPropertyName, "false"); + projectRootElement.AddProperty("ArtifactsPath", Path.Combine(_rootDir, "out")); + + var artifactItem = projectRootElement.AddItem(ArtifactsSdkPredictor.ArtifactsItemName, "Artifact.txt"); + artifactItem.AddMetadata(ArtifactsSdkPredictor.DestinationFolderMetadata, @"$(ArtifactsPath)\Project"); + + Directory.CreateDirectory(Path.Combine(_rootDir, "src")); + File.WriteAllText(Path.Combine(_rootDir, @"src\Artifact.txt"), "SomeContent"); + + ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); + new ArtifactsSdkPredictor() + .GetProjectPredictions(projectInstance) + .AssertNoPredictions(); + } + [Fact] public void FindArtifactsForExistingFile() {