Skip to content

Commit 99adf19

Browse files
authored
feat(pacmak): support adding suffix to .NET package versions (#557)
Allows setting a `jsii.targets.dotnet.versionSuffix` key defines a string to be appended at the end of the version number of the NuGet package.
1 parent dfde37a commit 99adf19

File tree

15 files changed

+77
-32
lines changed

15 files changed

+77
-32
lines changed

packages/jsii-calc-lib/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@
1515
"maven": {
1616
"groupId": "software.amazon.jsii.tests",
1717
"artifactId": "calculator-lib",
18-
"versionSuffix": "devpreview"
18+
"versionSuffix": ".DEVPREVIEW"
1919
}
2020
},
2121
"dotnet": {
2222
"namespace": "Amazon.JSII.Tests.CalculatorNamespace.LibNamespace",
23-
"packageId": "Amazon.JSII.Tests.CalculatorPackageId.LibPackageId"
23+
"packageId": "Amazon.JSII.Tests.CalculatorPackageId.LibPackageId",
24+
"versionSuffix": "-devpreview"
2425
},
2526
"python": {
2627
"distName": "scope.jsii-calc-lib",

packages/jsii-calc-lib/test/assembly.jsii

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,14 @@
100100
"targets": {
101101
"dotnet": {
102102
"namespace": "Amazon.JSII.Tests.CalculatorNamespace.LibNamespace",
103-
"packageId": "Amazon.JSII.Tests.CalculatorPackageId.LibPackageId"
103+
"packageId": "Amazon.JSII.Tests.CalculatorPackageId.LibPackageId",
104+
"versionSuffix": "-devpreview"
104105
},
105106
"java": {
106107
"maven": {
107108
"artifactId": "calculator-lib",
108109
"groupId": "software.amazon.jsii.tests",
109-
"versionSuffix": "devpreview"
110+
"versionSuffix": ".DEVPREVIEW"
110111
},
111112
"package": "software.amazon.jsii.tests.calculator.lib"
112113
},
@@ -541,5 +542,5 @@
541542
}
542543
},
543544
"version": "0.12.1",
544-
"fingerprint": "MXSaKBVwpFalIulxHb3PUOMH4eKJJHPxI2u+zfEsbmA="
545+
"fingerprint": "aQ66EJSs69SuXip1lDEBj6a1qwzN8+ThWgYp6Lq1Q8Y="
545546
}

packages/jsii-calc/test/assembly.jsii

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,14 @@
8686
"targets": {
8787
"dotnet": {
8888
"namespace": "Amazon.JSII.Tests.CalculatorNamespace.LibNamespace",
89-
"packageId": "Amazon.JSII.Tests.CalculatorPackageId.LibPackageId"
89+
"packageId": "Amazon.JSII.Tests.CalculatorPackageId.LibPackageId",
90+
"versionSuffix": "-devpreview"
9091
},
9192
"java": {
9293
"maven": {
9394
"artifactId": "calculator-lib",
9495
"groupId": "software.amazon.jsii.tests",
95-
"versionSuffix": "devpreview"
96+
"versionSuffix": ".DEVPREVIEW"
9697
},
9798
"package": "software.amazon.jsii.tests.calculator.lib"
9899
},
@@ -161,13 +162,14 @@
161162
"targets": {
162163
"dotnet": {
163164
"namespace": "Amazon.JSII.Tests.CalculatorNamespace.LibNamespace",
164-
"packageId": "Amazon.JSII.Tests.CalculatorPackageId.LibPackageId"
165+
"packageId": "Amazon.JSII.Tests.CalculatorPackageId.LibPackageId",
166+
"versionSuffix": "-devpreview"
165167
},
166168
"java": {
167169
"maven": {
168170
"artifactId": "calculator-lib",
169171
"groupId": "software.amazon.jsii.tests",
170-
"versionSuffix": "devpreview"
172+
"versionSuffix": ".DEVPREVIEW"
171173
},
172174
"package": "software.amazon.jsii.tests.calculator.lib"
173175
},
@@ -8776,5 +8778,5 @@
87768778
}
87778779
},
87788780
"version": "0.12.1",
8779-
"fingerprint": "AlSn00Q27h2jLbVq5Xtz97KdHszOYlZOq+al2FOvsWM="
8781+
"fingerprint": "eJFB3vFCc9pOmBGqLCLopXjumM3fvGhVp9zhFfty6xM="
87808782
}

packages/jsii-dotnet-generator/src/Amazon.JSII.Generator/AssemblyExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public static IEnumerable<XElement> GetMsBuildProperties(this Assembly assembly)
5959
yield return new XElement("GeneratePackageOnBuild", true);
6060
yield return new XElement("IncludeSymbols", true);
6161
yield return new XElement("IncludeSource", true);
62-
yield return new XElement("PackageVersion", assembly.Version);
62+
yield return new XElement("PackageVersion", assembly.GetDecoratedVersion());
6363
yield return new XElement("PackageId", assembly.Targets.DotNet.PackageId);
6464
yield return new XElement("Description", GetDescription());
6565
yield return new XElement("ProjectUrl", assembly.Homepage);

packages/jsii-dotnet-generator/src/Amazon.JSII.Generator/AssemblyGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ void SaveProjectFile()
126126
),
127127
GetDependencies()
128128
.Distinct()
129-
.Select(d => new { Package = symbols.GetAssemblyName(d.Key), d.Value.Version})
129+
.Select(d => new { Package = symbols.GetAssemblyName(d.Key), Version = d.Value.GetDecoratedVersion() })
130130
.Select(d =>
131131
new XElement("PackageReference",
132132
new XAttribute("Include", d.Package),
@@ -283,7 +283,7 @@ void SaveType(Type type)
283283
case TypeKind.Class:
284284
{
285285
var classType = (ClassType) type;
286-
286+
287287
if (classType.IsAbstract)
288288
{
289289
SaveTypeFile($"{symbols.GetAbstractClassProxyName(classType)}.cs",
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using Amazon.JSII.JsonModel.Spec;
2+
3+
namespace Amazon.JSII.Generator
4+
{
5+
public static class VersionSuffixExtensions
6+
{
7+
public static string GetDecoratedVersion(this Assembly assembly)
8+
{
9+
return MakeDecoratedVersion(assembly.Version, assembly.Targets?.DotNet?.VersionSuffix);
10+
}
11+
12+
public static string GetDecoratedVersion(this PackageVersion package)
13+
{
14+
return MakeDecoratedVersion(package.Version, package.Targets?.DotNet?.VersionSuffix);
15+
}
16+
17+
private static string MakeDecoratedVersion(string version, string suffix)
18+
{
19+
if (suffix == null)
20+
{
21+
return version;
22+
}
23+
// suffix is guaranteed to start with a leading `-`
24+
return $"{version}{suffix}";
25+
}
26+
}
27+
}

packages/jsii-dotnet-jsonmodel/src/Amazon.JSII.JsonModel/Spec/AssemblyTargets.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public AssemblyTargets(DotNetTarget dotnet, IDictionary<string, object> others =
1414

1515
[JsonProperty("dotnet", NullValueHandling = NullValueHandling.Ignore)]
1616
public DotNetTarget DotNet { get; }
17-
17+
1818
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
1919
public class DotNetTarget
2020
{
@@ -25,7 +25,8 @@ public DotNetTarget
2525
string title = null,
2626
bool signAssembly = false,
2727
string assemblyOriginatorKeyFile = null,
28-
string iconUrl = null
28+
string iconUrl = null,
29+
string versionSuffix = null
2930
)
3031
{
3132
Namespace = @namespace ?? throw new ArgumentNullException(nameof(@namespace));
@@ -35,8 +36,14 @@ public DotNetTarget
3536
SignAssembly = signAssembly;
3637
AssemblyOriginatorKeyFile = assemblyOriginatorKeyFile;
3738
IconUrl = iconUrl;
39+
VersionSuffix = versionSuffix;
40+
41+
if (VersionSuffix != null && !VersionSuffix.StartsWith("-"))
42+
{
43+
throw new ArgumentException($"{nameof(versionSuffix)} must start with a '-' (received {versionSuffix})");
44+
}
3845
}
39-
46+
4047
[JsonProperty("namespace")]
4148
public string Namespace { get; }
4249

@@ -54,6 +61,9 @@ public DotNetTarget
5461

5562
[JsonProperty("iconUrl", NullValueHandling = NullValueHandling.Ignore)]
5663
public string IconUrl { get; }
57-
}
64+
65+
[JsonProperty("versionSuffix", NullValueHandling = NullValueHandling.Ignore)]
66+
public string VersionSuffix { get; }
67+
}
5868
}
5969
}

packages/jsii-kernel/test/test.kernel.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,11 +248,12 @@ defineTest('naming allows returns the module name for different languages', asyn
248248
test.deepEqual(sandbox.naming({ assembly: '@scope/jsii-calc-lib' }).naming, {
249249
dotnet: {
250250
namespace: 'Amazon.JSII.Tests.CalculatorNamespace.LibNamespace',
251-
packageId: 'Amazon.JSII.Tests.CalculatorPackageId.LibPackageId'
251+
packageId: 'Amazon.JSII.Tests.CalculatorPackageId.LibPackageId',
252+
versionSuffix: '-devpreview'
252253
},
253254
java: {
254255
package: 'software.amazon.jsii.tests.calculator.lib',
255-
maven: { groupId: 'software.amazon.jsii.tests', artifactId: 'calculator-lib', versionSuffix: 'devpreview' },
256+
maven: { groupId: 'software.amazon.jsii.tests', artifactId: 'calculator-lib', versionSuffix: '.DEVPREVIEW' },
256257
},
257258
js: { npm: '@scope/jsii-calc-lib' },
258259
python: { distName: 'scope.jsii-calc-lib', module: 'scope.jsii_calc_lib' },

packages/jsii-pacmak/lib/targets/java.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ class JavaGenerator extends Generator {
504504
function makeVersion(version: string, suffix?: string): string {
505505
if (!suffix) { return version; }
506506
if (!suffix.startsWith('-') && !suffix.startsWith('.')) {
507-
return `${version}-${suffix}`;
507+
throw new Error(`versionSuffix must start with '-' or '.', but received ${suffix}`);
508508
}
509509
return `${version}${suffix}`;
510510
}

packages/jsii-pacmak/test/expected.jsii-calc-lib/dotnet/Amazon.JSII.Tests.CalculatorPackageId.LibPackageId/.jsii

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,14 @@
100100
"targets": {
101101
"dotnet": {
102102
"namespace": "Amazon.JSII.Tests.CalculatorNamespace.LibNamespace",
103-
"packageId": "Amazon.JSII.Tests.CalculatorPackageId.LibPackageId"
103+
"packageId": "Amazon.JSII.Tests.CalculatorPackageId.LibPackageId",
104+
"versionSuffix": "-devpreview"
104105
},
105106
"java": {
106107
"maven": {
107108
"artifactId": "calculator-lib",
108109
"groupId": "software.amazon.jsii.tests",
109-
"versionSuffix": "devpreview"
110+
"versionSuffix": ".DEVPREVIEW"
110111
},
111112
"package": "software.amazon.jsii.tests.calculator.lib"
112113
},
@@ -541,5 +542,5 @@
541542
}
542543
},
543544
"version": "0.12.1",
544-
"fingerprint": "MXSaKBVwpFalIulxHb3PUOMH4eKJJHPxI2u+zfEsbmA="
545+
"fingerprint": "aQ66EJSs69SuXip1lDEBj6a1qwzN8+ThWgYp6Lq1Q8Y="
545546
}

0 commit comments

Comments
 (0)