Merge pull request 'fix: spec files in subfolders and refactored builder' (#28) from fix/cmd_refactor_subfolders_and-version into alpha
Some checks failed
Publish / Check GoReleaser config (push) Successful in 6s
Publish / Publish provider (push) Failing after 4m8s

Reviewed-on: #28
Reviewed-by: Andre_Harms <andre.harms@stackit.cloud>
This commit is contained in:
Marcel_Henselin 2026-02-03 08:27:22 +00:00
commit e7176b2eef
Signed by: tf-provider.git.onstackit.cloud
GPG key ID: 6D7E8A1ED8955A9C
14 changed files with 165 additions and 137 deletions

View file

@ -27,6 +27,8 @@ const (
GEN_REPO = "https://github.com/stackitcloud/stackit-sdk-generator.git" GEN_REPO = "https://github.com/stackitcloud/stackit-sdk-generator.git"
) )
var supportedVersions = []string{"alpha", "beta"}
type version struct { type version struct {
verString string verString string
major int major int
@ -35,6 +37,13 @@ type version struct {
func Build() error { func Build() error {
slog.Info("Starting Builder") slog.Info("Starting Builder")
slog.Info("Checking needed commands available")
err := checkCommands([]string{"tfplugingen-framework", "tfplugingen-openapi"})
if err != nil {
return err
}
root, err := getRoot() root, err := getRoot()
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
@ -209,12 +218,6 @@ func Build() error {
} }
} }
slog.Info("Checking needed commands available")
err = checkCommands([]string{"tfplugingen-framework", "tfplugingen-openapi"})
if err != nil {
return err
}
slog.Info("Generating service boilerplate") slog.Info("Generating service boilerplate")
err = generateServiceFiles(*root, path.Join(*root, GEN_REPO_NAME)) err = generateServiceFiles(*root, path.Join(*root, GEN_REPO_NAME))
if err != nil { if err != nil {
@ -400,36 +403,59 @@ func generateServiceFiles(rootDir, generatorDir string) error {
return err return err
} }
specs, err := os.ReadDir(path.Join(rootDir, "service_specs")) services, err := os.ReadDir(path.Join(rootDir, "service_specs"))
if err != nil { if err != nil {
return err return err
} }
for _, spec := range specs { for _, service := range services {
if spec.IsDir() { if !service.IsDir() {
continue continue
} }
versions, err := os.ReadDir(path.Join(rootDir, "service_specs", service.Name()))
if err != nil {
return err
}
for _, svcVersion := range versions {
if !svcVersion.IsDir() {
continue
}
if svcVersion.Name() != "alpha" && svcVersion.Name() != "beta" {
continue
}
specFiles, err := os.ReadDir(path.Join(rootDir, "service_specs", service.Name(), svcVersion.Name()))
if err != nil {
return err
}
for _, specFile := range specFiles {
if specFile.IsDir() {
continue
}
// slog.Info("Checking spec", "name", spec.Name()) // slog.Info("Checking spec", "name", spec.Name())
r := regexp.MustCompile(`^([a-z-]+)_(.*)_config.yml$`) r := regexp.MustCompile(`^(.*)_config.yml$`)
matches := r.FindAllStringSubmatch(spec.Name(), -1) matches := r.FindAllStringSubmatch(specFile.Name(), -1)
if matches != nil { if matches != nil {
fileName := matches[0][0] fileName := matches[0][0]
service := matches[0][1] resource := matches[0][1]
resource := matches[0][2]
slog.Info( slog.Info(
"Found service spec", "Found service spec",
"name", "name",
spec.Name(), specFile.Name(),
"service", "service",
service, service.Name(),
"resource", "resource",
resource, resource,
) )
for _, part := range []string{"alpha", "beta"} { //for _, part := range []string{"alpha", "beta"} {
oasFile := path.Join(generatorDir, "oas", fmt.Sprintf("%s%s.json", service, part)) oasFile := path.Join(generatorDir, "oas", fmt.Sprintf("%s%s.json", service.Name(), svcVersion))
if _, err = os.Stat(oasFile); !os.IsNotExist(err) { if _, err = os.Stat(oasFile); !os.IsNotExist(err) {
slog.Info("found matching oas", "service", service, "version", part) slog.Info("found matching oas", "svc", service.Name(), "version", svcVersion.Name())
scName := fmt.Sprintf("%s%s", service, part) scName := fmt.Sprintf("%s%s", service.Name(), svcVersion.Name())
scName = strings.ReplaceAll(scName, "-", "") scName = strings.ReplaceAll(scName, "-", "")
err = os.MkdirAll(path.Join(rootDir, "generated", "internal", "services", scName, resource), 0755) err = os.MkdirAll(path.Join(rootDir, "generated", "internal", "services", scName, resource), 0755)
if err != nil { if err != nil {
@ -437,7 +463,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
} }
// slog.Info("Generating openapi spec json") // slog.Info("Generating openapi spec json")
specFile := path.Join(rootDir, "generated", "specs", fmt.Sprintf("%s_%s_spec.json", scName, resource)) specJsonFile := path.Join(rootDir, "generated", "specs", fmt.Sprintf("%s_%s_spec.json", scName, resource))
var stdOut, stdErr bytes.Buffer var stdOut, stdErr bytes.Buffer
@ -448,7 +474,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
"--config", "--config",
path.Join(rootDir, "service_specs", fileName), path.Join(rootDir, "service_specs", fileName),
"--output", "--output",
specFile, specJsonFile,
oasFile, oasFile,
) )
cmd.Stdout = &stdOut cmd.Stdout = &stdOut
@ -471,14 +497,14 @@ func generateServiceFiles(rootDir, generatorDir string) error {
} }
} }
// slog.Info("Creating terraform service resource files folder") // slog.Info("Creating terraform svc resource files folder")
tgtFolder := path.Join(rootDir, "generated", "internal", "services", scName, resource, "resources_gen") tgtFolder := path.Join(rootDir, "generated", "internal", "services", scName, resource, "resources_gen")
err = os.MkdirAll(tgtFolder, 0755) err = os.MkdirAll(tgtFolder, 0755)
if err != nil { if err != nil {
return err return err
} }
// slog.Info("Generating terraform service resource files") // slog.Info("Generating terraform svc resource files")
// noqa:gosec // noqa:gosec
cmd2 := exec.Command( cmd2 := exec.Command(
@ -486,7 +512,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
"generate", "generate",
"resources", "resources",
"--input", "--input",
specFile, specJsonFile,
"--output", "--output",
tgtFolder, tgtFolder,
"--package", "--package",
@ -512,14 +538,14 @@ func generateServiceFiles(rootDir, generatorDir string) error {
} }
} }
// slog.Info("Creating terraform service datasource files folder") // slog.Info("Creating terraform svc datasource files folder")
tgtFolder = path.Join(rootDir, "generated", "internal", "services", scName, resource, "datasources_gen") tgtFolder = path.Join(rootDir, "generated", "internal", "services", scName, resource, "datasources_gen")
err = os.MkdirAll(tgtFolder, 0755) err = os.MkdirAll(tgtFolder, 0755)
if err != nil { if err != nil {
return err return err
} }
// slog.Info("Generating terraform service resource files") // slog.Info("Generating terraform svc resource files")
// noqa:gosec // noqa:gosec
cmd3 := exec.Command( cmd3 := exec.Command(
@ -527,7 +553,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
"generate", "generate",
"data-sources", "data-sources",
"--input", "--input",
specFile, specJsonFile,
"--output", "--output",
tgtFolder, tgtFolder,
"--package", "--package",
@ -554,6 +580,8 @@ func generateServiceFiles(rootDir, generatorDir string) error {
} }
} }
} }
//}
}
} }
} }
} }