Skip to content

Commit 48c768f

Browse files
authored
merge configs (#3)
1 parent 99605e5 commit 48c768f

13 files changed

Lines changed: 131 additions & 104 deletions

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## 0.7.0
2+
**Features**
3+
- Added the configuration file name as an argument
4+
- Merged the project and solution configuration files
5+
- Separated archive naming from project names
6+
- Added ability to add arbitrary substitutions
7+
18
## 0.6.0
29
**Other**
310
- Upgraded to .NET 10

Common.Build.Generator/buildConfig.json

Lines changed: 0 additions & 7 deletions
This file was deleted.

Common.Build/Config/ProjectConfig.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ namespace Common.Build.Config;
55
[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.Members)]
66
public class ProjectConfig
77
{
8-
public required string? Name { get; init; }
9-
public required string? OutputSubdir { get; init; }
10-
public required List<string> Substitute { get; init; }
8+
public required string Name { get; init; }
9+
public required string? ArchiveSuffix { get; init; }
10+
public required string? OutputSubdirectory { get; init; }
11+
public required List<string> SubstitutionTargets { get; init; }
1112
}

Common.Build/Config/SolutionConfig.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ namespace Common.Build.Config;
55
[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.Members)]
66
public class SolutionConfig
77
{
8-
public required string Name { get; init; }
8+
public required string? ArchiveName { get; init; }
99
public required string? DefaultProject { get; init; }
10+
public required List<ProjectConfig> Projects { get; init; }
11+
public required Dictionary<string, string>? Substitutions { get; init; }
1012
}

Common.Build/Core/BuildContext.cs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@ public class BuildContext : FrostingContext
1717
public BuildContext(ICakeContext context) : base(context)
1818
{
1919
// General
20+
var configFile = context.Argument<string>("general-config", "buildConfig.json");
2021
var project = context.Argument<string?>("general-project", null);
2122
var profile = context.Argument<string>("general-profile", "Release");
2223
var version = context.Argument<string>("general-version", "12.34.56");
2324
var skipSubstitution = context.Argument("general-skipSubstitution", false);
24-
var solutionConfigFile = context.Argument<string>("config-solution", "buildConfig.json");
25-
var projectConfigFile = context.Argument<string>("config-project", "buildConfig.json");
2625

2726
// Internal config
2827
{
@@ -38,7 +37,7 @@ public BuildContext(ICakeContext context) : base(context)
3837

3938
// Solution config
4039
{
41-
SolutionConfig = LoadConfig<SolutionConfig>(context, Path.Combine("..", solutionConfigFile));
40+
SolutionConfig = LoadConfig<SolutionConfig>(context, Path.Combine("..", configFile));
4241
}
4342

4443
// Project picking
@@ -47,7 +46,7 @@ public BuildContext(ICakeContext context) : base(context)
4746
{
4847
if (SolutionConfig.DefaultProject is null)
4948
{
50-
throw new InvalidOperationException("No project specified as an argument and no default project specified in the solution config");
49+
throw new InvalidOperationException("No project specified as an argument and no default project specified in the build config");
5150
}
5251

5352
InternalConfig.Project = SolutionConfig.DefaultProject;
@@ -57,12 +56,7 @@ public BuildContext(ICakeContext context) : base(context)
5756
InternalConfig.Project = project;
5857
}
5958

60-
InternalConfig.ProjectFilePath = Path.Combine("..", InternalConfig.Project, $"{InternalConfig.Project}.csproj");
61-
}
62-
63-
// Project config
64-
{
65-
ProjectConfig = LoadConfig<ProjectConfig>(context, Path.Combine("..", InternalConfig.Project, projectConfigFile));
59+
ProjectConfig = SolutionConfig.Projects.First(projectConfig => projectConfig.Name == InternalConfig.Project);
6660
}
6761
}
6862

Common.Build/Core/PathHandling.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ public static string InputPath(BuildContext context, string? path = null)
88
{
99
var inputPath = Path.Combine("..", context.InternalConfig.Project, "bin", context.InternalConfig.Profile);
1010

11-
if (!string.IsNullOrWhiteSpace(context.ProjectConfig.OutputSubdir))
11+
if (!string.IsNullOrWhiteSpace(context.ProjectConfig.OutputSubdirectory))
1212
{
13-
inputPath = Path.Combine(inputPath, context.ProjectConfig.OutputSubdir);
13+
inputPath = Path.Combine(inputPath, context.ProjectConfig.OutputSubdirectory);
1414
}
1515

1616
inputPath = Path.Combine(inputPath, "publish");

Common.Build/Tasks/ArchiveTask.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,16 @@ public class ArchiveTask : FrostingTask<BuildContext>
1111
{
1212
public override void Run(BuildContext context)
1313
{
14-
var archiveName = new StringBuilder(context.SolutionConfig.Name.ToLowerInvariant());
15-
if (!string.IsNullOrWhiteSpace(context.ProjectConfig.Name))
14+
if (string.IsNullOrWhiteSpace(context.SolutionConfig.ArchiveName))
15+
{
16+
throw new InvalidOperationException("Archival task invoked without specifying an archive name in the build config");
17+
}
18+
19+
var archiveName = new StringBuilder(context.SolutionConfig.ArchiveName);
20+
if (!string.IsNullOrWhiteSpace(context.ProjectConfig.ArchiveSuffix))
1621
{
1722
archiveName.Append('_');
18-
archiveName.Append(context.ProjectConfig.Name.ToLowerInvariant());
23+
archiveName.Append(context.ProjectConfig.ArchiveSuffix);
1924
}
2025

2126
archiveName.Append('_');

Common.Build/Tasks/SubstituteTask.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ public class SubstituteTask : FrostingTask<BuildContext>
1313

1414
public override void Run(BuildContext context)
1515
{
16-
foreach (var substitute in context.ProjectConfig.Substitute)
16+
foreach (var substitutionTarget in context.ProjectConfig.SubstitutionTargets)
1717
{
18-
var path = Path.Combine("..", context.InternalConfig.Project, substitute);
18+
var path = Path.Combine("..", context.InternalConfig.Project, substitutionTarget);
1919
if (!File.Exists(path))
2020
{
2121
throw new ApplicationException($"File for substitution \"{path}\" does not exist");
@@ -24,6 +24,10 @@ public override void Run(BuildContext context)
2424
var contents = File.ReadAllText(path);
2525

2626
contents = contents.Replace(VersionPlaceholder, context.InternalConfig.Version);
27+
foreach (var substitution in context.SolutionConfig.Substitutions ?? [])
28+
{
29+
contents = contents.Replace(substitution.Key, substitution.Value);
30+
}
2731

2832
File.WriteAllText(path, contents);
2933
}

Common.Build/buildConfig.json

Lines changed: 0 additions & 6 deletions
This file was deleted.

buildConfig.json

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
{
2-
"$schema": "schemas/solution.schema.json",
3-
"name": "CommonBuild",
4-
"defaultProject": "Common.Build"
2+
"$schema": "schemas/config.schema.json",
3+
"archiveName": "commonbuild",
4+
"defaultProject": "Common.Build",
5+
"projects": [
6+
{
7+
"name": "Common.Build",
8+
"substitutionTargets": [
9+
"Common.Build.csproj"
10+
]
11+
},
12+
{
13+
"name": "Common.Build.Generator",
14+
"archiveSuffix": "generator",
15+
"substitutionTargets": [
16+
"Common.Build.Generator.csproj"
17+
]
18+
}
19+
]
520
}

0 commit comments

Comments
 (0)