Skip to content

Commit 736fd6d

Browse files
committed
Moved the definition of the dependencies list to DependencyDefinition instead of Product.
1 parent 8aa0d95 commit 736fd6d

File tree

10 files changed

+149
-78
lines changed

10 files changed

+149
-78
lines changed

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

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ public class Product
2828
private readonly string? _mainVersionFile;
2929
private readonly string? _autoUpdatedVersionsFile;
3030
private readonly string? _bumpInfoFile;
31-
private readonly ParametrizedDependency[] _parametrizedDependencies = [];
32-
private readonly DependencyDefinition[] _dependencyDefinitions = [];
3331

3432
public Product( DependencyDefinition dependencyDefinition )
3533
{
@@ -168,37 +166,16 @@ public TimeSpan BuildTimeout
168166
/// </summary>
169167
public Dictionary<string, string[]> ExportedProperties { get; init; } = new();
170168

171-
/// <summary>
172-
/// Gets the set of artifact dependencies of this product given their <see cref="DependencyDefinition"/>.
173-
/// When at least one dependency requires to override some parameter from its defaults, use the <see cref="ParametrizedDependencies"/> property.
174-
/// </summary>
175-
[PublicAPI]
176-
public DependencyDefinition[] Dependencies
177-
{
178-
[Obsolete( "Use CustomizedDependencies" )]
179-
get => this._dependencyDefinitions;
180-
init => this.ParametrizedDependencies = value.Select( x => x.ToDependency() ).ToArray();
181-
}
182-
183169
/// <summary>
184170
/// Gets the set of artifact dependencies of this product given their <see cref="ParametrizedDependency"/>.
185171
/// </summary>
186172
[PublicAPI]
187-
public ParametrizedDependency[] ParametrizedDependencies
188-
{
189-
get => this._parametrizedDependencies;
190-
191-
init
192-
{
193-
this._parametrizedDependencies = value;
194-
this._dependencyDefinitions = value.Select( x => x.Definition ).ToArray();
195-
}
196-
}
173+
public ParametrizedDependency[] ParametrizedDependencies => this.DependencyDefinition.Dependencies;
197174

198175
/// <summary>
199176
/// Gets the set of source code dependencies of this product.
200177
/// </summary>
201-
public DependencyDefinition[] SourceDependencies { get; init; } = [];
178+
public DependencyDefinition[] SourceDependencies => this.DependencyDefinition.SourceDependencies;
202179

203180
public IBumpStrategy BumpStrategy { get; init; } = new DefaultBumpStrategy();
204181

src/PostSharp.Engineering.BuildTools/ContinuousIntegration/TeamCity/BuildSteps/PowerShellBuildStep.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public PowerShellBuildStep( string id, string name, string scriptPath, string sc
3030
else
3131
{
3232
this.ScriptPath = "DockerBuild.ps1";
33-
this.ScriptArguments = $"-Script {scriptPath} -ImageName {dockerSpec.ImageName} -NoBuildImage {this.ScriptArguments}";
33+
this.ScriptArguments = $"-Script {scriptPath} -ImageName {dockerSpec.ImageName} -NoBuildImage {scriptArguments}";
3434
}
3535
}
3636

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

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using PostSharp.Engineering.BuildTools.Build;
44
using PostSharp.Engineering.BuildTools.Build.Files;
55
using PostSharp.Engineering.BuildTools.Build.Model;
6-
using PostSharp.Engineering.BuildTools.Dependencies.Model;
76
using System;
87
using System.IO;
98
using System.Linq;
@@ -18,39 +17,32 @@ internal class ConfigurationProperties
1817

1918
public TeamCitySnapshotDependency[] BuildDependencies { get; }
2019

21-
2220
public string PrivateArtifactsDirectory { get; }
2321

2422
public BuildConfigurationInfo BuildConfigurationInfo => this._product.Configurations[this.Configuration];
2523

26-
public ConfigurationProperties( Product product, BuildConfiguration configuration, DependenciesConfigurationFile dependenciesOverrideFile )
24+
public ConfigurationProperties( Product product, BuildConfiguration configuration )
2725
{
2826
this._product = product;
2927
this.Configuration = configuration;
3028

3129
// Calculate configuration-specific artifact directory
3230
this.PrivateArtifactsDirectory = product.GetPrivateArtifactsRelativeDirectory( configuration ).Replace( "\\", "/", StringComparison.Ordinal );
3331

34-
var dependencies =
35-
dependenciesOverrideFile.Dependencies.Select( x => (Name: x.Key,
36-
Definition: product.ProductFamily.GetDependencyDefinition( x.Key ),
37-
Source: x.Value) )
38-
.Where( d => d.Definition.GenerateSnapshotDependency )
39-
.Select( x => (x.Name, x.Definition, Configuration: VersionFileHelper.GetDependencyConfiguration( x.Definition, x.Source )) )
40-
.ToList();
32+
var dependencies = product.DependencyDefinition.GetAllDependencies( configuration )
33+
.Where( d => d.Definition.GenerateSnapshotDependency )
34+
.ToList();
4135

4236
var snapshotDependencies = dependencies
4337
.Select( d => new TeamCitySnapshotDependency(
4438
d.Definition.CiConfiguration.BuildTypes[d.Configuration],
4539
true,
46-
$"+:{d.Definition.GetPrivateArtifactsDirectory( d.Configuration ).Replace( Path.DirectorySeparatorChar, '/' )}/**/*=>dependencies/{d.Name}" ) )
40+
$"+:{d.Definition.GetPrivateArtifactsDirectory( d.Configuration ).Replace( Path.DirectorySeparatorChar, '/' )}/**/*=>dependencies/{d.Definition.Name}" ) )
4741
.ToList();
4842

4943
var sourceSnapshotDependencies = product.SourceDependencies.Where( d => d.GenerateSnapshotDependency )
5044
.Select( d => new TeamCitySnapshotDependency( d.CiConfiguration.BuildTypes[configuration], true ) );
5145

5246
this.BuildDependencies = snapshotDependencies.Concat( sourceSnapshotDependencies ).OrderBy( d => d.ObjectId ).ToArray();
53-
54-
5547
}
5648
}

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

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,8 @@ internal static bool TryWrite( BuildContext context, CommonCommandSettings setti
4141
additionalArtifactRules = product.DefaultArtifactRules.AddRange( configurationInfo.AdditionalArtifactRules );
4242
}
4343

44-
if ( !DependenciesConfigurationFile.TryLoad( context, settings, configuration, out var dependenciesOverrideFile ) )
45-
{
46-
return false;
47-
}
48-
49-
if ( !dependenciesOverrideFile.Fetch( context ) )
50-
{
51-
return false;
52-
}
53-
5444
// Create configuration-specific properties
55-
var configurationProperties = new ConfigurationProperties( product, configuration, dependenciesOverrideFile );
45+
var configurationProperties = new ConfigurationProperties( product, configuration );
5646

5747
// Set artifact rules using both ProductProperties and ConfigurationProperties.
5848
var deployedArtifactRules = $"+:{productProperties.PublicArtifactsDirectory}/**/*=>{productProperties.PublicArtifactsDirectory}";
@@ -135,14 +125,13 @@ internal static bool TryWrite( BuildContext context, CommonCommandSettings setti
135125

136126
teamCityBuildConfigurations.Add( downstreamMergeConfiguration );
137127
}
138-
128+
139129
// Add product-defined.
140130
foreach ( var additional in product.AdditionalCiBuildConfigurations )
141131
{
142132
var configuration = additional.TeamCityBuildConfiguration( productProperties );
143133
teamCityBuildConfigurations.Add( configuration );
144134
}
145-
146135

147136
// Add from extensions.
148137
foreach ( var extension in product.Extensions )

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

Lines changed: 70 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) SharpCrafters s.r.o. See the LICENSE.md file in the root directory of this repository root for details.
22

33
using JetBrains.Annotations;
4+
using PostSharp.Engineering.BuildTools.Build;
45
using PostSharp.Engineering.BuildTools.ContinuousIntegration.Model;
56
using PostSharp.Engineering.BuildTools.Dependencies.Model;
67
using PostSharp.Engineering.BuildTools.Tools.TeamCity;
@@ -58,14 +59,6 @@ public MetalamaDependencyDefinition(
5859
DownstreamProductFamily = V2025_2.Family
5960
};
6061

61-
public static DependencyDefinition Consolidated { get; } =
62-
new MetalamaDependencyDefinition(
63-
ProductFamily.ConsolidatedProjectName,
64-
VcsProvider.AzureDevOps,
65-
null,
66-
false,
67-
customRepositoryName: "Metalama.Consolidated" );
68-
6962
// The release build is intentionally used for the debug configuration because we want dependencies to consume the release
7063
// build, for performance reasons. The debug build will be used only locally, and for this we don't need a configuration here.
7164
public static DependencyDefinition MetalamaCompiler { get; } =
@@ -109,6 +102,12 @@ public MetalamaDependencyDefinition(
109102
"Metalama.Testing.*",
110103
"Metalama.Tool",
111104
"Flashtrace*"
105+
],
106+
Dependencies =
107+
[
108+
DevelopmentDependencies.PostSharpEngineering,
109+
MetalamaCompiler.ToDependency(
110+
new ConfigurationSpecific<BuildConfiguration>( BuildConfiguration.Release, BuildConfiguration.Release, BuildConfiguration.Public ) )
112111
]
113112
};
114113

@@ -128,20 +127,37 @@ public MetalamaDependencyDefinition(
128127
"Metalama.Patterns.Caching.Backends.Azure",
129128
"Metalama.Patterns.Caching.Backends.Redis",
130129
"Metalama.Licensing"
131-
]
130+
],
131+
Dependencies = [DevelopmentDependencies.PostSharpEngineering, Metalama]
132132
};
133133

134134
public static DependencyDefinition MetalamaVsx { get; } =
135135
new MetalamaDependencyDefinition(
136136
"Metalama.Vsx",
137137
VcsProvider.AzureDevOps,
138-
null ) { PackagePatterns = ["Metalama.Repacked"] };
138+
null )
139+
{
140+
PackagePatterns = ["Metalama.Repacked"],
141+
Dependencies =
142+
[
143+
DevelopmentDependencies.PostSharpEngineering, Metalama,
144+
PostSharpDependencies.V2025_1.PostSharp.ToDependency( new ConfigurationSpecific<BuildConfiguration>(
145+
BuildConfiguration.Release,
146+
BuildConfiguration.Release,
147+
BuildConfiguration.Release ) )
148+
]
149+
};
139150

140151
public static DependencyDefinition MetalamaSamples { get; } =
141152
new MetalamaDependencyDefinition(
142153
"Metalama.Samples",
143154
VcsProvider.GitHub,
144-
MetalamaGitHubOrganization.Metalama ) { CodeStyle = "Metalama.Samples", PackagePatterns = ["Metalama.Documentation.QuickStart"] };
155+
MetalamaGitHubOrganization.Metalama )
156+
{
157+
CodeStyle = "Metalama.Samples",
158+
PackagePatterns = ["Metalama.Documentation.QuickStart"],
159+
Dependencies = [DevelopmentDependencies.PostSharpEngineering, MetalamaPremium]
160+
};
145161

146162
public static DependencyDefinition TimelessDotNetEngineer { get; } =
147163
new MetalamaDependencyDefinition(
@@ -153,14 +169,17 @@ public MetalamaDependencyDefinition(
153169
new MetalamaDependencyDefinition(
154170
"Metalama.Community",
155171
VcsProvider.GitHub,
156-
MetalamaGitHubOrganization.PostSharp );
172+
MetalamaGitHubOrganization.PostSharp ) { Dependencies = [DevelopmentDependencies.PostSharpEngineering, Metalama] };
157173

158174
public static DependencyDefinition MetalamaDocumentation { get; } =
159175
new MetalamaDependencyDefinition(
160176
"Metalama.Documentation",
161177
VcsProvider.GitHub,
162178
MetalamaGitHubOrganization.Metalama,
163-
false );
179+
false )
180+
{
181+
Dependencies = [DevelopmentDependencies.PostSharpEngineering, MetalamaSamples], SourceDependencies = [MetalamaSamples, MetalamaCommunity]
182+
};
164183

165184
public static DependencyDefinition NopCommerce { get; } =
166185
new MetalamaDependencyDefinition(
@@ -170,7 +189,7 @@ public MetalamaDependencyDefinition(
170189
false,
171190
parentCiProjectId: $"Metalama_Metalama{Family.VersionWithoutDots}_MetalamaTests",
172191
vcsRootProjectId: $"Metalama_Metalama{Family.VersionWithoutDots}",
173-
customBranch: $"dev/{Family.Version}" );
192+
customBranch: $"dev/{Family.Version}" ) { Dependencies = [DevelopmentDependencies.PostSharpEngineering, Metalama] };
174193

175194
public static DependencyDefinition DotNetSdkTests { get; } =
176195
new MetalamaDependencyDefinition(
@@ -179,13 +198,48 @@ public MetalamaDependencyDefinition(
179198
MetalamaGitHubOrganization.PostSharp,
180199
false,
181200
parentCiProjectId: $"Metalama_Metalama{Family.VersionWithoutDots}_MetalamaTests",
182-
vcsRootProjectId: $"Metalama_Metalama{Family.VersionWithoutDots}" );
201+
vcsRootProjectId: $"Metalama_Metalama{Family.VersionWithoutDots}" )
202+
{
203+
Dependencies = [DevelopmentDependencies.PostSharpEngineering, MetalamaPremium]
204+
};
183205

184206
public static DependencyDefinition MetalamaPerformance { get; } =
185207
new MetalamaDependencyDefinition(
186208
"Metalama.Performance",
187209
VcsProvider.GitHub,
188210
MetalamaGitHubOrganization.PostSharp,
189-
false );
211+
false ) { Dependencies = [DevelopmentDependencies.PostSharpEngineering, Metalama] };
212+
213+
public static DependencyDefinition Consolidated { get; } =
214+
new MetalamaDependencyDefinition(
215+
ProductFamily.ConsolidatedProjectName,
216+
VcsProvider.AzureDevOps,
217+
null,
218+
false,
219+
customRepositoryName: "Metalama.Consolidated" )
220+
{
221+
Dependencies =
222+
[
223+
DevelopmentDependencies.PostSharpEngineering,
224+
MetalamaCompiler,
225+
Metalama,
226+
MetalamaCommunity,
227+
MetalamaPremium,
228+
MetalamaSamples,
229+
MetalamaDocumentation,
230+
MetalamaVsx
231+
],
232+
SourceDependencies =
233+
[
234+
MetalamaCompiler,
235+
Metalama,
236+
MetalamaCommunity,
237+
MetalamaPremium,
238+
MetalamaSamples,
239+
MetalamaDocumentation,
240+
MetalamaVsx,
241+
NopCommerce
242+
]
243+
};
190244
}
191245
}

src/PostSharp.Engineering.BuildTools/Dependencies/Model/DependenciesConfigurationFile.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@ namespace PostSharp.Engineering.BuildTools.Dependencies.Model
1919
/// </summary>
2020
internal sealed class DependenciesConfigurationFile
2121
{
22+
private readonly Dictionary<string, DependencySource> _dependencies = new();
23+
2224
public BuildConfiguration Configuration { get; }
2325

24-
public Dictionary<string, DependencySource> Dependencies { get; } = new();
26+
public IDictionary<string, DependencySource> Dependencies => this._dependencies;
2527

2628
public string? LocalBuildFile { get; set; }
2729

@@ -50,7 +52,7 @@ private bool TryLoadDefaultDependencies(
5052

5153
foreach ( var dependency in versionFile.Dependencies )
5254
{
53-
this.Dependencies[dependency.Key] = dependency.Value;
55+
this._dependencies[dependency.Key] = dependency.Value;
5456
}
5557

5658
return true;
@@ -189,7 +191,7 @@ bool TryGetBuildId( out string? versionFile1, out ICiBuildSpec? ciBuildSpec )
189191

190192
// Note that the version can be null here. It means that the version should default to the version defined in Versions.props.
191193

192-
file.Dependencies[name] = DependencySource.CreateFeed( version, origin );
194+
file._dependencies[name] = DependencySource.CreateFeed( version, origin );
193195

194196
break;
195197

@@ -202,7 +204,7 @@ bool TryGetBuildId( out string? versionFile1, out ICiBuildSpec? ciBuildSpec )
202204
dependencySource.GetResolvedLocalPath( context, name ),
203205
name + ".Import.props" );
204206

205-
file.Dependencies[name] = dependencySource;
207+
file._dependencies[name] = dependencySource;
206208

207209
break;
208210
}
@@ -230,7 +232,7 @@ bool TryGetBuildId( out string? versionFile1, out ICiBuildSpec? ciBuildSpec )
230232
name,
231233
name + ".version.props" ) );
232234

233-
file.Dependencies[name] = dependencySource;
235+
file._dependencies[name] = dependencySource;
234236
}
235237
else
236238
{
@@ -252,7 +254,7 @@ bool TryGetBuildId( out string? versionFile1, out ICiBuildSpec? ciBuildSpec )
252254
}
253255

254256
dependencySource.VersionFile = versionFile;
255-
file.Dependencies[name] = dependencySource;
257+
file._dependencies[name] = dependencySource;
256258
}
257259

258260
break;
@@ -276,7 +278,7 @@ bool TryGetBuildId( out string? versionFile1, out ICiBuildSpec? ciBuildSpec )
276278
origin );
277279

278280
dependencySource.VersionFile = versionFile;
279-
file.Dependencies[name] = dependencySource;
281+
file._dependencies[name] = dependencySource;
280282

281283
break;
282284
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Copyright (c) SharpCrafters s.r.o. See the LICENSE.md file in the root directory of this repository root for details.
2+
3+
using PostSharp.Engineering.BuildTools.Build;
4+
5+
namespace PostSharp.Engineering.BuildTools.Dependencies.Model;
6+
7+
public record DependencyConfiguration( DependencyDefinition Definition, BuildConfiguration Configuration );

0 commit comments

Comments
 (0)