Skip to content

Commit

Permalink
Add Traversal support for PublishContainer (#603)
Browse files Browse the repository at this point in the history
  • Loading branch information
MattKotsenas authored Feb 6, 2025
1 parent f4f2caf commit 7b9e0ba
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 4 deletions.
14 changes: 10 additions & 4 deletions src/Traversal.UnitTests/TraversalTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ public void ProjectReferenceCanSpecifyTargets(string targets, string expected)
[InlineData("Clean")]
[InlineData("Pack")]
[InlineData("Publish")]
[InlineData("PublishContainer")]
[InlineData("Test")]
[InlineData("VSTest")]
public void PropertiesAreSet(string target)
Expand Down Expand Up @@ -219,15 +220,17 @@ public void PropertiesHaveExpectedValues(string propertyName, string value, stri
actualValue.ShouldBe(expectedValue, StringComparer.OrdinalIgnoreCase, customMessage: $"Property {propertyName} should have a value of \"{expectedValue}\" but its value was \"{actualValue}\"");
}

[Fact]
public void PublishRespectsNoBuild()
[Theory]
[InlineData("Publish")]
[InlineData("PublishContainer")]
public void PublishRespectsNoBuild(string target)
{
string[] projects = new[]
{
ProjectCreator.Create(path: GetTempFileWithExtension(".proj"))
.Target("Build")
.TaskMessage("02CA9347E8BB4C5E856BC0903780CC9B", MessageImportance.High)
.Target("Publish")
.Target(target)
.TaskMessage("20B044FEEC3E435D90CE721012C6577E", MessageImportance.High)
.Save(),
}.Select(i => i.FullPath).ToArray();
Expand All @@ -242,7 +245,7 @@ public void PublishRespectsNoBuild()
}),
path: GetTempFile("dirs.proj"))
.Save()
.TryBuild("Publish", out bool result, out BuildOutput buildOutput);
.TryBuild(target, out bool result, out BuildOutput buildOutput);

result.ShouldBeTrue(buildOutput.GetConsoleLog());

Expand Down Expand Up @@ -277,6 +280,7 @@ public void SkipsNonExistentTargets()
[InlineData("Rebuild")]
[InlineData("Pack")]
[InlineData("Publish")]
[InlineData("PublishContainer")]
[InlineData("Test")]
[InlineData("VSTest")]
public void StaticGraphProjectReferenceTargetsAreSetForEachTraversalTarget(string target)
Expand Down Expand Up @@ -453,6 +457,7 @@ public void TraversalsCanSkipProjects()
[InlineData("Clean")]
[InlineData("Pack")]
[InlineData("Publish")]
[InlineData("PublishContainer")]
[InlineData("Test")]
[InlineData("VSTest")]
public void TraversalTargetsRun(string target)
Expand Down Expand Up @@ -484,6 +489,7 @@ public void TraversalTargetsRun(string target)
[InlineData("Rebuild")]
[InlineData("Pack")]
[InlineData("Publish")]
[InlineData("PublishContainer")]
[InlineData("Test")]
[InlineData("VSTest")]
public void TraversalTargetsShouldBeConditionedOnIsGraphBuild(string target)
Expand Down
30 changes: 30 additions & 0 deletions src/Traversal/Sdk/Traversal.targets
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
<ProjectReferenceTargets Remove="Test" />
<ProjectReferenceTargets Remove="VSTest" />
<ProjectReferenceTargets Remove="Publish" />
<ProjectReferenceTargets Remove="PublishContainer" />
<ProjectReferenceTargets Remove="Pack" />

<ProjectReferenceTargets Include="Build" Targets=".default" OuterBuild="true" />
Expand All @@ -50,6 +51,7 @@
<ProjectReferenceTargets Include="Test" Targets="Test" />
<ProjectReferenceTargets Include="VSTest" Targets="VSTest" />
<ProjectReferenceTargets Include="Publish" Targets="Publish" />
<ProjectReferenceTargets Include="PublishContainer" Targets="PublishContainer" />
<ProjectReferenceTargets Include="Pack" Targets="Pack" />
</ItemGroup>

Expand Down Expand Up @@ -101,6 +103,13 @@
<PublishDependsOn Condition="'$(NoBuild)' == 'true'">
</PublishDependsOn>

<PublishContainerDependsOn Condition="'$(NoBuild)' != 'true'">
Build;
</PublishContainerDependsOn>

<PublishContainerDependsOn Condition="'$(NoBuild)' == 'true'">
</PublishContainerDependsOn>

<GetTargetPathDependsOn></GetTargetPathDependsOn>
</PropertyGroup>

Expand Down Expand Up @@ -246,6 +255,27 @@
ContinueOnError="$([MSBuild]::ValueOrDefault('$(PublishContinueOnError)', '$(ContinueOnError)'))" />
</Target>

<Target Name="PublishContainer"
DependsOnTargets="$(PublishContainerDependsOn)"
Condition=" '$(IsGraphBuild)' != 'true' "
Returns="@(CollectedBuildOutput)">
<MSBuild Projects="@(ProjectReference)"
Properties="%(ProjectReference.SetConfiguration); %(ProjectReference.SetPlatform); %(ProjectReference.SetTargetFramework)"
Targets="PublishContainer"
Condition="'%(ProjectReference.Publish)' != 'false'"
BuildInParallel="$([MSBuild]::ValueOrDefault('%(ProjectReference.PublishInParallel)',
$([MSBuild]::ValueOrDefault('%(ProjectReference.BuildInParallel)',
$([MSBuild]::ValueOrDefault('$(PublishInParallel)', '$(BuildInParallel)'))
))
))"
SkipNonexistentProjects="$(SkipNonexistentProjects)"
SkipNonexistentTargets="$(SkipNonexistentTargets)"
StopOnFirstFailure="$(StopOnFirstFailure)"
ContinueOnError="$([MSBuild]::ValueOrDefault('$(PublishContinueOnError)', '$(ContinueOnError)'))">
<Output TaskParameter="TargetOutputs" ItemName="CollectedBuildOutput" />
</MSBuild>
</Target>

<Target Name="GetTargetPath"
DependsOnTargets="$(GetTargetPathDependsOn)"
Returns="@(CollectedBuildOutput)">
Expand Down

0 comments on commit 7b9e0ba

Please sign in to comment.