Skip to content
Merged
Next Next commit
Add prefix/namespace property
Refactor to pass full CodegenSettings to GenerateFunc
  • Loading branch information
ringods committed Oct 17, 2025
commit b60a0bdc240f2ed5818c4d5fc36c4c43fb5e5d5c
5 changes: 5 additions & 0 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,11 @@ func New() *cobra.Command {
f.StringVarP(&pythonSettings.PackageName, "pythonName", "", codegen.DefaultName, "name of generated Python package")
f.StringVarP(&javaSettings.PackageName, "javaName", "", codegen.DefaultName, "name of generated Java package")

f.StringVarP(&dotNetSettings.PackageNamespace, "dotnetNamespace", "", "", "namespace of generated .NET package")
f.StringVarP(&nodejsSettings.PackageNamespace, "nodejsNamespace", "", "", "namespace of generated NodeJS package")
f.StringVarP(&pythonSettings.PackageNamespace, "pythonPackagePrefix", "", "", "prefix of generated Python package")
f.StringVarP(&javaSettings.PackageNamespace, "javaNamespace", "", "", "namespace of generated Java package")

f.StringVarP(&dotNetSettings.OutputDir, "dotnetPath", "", "", "optional .NET output dir")
f.StringVarP(&goSettings.OutputDir, "goPath", "", "", "optional Go output dir")
f.StringVarP(&nodejsSettings.OutputDir, "nodejsPath", "", "", "optional NodeJS output dir")
Expand Down
4 changes: 2 additions & 2 deletions pkg/codegen/codegen.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (

// GenerateFunc is the function that is called by the generator to generate the code.
// It returns a mapping of filename to the contents of said file and any error that may have occurred.
type GenerateFunc func(pg *PackageGenerator, name string) (mapFileNameToData map[string]*bytes.Buffer, err error)
type GenerateFunc func(pg *PackageGenerator, cs *CodegenSettings) (mapFileNameToData map[string]*bytes.Buffer, err error)

var codeGenFuncs = map[string]GenerateFunc{
Go: GenerateGo,
Expand Down Expand Up @@ -59,7 +59,7 @@ func Generate(cs *CodegenSettings, yamls []io.ReadCloser) error {
}

// Do actual codegen
output, err := generate(pg, cs.PackageName)
output, err := generate(pg, cs)
if err != nil {
return fmt.Errorf("failed to generate %q package %q: %w", cs.Language, cs.PackageName, err)
}
Expand Down
6 changes: 3 additions & 3 deletions pkg/codegen/dotnet.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ var unneededDotNetFiles = []string{
"Provider.cs",
}

func GenerateDotNet(pg *PackageGenerator, name string) (map[string]*bytes.Buffer, error) {
func GenerateDotNet(pg *PackageGenerator, cs *CodegenSettings) (map[string]*bytes.Buffer, error) {
pkg := pg.SchemaPackageWithObjectMetaType()

// Set up C# namespaces
Expand All @@ -56,7 +56,7 @@ func GenerateDotNet(pg *PackageGenerator, name string) (map[string]*bytes.Buffer
// `Pulumi.Kubernetes.Types.Outputs.Meta.V1.ObjectMeta`. This path would
// only get generated properly if `compatibility` was `kubernetes20`.
oldName := pkg.Name
pkg.Name = name
pkg.Name = cs.PackageName
var err error

files, err := dotnet.GeneratePackage(PulumiToolName, pkg, nil, nil)
Expand All @@ -67,7 +67,7 @@ func GenerateDotNet(pg *PackageGenerator, name string) (map[string]*bytes.Buffer
pkg.Name = oldName
delete(pkg.Language, "csharp")

namespaceName := dotnet.Title(name)
namespaceName := dotnet.Title(cs.PackageName)
files["KubernetesResource.cs"] = []byte(kubernetesResource(namespaceName))
files["Utilities.cs"] = []byte(dotNetUtilities(namespaceName))

Expand Down
4 changes: 2 additions & 2 deletions pkg/codegen/golang.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ var UnneededGoFiles = codegen.NewStringSet(
"utilities/pulumiVersion.go",
)

func GenerateGo(pg *PackageGenerator, name string) (buffers map[string]*bytes.Buffer, err error) {
func GenerateGo(pg *PackageGenerator, cs *CodegenSettings) (buffers map[string]*bytes.Buffer, err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("%v", r)
Expand All @@ -46,7 +46,7 @@ func GenerateGo(pg *PackageGenerator, name string) (buffers map[string]*bytes.Bu
pkg := pg.SchemaPackageWithObjectMetaType()
langName := "go"
oldName := pkg.Name
pkg.Name = name
pkg.Name = cs.PackageName
moduleToPackage, err := pg.ModuleToPackage()
if err != nil {
return nil, fmt.Errorf("%w", err)
Expand Down
10 changes: 5 additions & 5 deletions pkg/codegen/java.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (
javaGen "github.com/pulumi/pulumi-java/pkg/codegen/java"
)

func GenerateJava(pg *PackageGenerator, name string) (map[string]*bytes.Buffer, error) {
func GenerateJava(pg *PackageGenerator, cs *CodegenSettings) (map[string]*bytes.Buffer, error) {
pkg := pg.SchemaPackageWithObjectMetaType()

// These fields are required for the Java code generation
Expand All @@ -47,7 +47,7 @@ func GenerateJava(pg *PackageGenerator, name string) (map[string]*bytes.Buffer,

langName := "java"
oldName := pkg.Name
pkg.Name = name
pkg.Name = cs.PackageName

files, err := javaGen.GeneratePackage("crd2pulumi", pkg, nil, nil, true, false)
if err != nil {
Expand All @@ -58,7 +58,7 @@ func GenerateJava(pg *PackageGenerator, name string) (map[string]*bytes.Buffer,
delete(pkg.Language, langName)

// Pin the kubernetes provider version used
utilsPath := "src/main/java/com/pulumi/" + name + "/Utilities.java"
utilsPath := "src/main/java/com/pulumi/" + cs.PackageName + "/Utilities.java"
utils, ok := files[utilsPath]
if !ok {
return nil, fmt.Errorf("cannot find generated utilities.ts")
Expand All @@ -69,8 +69,8 @@ func GenerateJava(pg *PackageGenerator, name string) (map[string]*bytes.Buffer,
}`))

var unneededJavaFiles = []string{
"src/main/java/com/pulumi/" + name + "/Provider.java",
"src/main/java/com/pulumi/" + name + "/ProviderArgs.java",
"src/main/java/com/pulumi/" + cs.PackageName + "/Provider.java",
"src/main/java/com/pulumi/" + cs.PackageName + "/ProviderArgs.java",
"src/main/java/com/pulumi/kubernetes/meta/v1/inputs/ObjectMetaArgs.java",
"src/main/java/com/pulumi/kubernetes/meta/v1/outputs/ObjectMeta.java",
}
Expand Down
13 changes: 7 additions & 6 deletions pkg/codegen/language.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,13 @@ const Python string = "python"
const Java string = "java"

type CodegenSettings struct {
Language string
OutputDir string
PackageName string
PackageVersion string
Overwrite bool
ShouldGenerate bool
Language string
OutputDir string
PackageName string
PackageNamespace string
PackageVersion string
Overwrite bool
ShouldGenerate bool
}

func (cs *CodegenSettings) Path() string {
Expand Down
4 changes: 2 additions & 2 deletions pkg/codegen/nodejs.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ export type ObjectMeta = k8s.types.input.meta.v1.ObjectMeta;
export type ObjectMetaPatch = k8s.types.input.meta.v1.ObjectMetaPatch;
`

func GenerateNodeJS(pg *PackageGenerator, name string) (map[string]*bytes.Buffer, error) {
func GenerateNodeJS(pg *PackageGenerator, cs *CodegenSettings) (map[string]*bytes.Buffer, error) {
pkg := pg.SchemaPackageWithObjectMetaType()
oldName := pkg.Name
pkg.Name = name
pkg.Name = cs.PackageName

files, err := nodejs.GeneratePackage(PulumiToolName, pkg, nil, nil, true, nil)
if err != nil {
Expand Down
6 changes: 3 additions & 3 deletions pkg/codegen/python.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ const pythonMetaFile = `from pulumi_kubernetes.meta.v1._inputs import *
import pulumi_kubernetes.meta.v1.outputs
`

func GeneratePython(pg *PackageGenerator, name string) (map[string]*bytes.Buffer, error) {
func GeneratePython(pg *PackageGenerator, cs *CodegenSettings) (map[string]*bytes.Buffer, error) {
pkg := pg.SchemaPackageWithObjectMetaType()

langName := "python"
oldName := pkg.Name
pkg.Name = name
pkg.Name = cs.PackageName

files, err := python.GeneratePackage(PulumiToolName, pkg, nil, nil)
if err != nil {
Expand All @@ -42,7 +42,7 @@ func GeneratePython(pg *PackageGenerator, name string) (map[string]*bytes.Buffer
pkg.Name = oldName
delete(pkg.Language, langName)

pythonPackageDir := "pulumi_" + name
pythonPackageDir := "pulumi_" + cs.PackageName

// Remove unneeded files
var unneededPythonFiles = []string{
Expand Down