-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
72 lines (59 loc) · 1.93 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package main
import (
"context"
"encoding/json"
"log"
"os"
"path/filepath"
"github.com/swaggest/openapi-go/openapi3"
"github.com/userclouds/terraform-provider-userclouds/genprovider/internal/config"
"github.com/userclouds/terraform-provider-userclouds/genprovider/internal/provider"
"github.com/userclouds/terraform-provider-userclouds/genprovider/internal/resources"
"github.com/userclouds/terraform-provider-userclouds/genprovider/internal/schemas"
)
func handleSpec(ctx context.Context, specConfig *config.Spec, openapiDir string) {
specPath := filepath.Join(openapiDir, specConfig.File)
specText, err := os.ReadFile(specPath)
if err != nil {
log.Fatalf("failed to read openapi file from %s: %v", specPath, err)
}
var spec openapi3.Spec
if err := spec.UnmarshalYAML(specText); err != nil {
log.Fatalf("failed to unmarshal openapi file: %v", err)
}
wd, err := os.Getwd()
if err != nil {
log.Fatalf("failed to get wd: %v", err)
}
err = os.MkdirAll(wd+"/"+specConfig.GeneratedFilePackage, 0755)
if err != nil {
log.Fatalf("failed to create generated file package directory: %v", err)
}
schemas.GenSchemas(ctx, wd, specConfig, &spec)
for _, resource := range specConfig.Resources {
resources.GenResource(ctx, wd, specConfig.GeneratedFilePackage, &spec, &resource)
}
}
func main() {
ctx := context.Background()
if len(os.Args) < 3 {
log.Fatalf("Usage: genprovider [openapi source directory] [generation config file path]")
}
configText, err := os.ReadFile(os.Args[2])
if err != nil {
log.Fatalf("failed to read generation config file: %v", err)
}
var conf config.GenerationConfig
err = json.Unmarshal(configText, &conf)
if err != nil {
log.Fatalf("failed to unmarshal generation config file: %v", err)
}
for _, spec := range conf.Specs {
handleSpec(ctx, &spec, os.Args[1])
}
wd, err := os.Getwd()
if err != nil {
log.Fatalf("failed to get wd: %v", err)
}
provider.GenProvider(ctx, "provider", wd, &conf)
}