Skip to content

Commit 8595302

Browse files
Improve package name validation
1 parent 2ab10a8 commit 8595302

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

sdk/Pulumi.Tests/Provider/ComponentAnalyzerTests.cs

+29
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,35 @@ public void TestAnalyzeRequiredOptionalProperties()
851851
AssertSchemaEqual(expected, schema);
852852
}
853853

854+
[Theory]
855+
[InlineData("123test", "Package name must start with a letter and contain only letters, numbers, hyphens, and underscores")]
856+
[InlineData("test!", "Package name must start with a letter and contain only letters, numbers, hyphens, and underscores")]
857+
[InlineData("test space", "Package name must start with a letter and contain only letters, numbers, hyphens, and underscores")]
858+
[InlineData("", "Package name cannot be empty or whitespace")]
859+
[InlineData(" ", "Package name cannot be empty or whitespace")]
860+
[InlineData(null, "Package name cannot be empty or whitespace")]
861+
public void TestInvalidPackageNames(string? name, string expectedError)
862+
{
863+
var metadata = new Metadata(name!);
864+
var exception = Assert.Throws<ArgumentException>(() =>
865+
ComponentAnalyzer.GenerateSchema(metadata, typeof(SelfSignedCertificate)));
866+
867+
Assert.Equal($"{expectedError} (Parameter 'metadata')", exception.Message);
868+
}
869+
870+
[Theory]
871+
[InlineData("test")]
872+
[InlineData("test-package")]
873+
[InlineData("test_package")]
874+
[InlineData("test123")]
875+
[InlineData("myPackage")]
876+
public void TestValidPackageNames(string name)
877+
{
878+
var metadata = new Metadata(name);
879+
var schema = ComponentAnalyzer.GenerateSchema(metadata, typeof(SelfSignedCertificate));
880+
Assert.Equal(name, schema.Name);
881+
}
882+
854883
private readonly Metadata _metadata = new Metadata("my-component", "0.0.1", "Test package");
855884

856885
private static PackageSpec CreateBasePackageSpec(

sdk/Pulumi/Provider/ComponentAnalyzer.cs

+10
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Collections.Immutable;
66
using System.Linq;
77
using System.Reflection;
8+
using System.Text.RegularExpressions;
89
namespace Pulumi.Experimental.Provider
910
{
1011
/// <summary>
@@ -42,7 +43,16 @@ public static PackageSpec GenerateSchema(Metadata metadata, Assembly assembly)
4243
public static PackageSpec GenerateSchema(Metadata metadata, params Type[] componentTypes)
4344
{
4445
if (metadata?.Name == null || string.IsNullOrWhiteSpace(metadata.Name))
46+
{
4547
throw new ArgumentException("Package name cannot be empty or whitespace", nameof(metadata));
48+
}
49+
50+
if (!Regex.IsMatch(metadata.Name, "^[a-zA-Z][-a-zA-Z0-9_]*$"))
51+
{
52+
throw new ArgumentException(
53+
"Package name must start with a letter and contain only letters, numbers, hyphens, and underscores",
54+
nameof(metadata));
55+
}
4656

4757
if (componentTypes.Length == 0)
4858
{

0 commit comments

Comments
 (0)