-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGenerateScriptsCommand.cs
More file actions
82 lines (66 loc) · 3.1 KB
/
GenerateScriptsCommand.cs
File metadata and controls
82 lines (66 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// Copyright (c) SharpCrafters s.r.o. See the LICENSE.md file in the root directory of this repository root for details.
using JetBrains.Annotations;
using PostSharp.Engineering.BuildTools.Build;
using PostSharp.Engineering.BuildTools.Build.Files;
using PostSharp.Engineering.BuildTools.ContinuousIntegration.TeamCity.Generation;
using PostSharp.Engineering.BuildTools.Dependencies;
using PostSharp.Engineering.BuildTools.Dependencies.Model;
using PostSharp.Engineering.BuildTools.Docker;
using PostSharp.Engineering.BuildTools.Utilities;
using System.IO;
namespace PostSharp.Engineering.BuildTools.ContinuousIntegration;
[UsedImplicitly]
internal class GenerateScriptsCommand : BaseCommand<CommonCommandSettings>
{
protected override bool ExecuteCore( BuildContext context, CommonCommandSettings settings ) => Execute( context, settings );
public static bool Execute( BuildContext context, CommonCommandSettings settings )
{
var product = context.Product;
// TeamCity
if ( product.GenerateTeamCitySettings )
{
if ( !TeamCitySettingsFile.TryWrite( context ) )
{
return false;
}
}
EmbeddedResourceHelper.ExtractScript( context, "Build.ps1", "" );
EmbeddedResourceHelper.ExtractScript( context, "build.sh", "" );
// Docker.
if ( product.UseDocker )
{
EmbeddedResourceHelper.ExtractScript( context, "DockerBuild.ps1", "" );
EmbeddedResourceHelper.ExtractScript( context, "RunClaude.ps1", "eng" );
if ( product.GenerateDockerfiles )
{
var image = (ContainerRequirements) product.OverriddenBuildAgentRequirements!;
if ( !image.WriteDockerfile( context, ContainerOperatingSystem.Windows2025, "Dockerfile" ) )
{
return false;
}
if ( !image.WriteDockerfile( context, ContainerOperatingSystem.Windows2022, "Dockerfile.win2022" ) )
{
return false;
}
// Generate Claude Dockerfile (will auto-add NodeJs if not present)
if ( !image.WriteClaudeDockerfile( context, ContainerOperatingSystem.Windows2025, "Dockerfile.claude" ) )
{
return false;
}
}
// Generate DockerMounts.g.ps1 to define additional mount points for dependencies
var buildSettings = new BuildSettings { BuildConfiguration = BuildConfiguration.Debug };
buildSettings.Initialize( context );
if ( !DependenciesConfigurationFile.TryLoad( context, buildSettings, buildSettings.BuildConfiguration, out var dependenciesOverrideFile ) )
{
return false;
}
if ( !dependenciesOverrideFile.TryWrite( context ) )
{
return false;
}
}
context.Console.WriteSuccess( "Generating build scripts was successful." );
return true;
}
}