-
Notifications
You must be signed in to change notification settings - Fork 785
/
cli.go
94 lines (86 loc) · 2.02 KB
/
cli.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package openshift
import (
"fmt"
"os"
"path/filepath"
"runtime"
"github.com/jenkins-x/jx/v2/pkg/packages"
"github.com/jenkins-x/jx/v2/pkg/util"
"github.com/pborman/uuid"
)
// InstallOc installs oc cli
func InstallOc() error {
// need to fix the version we download as not able to work out the oc sha in the URL yet
sha := "191fece"
latestVersion := "3.9.0"
binDir, err := util.JXBinLocation()
if err != nil {
return err
}
binary := "oc"
flag, err := packages.ShouldInstallBinary(binary)
if err != nil || !flag {
return err
}
var arch string
clientURL := fmt.Sprintf("https://github.com/openshift/origin/releases/download/v%s/openshift-origin-client-tools-v%s-%s", latestVersion, latestVersion, sha)
extension := ".zip"
switch runtime.GOOS {
case "windows":
clientURL += "-windows.zip"
case "darwin":
clientURL += "-mac.zip"
default:
switch runtime.GOARCH {
case "amd64":
arch = "64bit"
case "386":
arch = "32bit"
}
extension = ".tar.gz"
clientURL += fmt.Sprintf("-%s-%s.tar.gz", runtime.GOOS, arch)
}
fullPath := filepath.Join(binDir, binary)
tarFile := filepath.Join(binDir, "oc.tgz")
if extension == ".zip" {
tarFile = filepath.Join(binDir, "oc.zip")
}
err = packages.DownloadFile(clientURL, tarFile)
if err != nil {
return err
}
if extension == ".zip" {
zipDir := filepath.Join(binDir, "oc-tmp-"+uuid.NewUUID().String())
err = os.MkdirAll(zipDir, util.DefaultWritePermissions)
if err != nil {
return err
}
err = util.Unzip(tarFile, zipDir)
if err != nil {
return err
}
f := filepath.Join(zipDir, binary)
exists, err := util.FileExists(f)
if err != nil {
return err
}
if !exists {
return fmt.Errorf("Could not find file %s inside the downloaded oc.zip!", f)
}
err = os.Rename(f, fullPath)
if err != nil {
return err
}
err = os.RemoveAll(zipDir)
} else {
err = util.UnTargz(tarFile, binDir, []string{binary, binary})
}
if err != nil {
return err
}
err = os.Remove(tarFile)
if err != nil {
return err
}
return os.Chmod(fullPath, 0755)
}