github.com/GoogleCloudPlatform/terraformer@v0.8.18/build/main.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "fmt" 6 "io/ioutil" 7 "log" 8 "os" 9 "os/exec" 10 "strings" 11 ) 12 13 const filePrefix = "provider_cmd_" 14 const fileSuffix = ".go" 15 const packageCmdPath = "cmd" 16 17 func main() { 18 provider := os.Args[1] 19 log.Println("Build terraformer with " + provider + " provider...") 20 files, err := ioutil.ReadDir(packageCmdPath) 21 if err != nil { 22 log.Println(err) 23 } 24 deletedProvider := []string{} 25 for _, f := range files { 26 if strings.HasPrefix(f.Name(), filePrefix) { 27 if !strings.HasPrefix(f.Name(), filePrefix+provider+fileSuffix) { 28 providerName := strings.ReplaceAll(f.Name(), filePrefix, "") 29 providerName = strings.ReplaceAll(providerName, fileSuffix, "") 30 deletedProvider = append(deletedProvider, providerName) 31 } 32 } 33 } 34 // move files for deleted providers 35 err = os.MkdirAll(packageCmdPath+"/tmp", os.ModePerm) 36 if err != nil { 37 log.Println(err) 38 } 39 for _, provider := range deletedProvider { 40 err := os.Rename(packageCmdPath+"/"+filePrefix+provider+fileSuffix, packageCmdPath+"/tmp/"+filePrefix+provider+fileSuffix) 41 if err != nil { 42 log.Println(err) 43 } 44 } 45 46 // comment deleted providers in code 47 rootCode, err := ioutil.ReadFile(packageCmdPath + "/root.go") 48 if err != nil { 49 log.Println(err) 50 } 51 lines := strings.Split(string(rootCode), "\n") 52 newRootCodeLines := make([]string, len(lines)) 53 for i, line := range lines { 54 for _, provider := range deletedProvider { 55 if strings.Contains(strings.ToLower(line), "newcmd"+provider+"importer") { 56 line = "// " + line 57 } 58 if strings.Contains(strings.ToLower(line), "new"+provider+"provider") { 59 line = "// " + line 60 } 61 } 62 newRootCodeLines[i] = line 63 } 64 newRootCode := strings.Join(newRootCodeLines, "\n") 65 err = ioutil.WriteFile(packageCmdPath+"/root.go", []byte(newRootCode), os.ModePerm) 66 if err != nil { 67 log.Println(err) 68 } 69 // build.... 70 cmd := exec.Command("go", "build", "-o", "terraformer-"+provider) 71 var outb, errb bytes.Buffer 72 cmd.Stdout = &outb 73 cmd.Stderr = &errb 74 err = cmd.Run() 75 if err != nil { 76 log.Fatal("err:", errb.String()) 77 } 78 fmt.Println(outb.String()) 79 80 // revert code and files 81 err = ioutil.WriteFile(packageCmdPath+"/root.go", rootCode, os.ModePerm) 82 if err != nil { 83 log.Println(err) 84 } 85 for _, provider := range deletedProvider { 86 err := os.Rename(packageCmdPath+"/tmp/"+filePrefix+provider+fileSuffix, "cmd/"+filePrefix+provider+fileSuffix) 87 if err != nil { 88 log.Println(err) 89 } 90 } 91 }