github.com/tilotech/tilores-cli@v0.28.0/internal/pkg/step/plugininstall.go (about)

     1  package step
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"os"
     7  	"os/exec"
     8  	"strings"
     9  )
    10  
    11  // PluginInstall creates a step that installs the provided plugin.
    12  func PluginInstall(pkg, version, target string) Step {
    13  	return func() error {
    14  		wd, err := os.Getwd()
    15  		if err != nil {
    16  			return err
    17  		}
    18  		cmd := createCommand("go", "install", fmt.Sprintf("%v@%v", pkg, version))
    19  		cmd.Env = os.Environ()
    20  		cmd.Env = append(cmd.Env, fmt.Sprintf("GOBIN=%v", wd))
    21  
    22  		err = cmd.Run()
    23  		if err != nil {
    24  			return fmt.Errorf("failed to get plugin dependency %v: %v", pkg, err)
    25  		}
    26  
    27  		sourceParts := strings.Split(pkg, "/")
    28  		source := sourceParts[len(sourceParts)-1]
    29  		err = os.Rename(source, target)
    30  		if err != nil {
    31  			return fmt.Errorf("failed to move plugin dependency %v from %v to %v: %v", pkg, source, target, err)
    32  		}
    33  
    34  		// Install plugin for linux os (used by AWS lambda)
    35  		cmdLinux := createCommand("go", "install", fmt.Sprintf("%v@%v", pkg, version))
    36  		linuxGoEnvs := []string{fmt.Sprintf("GOPATH=%v/plugins", wd), "GOOS=linux", "GOARCH=arm64", "CGO_ENABLED=0"}
    37  		cmdLinux.Env = os.Environ()
    38  		cmdLinux.Env = append(cmdLinux.Env, linuxGoEnvs...)
    39  
    40  		err = cmdLinux.Run()
    41  		if err != nil {
    42  			return fmt.Errorf("failed to get plugin dependency for linux %v: %v", pkg, err)
    43  		}
    44  
    45  		pluginLinuxBinPath := wd + "/plugins/bin/linux_arm64/" + source
    46  		if _, err := os.Stat(pluginLinuxBinPath); errors.Is(err, os.ErrNotExist) {
    47  			pluginLinuxBinPath = wd + "/plugins/bin/" + source
    48  		}
    49  		err = os.Rename(pluginLinuxBinPath, target+"-linux-arm64")
    50  		if err != nil {
    51  			return fmt.Errorf("failed to move plugin dependency %v from %v to %v: %v", pkg, pluginLinuxBinPath, target+"-linux-arm64", err)
    52  		}
    53  
    54  		_, err = exec.Command("chmod", "-R", "0755", wd+"/plugins").CombinedOutput() //nolint:gosec
    55  		if err != nil {
    56  			return fmt.Errorf("chmod failed on plugins folder: %v", err)
    57  		}
    58  		err = os.RemoveAll(wd + "/plugins/")
    59  		if err != nil {
    60  			return fmt.Errorf("failed to cleanup after plugins install: %v", err)
    61  		}
    62  
    63  		return nil
    64  	}
    65  }