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+ allProviders := []string {}
20+ files , err := ioutil .ReadDir (packageCmdPath )
21+ if err != nil {
22+ log .Println (err )
23+ }
24+ for _ , f := range files {
25+ if strings .HasPrefix (f .Name (), filePrefix ) {
26+ providerName := strings .Replace (f .Name (), filePrefix , "" , - 1 )
27+ providerName = strings .Replace (providerName , fileSuffix , "" , - 1 )
28+ allProviders = append (allProviders , providerName )
29+ }
30+ }
31+ for _ , OS := range []string {"linux" , "windows" , "mac" } {
32+ for _ , provider := range allProviders {
33+ GOOS := ""
34+ binaryName := ""
35+ switch OS {
36+ case "linux" :
37+ GOOS = "linux"
38+ binaryName = "terraformer-" + provider + "-linux-amd64"
39+ case "windows" :
40+ GOOS = "windows"
41+ binaryName = "terraformer-" + provider + "-windows-amd64.exe"
42+ case "mac" :
43+ GOOS = "darwin"
44+ binaryName = "terraformer-" + provider + "-darwin-amd64"
45+ }
46+ log .Println ("Build terraformer with " + provider + " provider..." , "GOOS=" , GOOS )
47+ deletedProvider := []string {}
48+ for _ , f := range files {
49+ if strings .HasPrefix (f .Name (), filePrefix ) {
50+ if ! strings .HasPrefix (f .Name (), filePrefix + provider + fileSuffix ) {
51+ providerName := strings .Replace (f .Name (), filePrefix , "" , - 1 )
52+ providerName = strings .Replace (providerName , fileSuffix , "" , - 1 )
53+ deletedProvider = append (deletedProvider , providerName )
54+ }
55+ }
56+ }
57+ // move files for deleted providers
58+ os .MkdirAll (packageCmdPath + "/tmp" , os .ModePerm )
59+ for _ , provider := range deletedProvider {
60+ err := os .Rename (packageCmdPath + "/" + filePrefix + provider + fileSuffix , packageCmdPath + "/tmp/" + filePrefix + provider + fileSuffix )
61+ if err != nil {
62+ log .Println (err )
63+ }
64+ }
65+
66+ // comment deleted providers in code
67+ rootCode , err := ioutil .ReadFile (packageCmdPath + "/root.go" )
68+ lines := strings .Split (string (rootCode ), "\n " )
69+ newRootCodeLines := make ([]string , len (lines ))
70+ for i , line := range lines {
71+ for _ , provider := range deletedProvider {
72+ if strings .Contains (strings .ToLower (line ), "newcmd" + provider + "importer" ) {
73+ line = "// " + line
74+ }
75+ if strings .Contains (strings .ToLower (line ), "new" + provider + "provider" ) {
76+ line = "// " + line
77+ }
78+ }
79+ newRootCodeLines [i ] = line
80+ }
81+ newRootCode := strings .Join (newRootCodeLines , "\n " )
82+ ioutil .WriteFile (packageCmdPath + "/root.go" , []byte (newRootCode ), os .ModePerm )
83+
84+ // build....
85+ cmd := exec .Command ("go" , "build" , "-v" , "-o" , binaryName )
86+ cmd .Env = os .Environ ()
87+ cmd .Env = append (cmd .Env , "GOOS=" + GOOS )
88+ var outb , errb bytes.Buffer
89+ cmd .Stdout = & outb
90+ cmd .Stderr = & errb
91+ err = cmd .Run ()
92+ if err != nil {
93+ log .Fatal ("err:" , errb .String ())
94+ }
95+ fmt .Println (outb .String ())
96+
97+ //revert code and files
98+ ioutil .WriteFile (packageCmdPath + "/root.go" , []byte (rootCode ), os .ModePerm )
99+ for _ , provider := range deletedProvider {
100+ err := os .Rename (packageCmdPath + "/tmp/" + filePrefix + provider + fileSuffix , "cmd/" + filePrefix + provider + fileSuffix )
101+ if err != nil {
102+ log .Println (err )
103+ }
104+ }
105+ }
106+ }
107+ }
0 commit comments