Skip to content

Commit 8aa0d95

Browse files
committed
More refactoring of TeamCity settings configuration, with possibility to add custom scripts.
1 parent 52ce79b commit 8aa0d95

33 files changed

+416
-293
lines changed

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

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

33
using PostSharp.Engineering.BuildTools.Build.Publishing;
44
using PostSharp.Engineering.BuildTools.Build.Swapping;
5-
using PostSharp.Engineering.BuildTools.Build.Triggers;
5+
using PostSharp.Engineering.BuildTools.ContinuousIntegration.Triggers;
66
using System;
77

88
namespace PostSharp.Engineering.BuildTools.Build;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
using PostSharp.Engineering.BuildTools.BillOfMaterials;
55
using PostSharp.Engineering.BuildTools.Build.Bumping;
66
using PostSharp.Engineering.BuildTools.Build.Publishing;
7-
using PostSharp.Engineering.BuildTools.Build.Triggers;
87
using PostSharp.Engineering.BuildTools.ContinuousIntegration.Model;
8+
using PostSharp.Engineering.BuildTools.ContinuousIntegration.Triggers;
99
using PostSharp.Engineering.BuildTools.Dependencies.Model;
1010
using PostSharp.Engineering.BuildTools.Docker;
1111
using PostSharp.Engineering.BuildTools.Utilities;
@@ -251,7 +251,7 @@ public DockerSpec? DockerSpec
251251
/// </summary>
252252
public Version? MSBuildVersion { get; init; }
253253

254-
public string[] ExternalTeamCityBuildTypes { get; init; } = [];
254+
public AdditionalCiBuildConfiguration[] AdditionalCiBuildConfigurations { get; init; } = [];
255255

256256
public bool TryGetDependency( string name, [NotNullWhen( true )] out ParametrizedDependency? dependency )
257257
{

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

Lines changed: 1 addition & 0 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 PostSharp.Engineering.BuildTools.ContinuousIntegration.Model;
4+
using PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity;
45
using Spectre.Console.Cli;
56
using System.Collections.Generic;
67

src/PostSharp.Engineering.BuildTools/ContinuousIntegration/GenerateScriptsCommand.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using JetBrains.Annotations;
44
using PostSharp.Engineering.BuildTools.Build;
55
using PostSharp.Engineering.BuildTools.Build.Files;
6+
using PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.Generation;
67
using PostSharp.Engineering.BuildTools.Docker;
78
using PostSharp.Engineering.BuildTools.Utilities;
89

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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.ContinuousIntegration.TeamCity;
4+
using PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.Generation;
5+
6+
namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.Model;
7+
8+
public abstract class AdditionalCiBuildConfiguration
9+
{
10+
public string Name { get; }
11+
12+
public string Id { get; }
13+
14+
public string Branch { get; }
15+
16+
public bool AddSourceDependencies { get; init; }
17+
18+
protected AdditionalCiBuildConfiguration( string id, string name, string branch )
19+
{
20+
this.Id = id;
21+
this.Name = name;
22+
this.Branch = branch;
23+
}
24+
25+
internal abstract TeamCityBuildConfiguration TeamCityBuildConfiguration( ProductProperties productProperties );
26+
}

src/PostSharp.Engineering.BuildTools/ContinuousIntegration/Model/BuildSteps/TeamCityBuildStep.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using JetBrains.Annotations;
2+
using PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity;
3+
using PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.BuildSteps;
4+
using PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.Generation;
5+
6+
namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.Model;
7+
8+
[PublicAPI]
9+
public class PowershellAdditionalCiBuildConfiguration : AdditionalCiBuildConfiguration
10+
{
11+
public PowershellAdditionalCiBuildConfiguration( string id, string name, string branch, string script, string arguments ) : base( id, name, branch )
12+
{
13+
this.Script = script;
14+
this.Arguments = arguments;
15+
}
16+
17+
public string Script { get; }
18+
19+
public string Arguments { get; }
20+
21+
internal override TeamCityBuildConfiguration TeamCityBuildConfiguration( ProductProperties productProperties )
22+
{
23+
var product = productProperties.Product;
24+
25+
var downstreamMergeConfiguration = new TeamCityBuildConfiguration(
26+
this.Id,
27+
this.Name,
28+
this.Branch,
29+
productProperties.DefaultBranchParameter,
30+
productProperties.VcsRootId,
31+
product.ResolvedBuildAgentRequirements )
32+
{
33+
BuildSteps =
34+
[
35+
new PowerShellBuildStep(
36+
"Exec",
37+
$"Execute {this.Script}",
38+
this.Script,
39+
this.Arguments,
40+
product.DockerSpec )
41+
],
42+
IsSshAgentRequired = productProperties.IsRepoRemoteSsh,
43+
SourceDependencies = this.AddSourceDependencies ? productProperties.SourceDependencies : []
44+
};
45+
46+
return downstreamMergeConfiguration;
47+
}
48+
}

src/PostSharp.Engineering.BuildTools/ContinuousIntegration/Model/Arguments/TeamCityBuildConfigurationParameter.cs renamed to src/PostSharp.Engineering.BuildTools/ContinuousIntegration/TeamCity/Arguments/BuildConfigurationParameter.cs

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

3-
namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.Model.Arguments;
3+
namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.Arguments;
44

5-
public class TeamCityBuildConfigurationParameter
5+
public class BuildConfigurationParameter
66
{
77
public string Name { get; }
88

99
public string Value { get; }
1010

11-
public TeamCityBuildConfigurationParameter( string name, string value )
11+
public BuildConfigurationParameter( string name, string value )
1212
{
1313
this.Name = name;
1414
this.Value = value;

src/PostSharp.Engineering.BuildTools/ContinuousIntegration/Model/Arguments/TeamCityTextBuildConfigurationParameter.cs renamed to src/PostSharp.Engineering.BuildTools/ContinuousIntegration/TeamCity/Arguments/TextBuildConfigurationParameter.cs

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

3-
namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.Model.Arguments;
3+
namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.Arguments;
44

5-
public class TeamCityTextBuildConfigurationParameter : TeamCityBuildConfigurationParameter
5+
public class TextBuildConfigurationParameter : BuildConfigurationParameter
66
{
77
public string Label { get; }
88

@@ -12,7 +12,7 @@ public class TeamCityTextBuildConfigurationParameter : TeamCityBuildConfiguratio
1212

1313
public (string Regex, string ValidationMessage)? Validation { get; init; }
1414

15-
public TeamCityTextBuildConfigurationParameter( string name, string label, string description, string defaultValue = "", bool allowEmpty = false )
15+
public TextBuildConfigurationParameter( string name, string label, string description, string defaultValue = "", bool allowEmpty = false )
1616
: base( name, defaultValue )
1717
{
1818
this.Label = label;
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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.ContinuousIntegration.TeamCity.Arguments;
4+
using PostSharp.Engineering.BuildTools.Docker;
5+
using System;
6+
using System.Collections.Generic;
7+
using System.Linq;
8+
9+
namespace PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.BuildSteps;
10+
11+
internal abstract class BuildStep
12+
{
13+
private readonly DockerSpec? _dockerSpec;
14+
15+
private readonly List<BuildConfigurationParameter> _parameters = new();
16+
17+
protected BuildStep( DockerSpec? dockerSpec )
18+
{
19+
this._dockerSpec = dockerSpec;
20+
}
21+
22+
public IReadOnlyList<BuildConfigurationParameter> BuildConfigurationParameters => this._parameters;
23+
24+
protected void AddParameter( BuildConfigurationParameter parameter ) => this._parameters.Add( parameter );
25+
26+
public abstract string GenerateTeamCityCode();
27+
28+
public virtual void InsertPrerequisites( IReadOnlyList<BuildStep> previousSteps, Action<BuildStep> addStep )
29+
{
30+
if ( this._dockerSpec != null )
31+
{
32+
var prepareImageStep = previousSteps
33+
.OfType<EngineeringPrepareImageBuildStep>()
34+
.SingleOrDefault( i => i.DockerSpec.ImageName == this._dockerSpec.ImageName );
35+
36+
if ( prepareImageStep == null )
37+
{
38+
addStep( new EngineeringPrepareImageBuildStep( "PrepareImage", this._dockerSpec ) );
39+
}
40+
}
41+
}
42+
43+
/// <summary>
44+
/// Gets a time that should be added to the complete build configuration timeout.
45+
/// </summary>
46+
public virtual TimeSpan AdditionalTimeout { get; init; } = TimeSpan.Zero;
47+
}

0 commit comments

Comments
 (0)