-
Notifications
You must be signed in to change notification settings - Fork 0
/
plugininstall.go
65 lines (56 loc) · 1.96 KB
/
plugininstall.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
package step
import (
"errors"
"fmt"
"os"
"os/exec"
"strings"
)
// PluginInstall creates a step that installs the provided plugin.
func PluginInstall(pkg, version, target string) Step {
return func() error {
wd, err := os.Getwd()
if err != nil {
return err
}
cmd := createCommand("go", "install", fmt.Sprintf("%v@%v", pkg, version))
cmd.Env = os.Environ()
cmd.Env = append(cmd.Env, fmt.Sprintf("GOBIN=%v", wd))
err = cmd.Run()
if err != nil {
return fmt.Errorf("failed to get plugin dependency %v: %v", pkg, err)
}
sourceParts := strings.Split(pkg, "/")
source := sourceParts[len(sourceParts)-1]
err = os.Rename(source, target)
if err != nil {
return fmt.Errorf("failed to move plugin dependency %v from %v to %v: %v", pkg, source, target, err)
}
// Install plugin for linux os (used by AWS lambda)
cmdLinux := createCommand("go", "install", fmt.Sprintf("%v@%v", pkg, version))
linuxGoEnvs := []string{fmt.Sprintf("GOPATH=%v/plugins", wd), "GOOS=linux", "GOARCH=arm64", "CGO_ENABLED=0"}
cmdLinux.Env = os.Environ()
cmdLinux.Env = append(cmdLinux.Env, linuxGoEnvs...)
err = cmdLinux.Run()
if err != nil {
return fmt.Errorf("failed to get plugin dependency for linux %v: %v", pkg, err)
}
pluginLinuxBinPath := wd + "/plugins/bin/linux_arm64/" + source
if _, err := os.Stat(pluginLinuxBinPath); errors.Is(err, os.ErrNotExist) {
pluginLinuxBinPath = wd + "/plugins/bin/" + source
}
err = os.Rename(pluginLinuxBinPath, target+"-linux-arm64")
if err != nil {
return fmt.Errorf("failed to move plugin dependency %v from %v to %v: %v", pkg, pluginLinuxBinPath, target+"-linux-arm64", err)
}
_, err = exec.Command("chmod", "-R", "0755", wd+"/plugins").CombinedOutput() //nolint:gosec
if err != nil {
return fmt.Errorf("chmod failed on plugins folder: %v", err)
}
err = os.RemoveAll(wd + "/plugins/")
if err != nil {
return fmt.Errorf("failed to cleanup after plugins install: %v", err)
}
return nil
}
}