Skip to content
This repository was archived by the owner on Mar 16, 2026. It is now read-only.

Commit b8d6fff

Browse files
committed
add multi build
1 parent 6c75e55 commit b8d6fff

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

build/multi-build/main.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
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

Comments
 (0)