Skip to content

Commit eac0497

Browse files
committed
Support for sparse checkout of source dependencies.
1 parent 72c07c7 commit eac0497

File tree

5 files changed

+56
-21
lines changed

5 files changed

+56
-21
lines changed

src/PostSharp.Engineering.BuildTools/ContinuousIntegration/Model/AdditionalCiBuildConfiguration.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ public abstract class AdditionalCiBuildConfiguration
1313

1414
public string Branch { get; }
1515

16-
public bool RequiresSourceDependencies { get; init; }
17-
16+
public SourceDependenciesRequirements SourceDependenciesRequirements { get; init; }
17+
18+
public bool OnlyCheckoutEngineering { get; init; }
19+
1820
protected AdditionalCiBuildConfiguration( string id, string name, string branch )
1921
{
2022
this.Id = id;
@@ -23,4 +25,11 @@ protected AdditionalCiBuildConfiguration( string id, string name, string branch
2325
}
2426

2527
internal abstract TeamCityBuildConfiguration TeamCityBuildConfiguration( ProductProperties productProperties );
28+
}
29+
30+
public enum SourceDependenciesRequirements
31+
{
32+
None,
33+
Full,
34+
EngOnly
2635
}

src/PostSharp.Engineering.BuildTools/ContinuousIntegration/Model/PowershellAdditionalCiBuildConfiguration.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity;
55
using PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.BuildSteps;
66
using PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.Generation;
7+
using System;
78

89
namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.Model;
910

@@ -41,7 +42,13 @@ internal override TeamCityBuildConfiguration TeamCityBuildConfiguration( Product
4142
product.DockerSpec )
4243
],
4344
IsSshAgentRequired = productProperties.IsRepoRemoteSsh,
44-
SourceDependencies = this.RequiresSourceDependencies ? productProperties.SourceDependencies : []
45+
SourceDependencies = this.SourceDependenciesRequirements switch
46+
{
47+
SourceDependenciesRequirements.None => [],
48+
SourceDependenciesRequirements.EngOnly => productProperties.EngOnlySourceDependencies,
49+
SourceDependenciesRequirements.Full => productProperties.SourceDependencies,
50+
_ => throw new ArgumentOutOfRangeException()
51+
}
4552
};
4653

4754
return downstreamMergeConfiguration;

src/PostSharp.Engineering.BuildTools/ContinuousIntegration/TeamCity/Generation/ProductProperties.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using PostSharp.Engineering.BuildTools.Build.Model;
44
using PostSharp.Engineering.BuildTools.Tools.TeamCity;
55
using System;
6+
using System.Collections.Generic;
67
using System.Linq;
78

89
namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.Generation;
@@ -31,6 +32,8 @@ internal class ProductProperties
3132

3233
public TeamCitySourceDependency[] SourceDependencies { get; }
3334

35+
public TeamCitySourceDependency[] EngOnlySourceDependencies { get; set; }
36+
3437
public ProductProperties( Product product )
3538
{
3639
this.Product = product;
@@ -47,5 +50,16 @@ public ProductProperties( Product product )
4750
true,
4851
$"+:. => {product.SourceDependenciesDirectory}/{d.Name}" ) )
4952
.ToArray();
53+
54+
this.EngOnlySourceDependencies = product.SourceDependencies.Select( d => new TeamCitySourceDependency(
55+
d.CiConfiguration.ProjectId.ToString(),
56+
TeamCityHelper.GetVcsId( d ),
57+
true,
58+
$"""
59+
+:{product.DependencyDefinition.EngineeringDirectory} => {product.SourceDependenciesDirectory}/{d.Name}/{product.DependencyDefinition.EngineeringDirectory}
60+
+:DockerBuild.ps1 => {product.SourceDependenciesDirectory}/{d.Name}/DockerBuild.ps1
61+
+:Build.ps1 => {product.SourceDependenciesDirectory}/{d.Name}/Build.ps1
62+
""" ) )
63+
.ToArray();
5064
}
5165
}

src/PostSharp.Engineering.BuildTools/ContinuousIntegration/TeamCity/TeamCityBuildConfiguration.cs

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,11 @@ void AddBuildStep( BuildStep newStep )
153153
{
154154
var objectName = sourceDependency.IsAbsoluteId ? @$"AbsoluteId(""{sourceDependency.VcsId}"")" : sourceDependency.VcsId;
155155

156-
writer.WriteLine( $@" root({objectName}, ""{sourceDependency.ArtifactRules}"")" );
156+
writer.WriteLine(
157+
$""""
158+
root({objectName},
159+
"""{sourceDependency.CheckoutRules}""")
160+
"""" );
157161
}
158162
}
159163

@@ -194,7 +198,7 @@ void AddBuildStep( BuildStep newStep )
194198

195199
var requiresSwabra = allBuildSteps.Count > 0;
196200
var requiresSshAgent = this.IsSshAgentRequired;
197-
var requiresAnyFeatures = requiresSwabra || requiresSshAgent || this.RequiresCommitStatusPublisher ;
201+
var requiresAnyFeatures = requiresSwabra || requiresSshAgent || this.RequiresCommitStatusPublisher;
198202

199203
// Features.
200204
if ( requiresAnyFeatures )
@@ -227,22 +231,23 @@ void AddBuildStep( BuildStep newStep )
227231
}
228232
}
229233
""" );
230-
234+
231235
// Integrate with PRs.
232-
writer.WriteLine($$"""
233-
pullRequests {
234-
vcsRootExtId = "{{this.VcsId}}"
235-
provider = github {
236-
authType = token {
237-
token = "%env.{{EnvironmentVariableNames.GitHubToken}}%"
238-
}
239-
filterTargetBranch = "+:refs/heads/{{this.DefaultBranch}}"
240-
filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
241-
}
242-
}
243-
244-
245-
""");
236+
writer.WriteLine(
237+
$$"""
238+
pullRequests {
239+
vcsRootExtId = "{{this.VcsId}}"
240+
provider = github {
241+
authType = token {
242+
token = "%env.{{EnvironmentVariableNames.GitHubToken}}%"
243+
}
244+
filterTargetBranch = "+:refs/heads/{{this.DefaultBranch}}"
245+
filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
246+
}
247+
}
248+
249+
250+
""" );
246251
}
247252

248253
if ( requiresSshAgent )

src/PostSharp.Engineering.BuildTools/ContinuousIntegration/TeamCity/TeamCitySourceDependency.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity;
44

5-
internal record TeamCitySourceDependency( string ObjectId, string VcsId, bool IsAbsoluteId, string ArtifactRules );
5+
internal record TeamCitySourceDependency( string ObjectId, string VcsId, bool IsAbsoluteId, string CheckoutRules );

0 commit comments

Comments
 (0)