Skip to content

Commit cd8f5b4

Browse files
committed
Improved downstream merge generation.
1 parent 5392419 commit cd8f5b4

File tree

11 files changed

+52
-24
lines changed

11 files changed

+52
-24
lines changed

src/PostSharp.Engineering.BuildTools/Build/Model/Product.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,8 @@ public bool TryGetDependencyDefinition( string name, [NotNullWhen( true )] out D
277277

278278
public ProductExtension[] Extensions { get; init; } = [];
279279

280+
public bool BuildRequiresSourceDependencies { get; init; } = true;
281+
280282
internal string GetPrivateArtifactsAbsoluteDirectory( BuildContext context, BuildConfiguration configuration )
281283
=> Path.Combine(
282284
context.RepoDirectory,

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

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

1414
public string Branch { get; }
1515

16-
public bool AddSourceDependencies { get; init; }
17-
16+
public bool RequiresSourceDependencies { get; init; }
17+
1818
protected AdditionalCiBuildConfiguration( string id, string name, string branch )
1919
{
2020
this.Id = id;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ internal override TeamCityBuildConfiguration TeamCityBuildConfiguration( Product
4141
product.DockerSpec )
4242
],
4343
IsSshAgentRequired = productProperties.IsRepoRemoteSsh,
44-
SourceDependencies = this.AddSourceDependencies ? productProperties.SourceDependencies : []
44+
SourceDependencies = this.RequiresSourceDependencies ? productProperties.SourceDependencies : []
4545
};
4646

4747
return downstreamMergeConfiguration;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ internal class ConfigurationProperties
1515

1616
public BuildConfiguration Configuration { get; }
1717

18-
public TeamCitySnapshotDependency[] BuildDependencies { get; }
18+
public TeamCitySnapshotDependency[] SnapshotDependenciesForBuildConfiguration { get; }
1919

2020
public string PrivateArtifactsDirectory { get; }
2121

@@ -43,6 +43,6 @@ public ConfigurationProperties( Product product, BuildConfiguration configuratio
4343
var sourceSnapshotDependencies = product.SourceDependencies.Where( d => d.GenerateSnapshotDependency )
4444
.Select( d => new TeamCitySnapshotDependency( d.CiConfiguration.BuildTypes[configuration], true ) );
4545

46-
this.BuildDependencies = snapshotDependencies.Concat( sourceSnapshotDependencies ).OrderBy( d => d.ObjectId ).ToArray();
46+
this.SnapshotDependenciesForBuildConfiguration = snapshotDependencies.Concat( sourceSnapshotDependencies ).OrderBy( d => d.ObjectId ).ToArray();
4747
}
4848
}

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using PostSharp.Engineering.BuildTools.Build;
44
using PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.BuildSteps;
55
using PostSharp.Engineering.BuildTools.ContinuousIntegration.Triggers;
6-
using PostSharp.Engineering.BuildTools.Dependencies.Model;
76
using PostSharp.Engineering.BuildTools.Utilities;
87
using System.Collections.Generic;
98
using System.Collections.Immutable;
@@ -169,7 +168,7 @@ private static TeamCityBuildConfiguration CreateDeployConfiguration(
169168
product.DockerSpec,
170169
configurationProperties.BuildConfigurationInfo.DeploymentTimeout ?? product.DeploymentTimeout );
171170

172-
var snapshotDependencies = configurationProperties.BuildDependencies.Where( d => d.ArtifactRules != null )
171+
var snapshotDependencies = configurationProperties.SnapshotDependenciesForBuildConfiguration.Where( d => d.ArtifactRules != null )
173172
.Concat( [new TeamCitySnapshotDependency( teamCityBuildConfiguration.ObjectName, false, deployedArtifactRules )] );
174173

175174
if ( !isStandalone )
@@ -204,9 +203,16 @@ private static TeamCityBuildConfiguration CreateDownstreamMergeConfiguration( Pr
204203
{
205204
var product = productProperties.Product;
206205

207-
var snapshotDependencies = product.Configurations[BuildConfiguration.Debug].ExportsToTeamCityBuild
206+
IEnumerable<TeamCitySnapshotDependency> snapshotDependencies = product.Configurations[BuildConfiguration.Debug].ExportsToTeamCityBuild
208207
? new[] { new TeamCitySnapshotDependency( "DebugBuild", false ) }
209-
: null;
208+
: [];
209+
210+
snapshotDependencies =
211+
snapshotDependencies.Concat(
212+
product.ParametrizedDependencies
213+
.Where( d => d.Definition.GenerateSnapshotDependency )
214+
.Select( d => d.Definition )
215+
.Select( d => new TeamCitySnapshotDependency( d.CiConfiguration.DownstreamMergeBuildType, true, FailureAction: FailureAction.AddProblem ) ) );
210216

211217
var downstreamMergeConfiguration = new TeamCityBuildConfiguration(
212218
"DownstreamMerge",
@@ -225,7 +231,7 @@ private static TeamCityBuildConfiguration CreateDownstreamMergeConfiguration( Pr
225231
dockerSpec: product.DockerSpec,
226232
timeout: product.DownstreamMergeTimeout )
227233
],
228-
SnapshotDependencies = snapshotDependencies,
234+
SnapshotDependencies = snapshotDependencies.ToArray(),
229235
BuildTriggers = [new SourceBuildTrigger()],
230236
IsSshAgentRequired = productProperties.IsRepoRemoteSsh
231237
};
@@ -360,8 +366,8 @@ private static TeamCityBuildConfiguration CreateBuildConfiguration(
360366
ArtifactRules = publishedArtifactRules,
361367
AdditionalArtifactRules = additionalArtifactRules.ToArray(),
362368
BuildTriggers = configurationProperties.BuildConfigurationInfo.BuildTriggers,
363-
SnapshotDependencies = configurationProperties.BuildDependencies,
364-
SourceDependencies = productProperties.SourceDependencies,
369+
SnapshotDependencies = configurationProperties.SnapshotDependenciesForBuildConfiguration,
370+
SourceDependencies = product.BuildRequiresSourceDependencies ? productProperties.SourceDependencies : [],
365371
IsSshAgentRequired = requiresUpstreamCheck && productProperties.IsRepoRemoteSsh
366372
};
367373

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,17 @@ void AddBuildStep( BuildStep newStep )
251251
{
252252
var objectName = dependency.IsAbsoluteId ? @$"AbsoluteId(""{dependency.ObjectId}"")" : dependency.ObjectId;
253253

254+
var failureAction = dependency.FailureAction switch
255+
{
256+
FailureAction.FailToStart => "FAIL_TO_START",
257+
FailureAction.AddProblem => "ADD_PROBLEM",
258+
_ => throw new ArgumentOutOfRangeException()
259+
};
260+
254261
writer.WriteLine(
255262
$@" dependency({objectName}) {{
256263
snapshot {{
257-
onDependencyFailure = FailureAction.FAIL_TO_START
264+
onDependencyFailure = FailureAction.{failureAction}
258265
}}" );
259266

260267
if ( dependency.ArtifactRules != null )

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

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

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

5-
internal record TeamCitySnapshotDependency( string ObjectId, bool IsAbsoluteId, string? ArtifactRules = null );
5+
internal record TeamCitySnapshotDependency( string ObjectId, bool IsAbsoluteId, string? ArtifactRules = null, FailureAction FailureAction = FailureAction.FailToStart);
6+
7+
internal enum FailureAction
8+
{
9+
FailToStart,
10+
AddProblem
11+
}

src/PostSharp.Engineering.BuildTools/Dependencies/Definitions/MetalamaDependencies.V2025_1.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,11 @@ public MetalamaDependencyDefinition(
141141
Dependencies =
142142
[
143143
DevelopmentDependencies.PostSharpEngineering, Metalama,
144-
PostSharpDependencies.V2025_1.PostSharp.ToDependency( new ConfigurationSpecific<BuildConfiguration>(
145-
BuildConfiguration.Release,
146-
BuildConfiguration.Release,
147-
BuildConfiguration.Release ) )
144+
PostSharpDependencies.V2025_1.PostSharp.ToDependency(
145+
new ConfigurationSpecific<BuildConfiguration>(
146+
BuildConfiguration.Release,
147+
BuildConfiguration.Release,
148+
BuildConfiguration.Release ) )
148149
]
149150
};
150151

@@ -221,7 +222,8 @@ public MetalamaDependencyDefinition(
221222
Dependencies =
222223
[
223224
DevelopmentDependencies.PostSharpEngineering,
224-
MetalamaCompiler,
225+
MetalamaCompiler.ToDependency(
226+
new ConfigurationSpecific<BuildConfiguration>( BuildConfiguration.Release, BuildConfiguration.Release, BuildConfiguration.Public ) ),
225227
Metalama,
226228
MetalamaCommunity,
227229
MetalamaPremium,

src/PostSharp.Engineering.BuildTools/Dependencies/Definitions/MetalamaDependencies.V2025_2.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,9 @@ public MetalamaDependencyDefinition(
220220
Dependencies =
221221
[
222222
DevelopmentDependencies.PostSharpEngineering,
223-
MetalamaCompiler,
223+
MetalamaCompiler.ToDependency(
224+
new ConfigurationSpecific<BuildConfiguration>( BuildConfiguration.Release, BuildConfiguration.Release, BuildConfiguration.Public ) ),
225+
224226
Metalama,
225227
MetalamaCommunity,
226228
MetalamaPremium,

src/PostSharp.Engineering.BuildTools/Dependencies/Definitions/MetalamaDependencies.V2026_0.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,8 @@ public MetalamaDependencyDefinition(
222222
Dependencies =
223223
[
224224
DevelopmentDependencies.PostSharpEngineering,
225-
MetalamaCompiler,
225+
MetalamaCompiler.ToDependency(
226+
new ConfigurationSpecific<BuildConfiguration>( BuildConfiguration.Release, BuildConfiguration.Release, BuildConfiguration.Public ) ),
226227
Metalama,
227228
MetalamaCommunity,
228229
MetalamaPremium,

0 commit comments

Comments
 (0)