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"
)
var supportedVersions = []string{"alpha", "beta"}
type version struct {
verString string
major int
@ -35,6 +37,13 @@ type version struct {
func Build() error {
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()
if err != nil {
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")
err = generateServiceFiles(*root, path.Join(*root, GEN_REPO_NAME))
if err != nil {
@ -400,36 +403,59 @@ func generateServiceFiles(rootDir, generatorDir string) error {
return err
}
specs, err := os.ReadDir(path.Join(rootDir, "service_specs"))
services, err := os.ReadDir(path.Join(rootDir, "service_specs"))
if err != nil {
return err
}
for _, spec := range specs {
if spec.IsDir() {
for _, service := range services {
if !service.IsDir() {
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())
r := regexp.MustCompile(`^([a-z-]+)_(.*)_config.yml$`)
matches := r.FindAllStringSubmatch(spec.Name(), -1)
r := regexp.MustCompile(`^(.*)_config.yml$`)
matches := r.FindAllStringSubmatch(specFile.Name(), -1)
if matches != nil {
fileName := matches[0][0]
service := matches[0][1]
resource := matches[0][2]
resource := matches[0][1]
slog.Info(
"Found service spec",
"name",
spec.Name(),
specFile.Name(),
"service",
service,
service.Name(),
"resource",
resource,
)
for _, part := range []string{"alpha", "beta"} {
oasFile := path.Join(generatorDir, "oas", fmt.Sprintf("%s%s.json", service, part))
//for _, part := range []string{"alpha", "beta"} {
oasFile := path.Join(generatorDir, "oas", fmt.Sprintf("%s%s.json", service.Name(), svcVersion))
if _, err = os.Stat(oasFile); !os.IsNotExist(err) {
slog.Info("found matching oas", "service", service, "version", part)
scName := fmt.Sprintf("%s%s", service, part)
slog.Info("found matching oas", "svc", service.Name(), "version", svcVersion.Name())
scName := fmt.Sprintf("%s%s", service.Name(), svcVersion.Name())
scName = strings.ReplaceAll(scName, "-", "")
err = os.MkdirAll(path.Join(rootDir, "generated", "internal", "services", scName, resource), 0755)
if err != nil {
@ -437,7 +463,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
}
// 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
@ -448,7 +474,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
"--config",
path.Join(rootDir, "service_specs", fileName),
"--output",
specFile,
specJsonFile,
oasFile,
)
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")
err = os.MkdirAll(tgtFolder, 0755)
if err != nil {
return err
}
// slog.Info("Generating terraform service resource files")
// slog.Info("Generating terraform svc resource files")
// noqa:gosec
cmd2 := exec.Command(
@ -486,7 +512,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
"generate",
"resources",
"--input",
specFile,
specJsonFile,
"--output",
tgtFolder,
"--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")
err = os.MkdirAll(tgtFolder, 0755)
if err != nil {
return err
}
// slog.Info("Generating terraform service resource files")
// slog.Info("Generating terraform svc resource files")
// noqa:gosec
cmd3 := exec.Command(
@ -527,7 +553,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
"generate",
"data-sources",
"--input",
specFile,
specJsonFile,
"--output",
tgtFolder,
"--package",
@ -554,6 +580,8 @@ func generateServiceFiles(rootDir, generatorDir string) error {
}
}
}
//}
}
}
}
}