Skip to content

Commit 76a7bd8

Browse files
committed
Fixes for Metalama.Compiler.
1 parent 1e0dd1e commit 76a7bd8

35 files changed

+236
-179
lines changed

src/PostSharp.Engineering.BuildTools/BillOfMaterials/DependencyWalker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ private static IReadOnlyList<PackageDependencyInfo> GetPackageDependencies( Buil
5555

5656
if ( !depsFilesPattern.TryGetFiles(
5757
context.RepoDirectory,
58-
new BuildInfo( null, defaultConfiguration, context.Product, null ),
58+
new BuildArguments( null, defaultConfiguration, context.Product, null ),
5959
depsFiles ) )
6060
{
6161
return [];

src/PostSharp.Engineering.BuildTools/Build/BuildCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public static bool Execute( BuildContext context, BuildSettings settings )
125125
ImportFile.Delete( context );
126126

127127
// We have to read the version from the file we have generated - using MSBuild, because it contains properties.
128-
var buildInfo = VersionFileHelper.ReadGeneratedVersionFile( context, settings.BuildConfiguration );
128+
var buildInfo = BuildArguments.Read( context, settings.BuildConfiguration );
129129

130130
var privateArtifactsDirectory = product.GetPrivateArtifactsDirectory( context, buildInfo );
131131

src/PostSharp.Engineering.BuildTools/Build/BuildContext.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ public string GetWorkingDirectory( string projectOrSolution )
5353
/// Gets a value indicating whether the current device is a guest device, as opposed to a device owned and configured by PostSharp.
5454
/// The main difference is that guest devices use feed packages while company devices use TeamCity artefacts.
5555
/// </summary>
56-
public static bool IsGuestDevice => !bool.TryParse( Environment.GetEnvironmentVariable( EnvironmentVariableNames.IsPostSharpOwned ), out var value ) || !value;
56+
public static bool IsGuestDevice
57+
=> !bool.TryParse( Environment.GetEnvironmentVariable( EnvironmentVariableNames.IsPostSharpOwned ), out var value ) || !value;
5758

5859
/// <summary>
5960
/// Gets the full path of the current manifest file (i.e. the file called <c>My.Product.version.props</c>)
@@ -64,7 +65,7 @@ public string GetManifestFilePath( BuildConfiguration configuration )
6465
return Path.Combine(
6566
this.RepoDirectory,
6667
this.Product.PrivateArtifactsDirectory.ToString(
67-
new BuildInfo( null, configuration.ToString(), this.Product.DependencyDefinition.MSBuildConfiguration[configuration], null ) ),
68+
new BuildArguments( null, configuration.ToString(), this.Product.DependencyDefinition.MSBuildConfiguration[configuration], null ) ),
6869
$"{this.Product.ProductName}.version.props" );
6970
}
7071

@@ -154,18 +155,32 @@ public static bool TryCreate(
154155
}
155156

156157
public BuildContext WithConsoleHelper( ConsoleHelper consoleHelper )
157-
=> new( consoleHelper, this.RepoDirectory, this.CommandData, this.Branch, this.CommandContext, this.UseProjectDirectoryAsWorkingDirectory, this.Settings );
158+
=> new(
159+
consoleHelper,
160+
this.RepoDirectory,
161+
this.CommandData,
162+
this.Branch,
163+
this.CommandContext,
164+
this.UseProjectDirectoryAsWorkingDirectory,
165+
this.Settings );
158166

159167
public BuildContext WithUseProjectDirectoryAsWorkingDirectory( bool useProjectDirectoryAsWorkingDirectory )
160-
=> new( this.Console, this.RepoDirectory, this.CommandData, this.Branch, this.CommandContext, useProjectDirectoryAsWorkingDirectory, this.Settings );
168+
=> new(
169+
this.Console,
170+
this.RepoDirectory,
171+
this.CommandData,
172+
this.Branch,
173+
this.CommandContext,
174+
useProjectDirectoryAsWorkingDirectory,
175+
this.Settings );
161176

162177
[PublicAPI]
163178
#pragma warning disable CA1822
164179
public bool IsRunningUnderContainer => DockerHelper.IsDockerBuild();
165180
#pragma warning restore CA1822
166181

167182
public bool IsContinuousIntegrationBuild => TeamCityHelper.IsTeamCityBuild( this.Settings );
168-
183+
169184
[PublicAPI]
170185
public CommonCommandSettings Settings { get; }
171186
}

src/PostSharp.Engineering.BuildTools/Build/CleanCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ void CleanNugetCache()
116116
DeleteDirectory( Path.Combine( context.RepoDirectory, directory ) );
117117
}
118118

119-
var stringParameters = new BuildInfo( null, settings.BuildConfiguration, product, null );
119+
var stringParameters = new BuildArguments( null, settings.BuildConfiguration, product, null );
120120

121121
DeleteDirectory(
122122
Path.Combine(

src/PostSharp.Engineering.BuildTools/Build/Files/ArtifactManifestFile.cs

Lines changed: 75 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ internal static string GetPath( BuildContext context, BuildConfiguration configu
207207
var product = context.Product;
208208

209209
var privateArtifactsRelativeDir =
210-
product.PrivateArtifactsDirectory.ToString( new BuildInfo( null, configuration, product, null ) );
210+
product.PrivateArtifactsDirectory.ToString( new BuildArguments( null, configuration, product, null ) );
211211

212212
var artifactsDir = Path.Combine( context.RepoDirectory, privateArtifactsRelativeDir );
213213

@@ -222,10 +222,18 @@ internal static string GetPath( BuildContext context, BuildConfiguration configu
222222
/// </summary>
223223
public static bool TryRead(
224224
BuildContext context,
225-
MainVersionFile mainVersionFile,
225+
BuildConfiguration configuration,
226226
[NotNullWhen( true )] out ArtifactManifestVersionInfo? artifactManifestVersionInfo )
227227
{
228228
var product = context.Product;
229+
230+
if ( !MainVersionFile.TryRead( context, out var mainVersionFile ) )
231+
{
232+
artifactManifestVersionInfo = null;
233+
234+
return false;
235+
}
236+
229237
var overriddenPatchVersion = mainVersionFile.OverriddenPatchVersion;
230238

231239
string? mainVersion;
@@ -251,15 +259,12 @@ public static bool TryRead(
251259
{
252260
// If no OverridenPatchVersion is defined, we use MainVersion property from private artifact.
253261

254-
var artifactVersionFile = Path.Combine(
255-
context.RepoDirectory,
256-
context.Product.PrivateArtifactsDirectory.ToString(),
257-
context.Product.ProductName + ".version.props" );
262+
var artifactVersionFile = context.GetManifestFilePath( configuration );
258263

259264
var document = XDocument.Load( artifactVersionFile );
260265
var project = document.Root;
261266
var properties = project?.Element( "PropertyGroup" );
262-
var propertyName = $"{context.Product.ProductNameWithoutDot}MainVersion";
267+
var propertyName = $"{product.ProductNameWithoutDot}MainVersion";
263268
mainVersion = properties?.Element( propertyName )?.Value;
264269

265270
if ( mainVersion == null )
@@ -281,4 +286,67 @@ public static bool TryRead(
281286

282287
return true;
283288
}
289+
290+
public static BuildArguments CreateParametricStringArguments( BuildContext context, BuildConfiguration buildConfiguration )
291+
{
292+
var product = context.Product;
293+
var versionFilePath = context.GetManifestFilePath( buildConfiguration );
294+
295+
if ( !File.Exists( versionFilePath ) )
296+
{
297+
throw new FileNotFoundException( $"The file '{versionFilePath}' should exist before calling this method." );
298+
}
299+
300+
var versionFile = Project.FromFile( versionFilePath, MSBuildLoadOptions.IgnoreImportErrors );
301+
302+
string packageVersion;
303+
304+
if ( product.GenerateArcadeProperties )
305+
{
306+
packageVersion = versionFile.Properties
307+
.Single( p => p.Name == product.ProductNameWithoutDot + "VersionPrefix" )
308+
.EvaluatedValue;
309+
310+
var suffix = versionFile
311+
.Properties
312+
.Single( p => p.Name == product.ProductNameWithoutDot + "VersionSuffix" )
313+
.EvaluatedValue;
314+
315+
if ( !string.IsNullOrWhiteSpace( suffix ) )
316+
{
317+
packageVersion = packageVersion + "-" + suffix;
318+
}
319+
}
320+
else
321+
{
322+
packageVersion = versionFile
323+
.Properties
324+
.Single( p => p.Name == product.ProductNameWithoutDot + "Version" )
325+
.EvaluatedValue;
326+
}
327+
328+
if ( string.IsNullOrEmpty( packageVersion ) )
329+
{
330+
throw new InvalidOperationException( "PackageVersion should not be null." );
331+
}
332+
333+
var configuration = versionFile
334+
.Properties
335+
.Single( p => p.Name == product.ProductNameWithoutDot + "BuildConfiguration" )
336+
.EvaluatedValue;
337+
338+
var packagePreviewVersion = versionFile
339+
.Properties
340+
.Single( p => p.Name == product.ProductNameWithoutDot + "PreviewVersion" )
341+
.EvaluatedValue;
342+
343+
if ( string.IsNullOrEmpty( configuration ) )
344+
{
345+
throw new InvalidOperationException( "BuildConfiguration should not be null." );
346+
}
347+
348+
ProjectCollection.GlobalProjectCollection.UnloadAllProjects();
349+
350+
return new BuildArguments( packageVersion, Enum.Parse<BuildConfiguration>( configuration ), product, packagePreviewVersion );
351+
}
284352
}

src/PostSharp.Engineering.BuildTools/Build/Files/ArtifactManifestVersionInfo.cs

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

55
namespace PostSharp.Engineering.BuildTools.Build.Files;
66

7-
internal record ArtifactManifestVersionInfo( Version Version, string PackageVersionSuffix );
7+
internal record ArtifactManifestVersionInfo( Version Version, string PackageVersionSuffix )
8+
{
9+
public string PackageVersion => this.Version.ToString() + this.PackageVersionSuffix;
10+
}

src/PostSharp.Engineering.BuildTools/Build/Files/NuGetConfigFile.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ internal static bool TryWrite( BuildContext context, DependenciesOverrideFile de
6767
// Add the current artifact directory.
6868
var artifactDirectory = Path.Combine(
6969
context.RepoDirectory,
70-
product.PrivateArtifactsDirectory.ToString( new BuildInfo( null, configuration, product, null ) ) );
70+
product.PrivateArtifactsDirectory.ToString( new BuildArguments( null, configuration, product, null ) ) );
7171

7272
AddDirectory( product.ProductName, artifactDirectory, product.DependencyDefinition.PackagePatterns );
7373

@@ -95,7 +95,7 @@ internal static bool TryWrite( BuildContext context, DependenciesOverrideFile de
9595
dependencyDirectory = Path.Combine(
9696
dependencyDirectory,
9797
dependencyDefinition.PrivateArtifactsDirectory.ToString(
98-
new BuildInfo(
98+
new BuildArguments(
9999
null,
100100
parametrizedDependency.ConfigurationMapping[configuration],
101101
dependencyDefinition,

src/PostSharp.Engineering.BuildTools/Build/Files/TeamCitySettingsFile.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ private static bool TryWriteStandalone( BuildContext context, CommonCommandSetti
4848
continue;
4949
}
5050

51-
var versionInfo = new BuildInfo( null, configuration, product, null );
51+
var versionInfo = new BuildArguments( null, configuration, product, null );
5252

5353
// Set artifact rules.
5454
var publicArtifactsDirectory =
@@ -98,7 +98,7 @@ private static bool TryWriteStandalone( BuildContext context, CommonCommandSetti
9898
.Select( d => new TeamCitySnapshotDependency(
9999
d.Definition.CiConfiguration.BuildTypes[d.Configuration],
100100
true,
101-
$"+:{d.Definition.PrivateArtifactsDirectory.ToString( new BuildInfo( null, d.Configuration, product, null ) ).Replace( Path.DirectorySeparatorChar, '/' )}/**/*=>dependencies/{d.Name}" ) )
101+
$"+:{d.Definition.PrivateArtifactsDirectory.ToString( new BuildArguments( null, d.Configuration, product, null ) ).Replace( Path.DirectorySeparatorChar, '/' )}/**/*=>dependencies/{d.Name}" ) )
102102
.ToList();
103103

104104
var sourceSnapshotDependencies = product.SourceDependencies.Where( d => d.GenerateSnapshotDependency )
@@ -469,7 +469,7 @@ bool TryPopulateBuildConfigurations(
469469
&& !projectsWithNoNuGetArtifacts.Any( p => dependencyDefinition.Name.Contains( p, StringComparison.Ordinal ) ) )
470470
{
471471
var dependencyMsBuildConfiguration = dependencyDefinition.MSBuildConfiguration[configuration];
472-
var dependencyBuildInfo = new BuildInfo( null, configuration.ToString(), dependencyMsBuildConfiguration, null );
472+
var dependencyBuildInfo = new BuildArguments( null, configuration.ToString(), dependencyMsBuildConfiguration, null );
473473

474474
var dependencyPrivateArtifactsDirectory = dependencyDefinition.PrivateArtifactsDirectory.ToString( dependencyBuildInfo )
475475
.Replace( Path.DirectorySeparatorChar, '/' );
@@ -521,7 +521,7 @@ bool TryPopulateBuildConfigurations(
521521
.Select( c => c! ) );
522522
}
523523

524-
var buildInfo = new BuildInfo( null, configuration, product, null );
524+
var buildInfo = new BuildArguments( null, configuration, product, null );
525525

526526
var privateArtifactsDirectory =
527527
product.PrivateArtifactsDirectory.ToString( buildInfo ).Replace( "\\", "/", StringComparison.Ordinal );
@@ -848,7 +848,7 @@ bool TryAddPreOrPostDeploymentBuildConfiguration(
848848
var dependencyName = dependencyDefinition.Name;
849849
var configuration = BuildConfiguration.Public;
850850
var dependencyMsBuildConfiguration = dependencyDefinition.MSBuildConfiguration[configuration];
851-
var dependencyBuildInfo = new BuildInfo( null, configuration.ToString(), dependencyMsBuildConfiguration, null );
851+
var dependencyBuildInfo = new BuildArguments( null, configuration.ToString(), dependencyMsBuildConfiguration, null );
852852

853853
var dependencyPrivateArtifactsDirectory = dependencyDefinition.PrivateArtifactsDirectory.ToString( dependencyBuildInfo )
854854
.Replace( Path.DirectorySeparatorChar, '/' );

src/PostSharp.Engineering.BuildTools/Build/Files/VersionFileHelper.cs

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -16,63 +16,6 @@ namespace PostSharp.Engineering.BuildTools.Build.Files;
1616

1717
internal static class VersionFileHelper
1818
{
19-
public static BuildInfo ReadGeneratedVersionFile( BuildContext context, BuildConfiguration buildConfiguration )
20-
{
21-
var product = context.Product;
22-
var versionFilePath = context.GetManifestFilePath( buildConfiguration );
23-
var versionFile = Project.FromFile( versionFilePath, MSBuildLoadOptions.IgnoreImportErrors );
24-
25-
string packageVersion;
26-
27-
if ( product.GenerateArcadeProperties )
28-
{
29-
packageVersion = versionFile.Properties
30-
.Single( p => p.Name == product.ProductNameWithoutDot + "VersionPrefix" )
31-
.EvaluatedValue;
32-
33-
var suffix = versionFile
34-
.Properties
35-
.Single( p => p.Name == product.ProductNameWithoutDot + "VersionSuffix" )
36-
.EvaluatedValue;
37-
38-
if ( !string.IsNullOrWhiteSpace( suffix ) )
39-
{
40-
packageVersion = packageVersion + "-" + suffix;
41-
}
42-
}
43-
else
44-
{
45-
packageVersion = versionFile
46-
.Properties
47-
.Single( p => p.Name == product.ProductNameWithoutDot + "Version" )
48-
.EvaluatedValue;
49-
}
50-
51-
if ( string.IsNullOrEmpty( packageVersion ) )
52-
{
53-
throw new InvalidOperationException( "PackageVersion should not be null." );
54-
}
55-
56-
var configuration = versionFile
57-
.Properties
58-
.Single( p => p.Name == product.ProductNameWithoutDot + "BuildConfiguration" )
59-
.EvaluatedValue;
60-
61-
var packagePreviewVersion = versionFile
62-
.Properties
63-
.Single( p => p.Name == product.ProductNameWithoutDot + "PreviewVersion" )
64-
.EvaluatedValue;
65-
66-
if ( string.IsNullOrEmpty( configuration ) )
67-
{
68-
throw new InvalidOperationException( "BuildConfiguration should not be null." );
69-
}
70-
71-
ProjectCollection.GlobalProjectCollection.UnloadAllProjects();
72-
73-
return new BuildInfo( packageVersion, Enum.Parse<BuildConfiguration>( configuration ), product, packagePreviewVersion );
74-
}
75-
7619
public static BuildConfiguration GetDependencyConfiguration( DependencyDefinition definition, DependencySource source )
7720
{
7821
if ( source.SourceKind == DependencySourceKind.Feed )

src/PostSharp.Engineering.BuildTools/Build/Helpers/GitIntegrationHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ public static bool TryAddTagToLastCommit( BuildContext context, PublishSettings
2727

2828
if ( !ArtifactManifestFile.TryRead(
2929
context,
30-
mainVersionFileInfo,
30+
settings.BuildConfiguration,
3131
out var preparedVersionInfo ) )
3232
{
3333
return false;
3434
}
3535

36-
var versionTag = string.Concat( "release/", preparedVersionInfo.Version, preparedVersionInfo.PackageVersionSuffix );
36+
var versionTag = $"release/{preparedVersionInfo.PackageVersion}";
3737

3838
ToolInvocationHelper.InvokeTool(
3939
context.Console,

0 commit comments

Comments
 (0)