Skip to content

Commit 90a865c

Browse files
committed
Change checkout directories and encapsulated artifact rules from string to object.
1 parent 2cd0060 commit 90a865c

19 files changed

+238
-143
lines changed

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

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

33
using PostSharp.Engineering.BuildTools.Build.Publishing;
44
using PostSharp.Engineering.BuildTools.Build.Swapping;
5+
using PostSharp.Engineering.BuildTools.ContinuousIntegration.Model;
56
using PostSharp.Engineering.BuildTools.ContinuousIntegration.Triggers;
67
using System;
78

@@ -34,7 +35,7 @@ public record BuildConfigurationInfo(
3435
string? TeamCityDeploymentName = null,
3536
string? TeamCitySwapName = null,
3637
bool SwapAfterPublishing = false,
37-
string[]? AdditionalArtifactRules = null,
38+
ArtifactRule[]? AdditionalArtifactRules = null,
3839
bool ExportsToTeamCityBuild = true,
3940
bool ExportsToTeamCityDeploy = true,
4041
bool ExportsToTeamCityDeployWithoutDependencies = false,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ internal static bool RestoreSourceDependencies( BuildContext context )
1717
return true;
1818
}
1919

20-
var sourceDependenciesDirectory = Path.Combine( context.RepoDirectory, "source-dependencies" );
20+
var sourceDependenciesDirectory = Path.Combine( context.RepoDirectory, product.SourceDependenciesDirectory );
2121

2222
if ( !Directory.Exists( sourceDependenciesDirectory ) )
2323
{

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using PostSharp.Engineering.BuildTools.Build.Bumping;
66
using PostSharp.Engineering.BuildTools.Build.Publishing;
77
using PostSharp.Engineering.BuildTools.ContinuousIntegration.Model;
8+
using PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity;
89
using PostSharp.Engineering.BuildTools.ContinuousIntegration.Triggers;
910
using PostSharp.Engineering.BuildTools.Dependencies.Model;
1011
using PostSharp.Engineering.BuildTools.Docker;
@@ -91,7 +92,7 @@ public string GetPrivateArtifactsRelativeDirectory( BuildConfiguration configura
9192

9293
public string DumpDirectory { get; init; } = Path.Combine( "artifacts", "dumps" );
9394

94-
public string SourceDependenciesDirectory { get; init; } = Path.Combine( "source-dependencies" );
95+
public string SourceDependenciesDirectory { get; init; } = "source-dependencies";
9596

9697
public bool GenerateArcadeProperties { get; init; }
9798

@@ -159,7 +160,7 @@ public TimeSpan BuildTimeout
159160
ExportsToTeamCityDeploy: true,
160161
RequiresUpstreamCheck: true ) );
161162

162-
public ImmutableArray<string> DefaultArtifactRules { get; } = ImmutableArray<string>.Empty;
163+
public ArtifactRule[] DefaultArtifactRules { get; } = [];
163164

164165
/// <summary>
165166
/// List of properties that must be exported into the *.version.props. These properties must be defined in *.props files specified as the dictionary keys.
@@ -283,7 +284,7 @@ public bool TryGetDependencyDefinition( string name, [NotNullWhen( true )] out D
283284
public ProductExtension[] Extensions { get; init; } = [];
284285

285286
public bool BuildRequiresSourceDependencies { get; init; } = true;
286-
287+
287288
internal string GetPrivateArtifactsAbsoluteDirectory( BuildContext context, BuildConfiguration configuration )
288289
=> Path.Combine(
289290
context.RepoDirectory,
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
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.Model;
4+
using System;
5+
using System.Collections.Generic;
6+
7+
namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.Model;
8+
9+
public record ArtifactRule( string Source, string Target, bool Exclude = false, bool IsAbsolute = false, bool AllFiles = true ) : IComparable<ArtifactRule>
10+
{
11+
internal string GetPublishRule( string checkoutDirectory )
12+
{
13+
var prefix = this.Exclude ? "-" : "+";
14+
var suffix = this.AllFiles ? "/**/*" : "";
15+
16+
if ( this.IsAbsolute )
17+
{
18+
return $"{prefix}:{this.Source}{suffix} => {this.Target}";
19+
}
20+
else
21+
{
22+
return $"{prefix}:{checkoutDirectory}/{this.Source}{suffix} => {this.Target}";
23+
}
24+
}
25+
26+
internal string GetRestoreRule( string checkoutDirectory )
27+
{
28+
var sign = this.Exclude ? "-" : "+";
29+
30+
return $"{sign}:{this.Target}/**/* => {checkoutDirectory}/{this.Source}";
31+
}
32+
33+
public int CompareTo( ArtifactRule? other )
34+
{
35+
if ( ReferenceEquals( this, other ) )
36+
{
37+
return 0;
38+
}
39+
40+
if ( other is null )
41+
{
42+
return 1;
43+
}
44+
45+
if ( this.Exclude != other.Exclude && this.Exclude )
46+
{
47+
return 1;
48+
}
49+
50+
var sourceComparison = string.Compare( this.Source, other.Source, StringComparison.Ordinal );
51+
52+
if ( sourceComparison != 0 )
53+
{
54+
return sourceComparison;
55+
}
56+
57+
var targetComparison = string.Compare( this.Target, other.Target, StringComparison.Ordinal );
58+
59+
if ( targetComparison != 0 )
60+
{
61+
return targetComparison;
62+
}
63+
64+
return this.Exclude.CompareTo( other.Exclude );
65+
}
66+
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,15 @@ internal override TeamCityBuildConfiguration TeamCityBuildConfiguration( Product
2929
this.Name,
3030
this.Branch,
3131
productProperties.VcsId,
32+
product.ProductName,
3233
product.ResolvedBuildAgentRequirements )
3334
{
3435
BuildSteps =
3536
[
3637
new PowerShellBuildStep(
3738
"Exec",
3839
$"Execute {this.Script}",
39-
this.Script,
40+
$"{product.ProductName}/{this.Script}",
4041
this.Arguments,
4142
product.DockerSpec )
4243
],

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,15 @@ namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.BuildS
88

99
internal class EngineeringBuildBuildStep : EngineeringCommandBuildStep
1010
{
11-
public EngineeringBuildBuildStep( BuildConfiguration configuration, bool testOnBuild, DockerSpec? dockerSpec, TimeSpan? timeout ) : base(
11+
public EngineeringBuildBuildStep(
12+
BuildConfiguration configuration,
13+
string checkoutDirectory,
14+
bool testOnBuild,
15+
DockerSpec? dockerSpec,
16+
TimeSpan? timeout ) : base(
1217
"Build",
1318
"Build",
19+
checkoutDirectory,
1420
testOnBuild ? "test" : "build",
1521
$"--configuration {configuration} --buildNumber %build.number% --buildType %system.teamcity.buildType.id%",
1622
true,

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ internal class EngineeringCommandBuildStep : PowerShellBuildStep
1818
public EngineeringCommandBuildStep(
1919
string id,
2020
string name,
21+
string checkoutDirectory,
2122
string command,
2223
string? arguments = null,
2324
bool areCustomArgumentsAllowed = false,
2425
DockerSpec? dockerSpec = null,
2526
TimeSpan? timeout = null ) : base(
2627
id,
2728
name,
28-
"Build.ps1",
29+
$"{checkoutDirectory}/Build.ps1",
2930
GetScriptArguments( id, command, arguments, areCustomArgumentsAllowed, timeout ),
3031
dockerSpec )
3132
{

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.BuildS
88

99
internal class EngineeringPublishBuildStep : EngineeringCommandBuildStep
1010
{
11-
public EngineeringPublishBuildStep( BuildConfiguration configuration, DockerSpec? dockerSpec, TimeSpan? timeSpan ) : base(
11+
public EngineeringPublishBuildStep( BuildConfiguration configuration, string checkoutDirectory, DockerSpec? dockerSpec, TimeSpan? timeSpan ) : base(
1212
"Publish",
1313
"Publish",
14+
checkoutDirectory,
1415
"publish",
1516
$"--configuration {configuration}",
1617
true,

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
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.ContinuousIntegration.Model;
67
using System;
78
using System.IO;
89
using System.Linq;
@@ -37,7 +38,11 @@ public ConfigurationProperties( Product product, BuildConfiguration configuratio
3738
.Select( d => new TeamCitySnapshotDependency(
3839
d.Definition.CiConfiguration.BuildTypes[d.Configuration],
3940
true,
40-
$"+:{d.Definition.GetPrivateArtifactsDirectory( d.Configuration ).Replace( Path.DirectorySeparatorChar, '/' )}/**/*=>dependencies/{d.Definition.Name}" ) )
41+
[
42+
new ArtifactRule(
43+
$"dependencies/{d.Definition.Name}",
44+
d.Definition.GetPrivateArtifactsDirectory( d.Configuration ).Replace( Path.DirectorySeparatorChar, '/' ) )
45+
] ) )
4146
.ToList();
4247

4348
var sourceSnapshotDependencies = product.SourceDependencies.Where( d => d.GenerateSnapshotDependency )

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public ProductProperties( Product product )
4545
d.CiConfiguration.ProjectId.ToString(),
4646
TeamCityHelper.GetVcsId( d ),
4747
true,
48-
$"+:. => {product.SourceDependenciesDirectory}/{d.Name}" ) )
48+
$"+:. => {d.Name}" ) )
4949
.ToArray();
5050
}
5151
}

0 commit comments

Comments
 (0)