未验证 提交 68cd99df 编写于 作者: JenkinsInChina's avatar JenkinsInChina 提交者: GitHub

Improve the version upgrade of jcli (#435)

上级 6c65096b
...@@ -13,6 +13,7 @@ import ( ...@@ -13,6 +13,7 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/pflag" "github.com/spf13/pflag"
"io" "io"
"io/ioutil"
"os" "os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
...@@ -50,6 +51,17 @@ func (o *SelfUpgradeOption) RunE(cmd *cobra.Command, args []string) (err error) ...@@ -50,6 +51,17 @@ func (o *SelfUpgradeOption) RunE(cmd *cobra.Command, args []string) (err error)
version = args[0] version = args[0]
} }
// copy binary file into system path
var targetPath string
if targetPath, err = exec.LookPath("jcli"); err != nil {
err = fmt.Errorf("cannot find Jenkins CLI from system path, error: %v", err)
return
}
var targetF *os.File
if targetF, err = os.OpenFile(targetPath, os.O_CREATE|os.O_RDWR, 0644); err != nil {
return
}
// try to understand the version from user input // try to understand the version from user input
switch version { switch version {
case "dev": case "dev":
...@@ -84,6 +96,11 @@ func (o *SelfUpgradeOption) RunE(cmd *cobra.Command, args []string) (err error) ...@@ -84,6 +96,11 @@ func (o *SelfUpgradeOption) RunE(cmd *cobra.Command, args []string) (err error)
_ = os.RemoveAll(output) _ = os.RemoveAll(output)
}() }()
// make sure we count the download action
go func() {
o.downloadCount(version, runtime.GOOS)
}()
downloader := util.HTTPDownloader{ downloader := util.HTTPDownloader{
RoundTripper: o.RoundTripper, RoundTripper: o.RoundTripper,
TargetFilePath: output, TargetFilePath: output,
...@@ -95,16 +112,8 @@ func (o *SelfUpgradeOption) RunE(cmd *cobra.Command, args []string) (err error) ...@@ -95,16 +112,8 @@ func (o *SelfUpgradeOption) RunE(cmd *cobra.Command, args []string) (err error)
return return
} }
// copy binary file into system path
var targetPath string
if targetPath, err = exec.LookPath("jcli"); err != nil {
err = fmt.Errorf("cannot find Jenkins CLI from system path, error: %v", err)
return
}
if err = o.extractFiles(output); err == nil { if err = o.extractFiles(output); err == nil {
sourceFile := fmt.Sprintf("%s/jcli", filepath.Dir(output)) sourceFile := fmt.Sprintf("%s/jcli", filepath.Dir(output))
targetF, _ := os.OpenFile(targetPath, os.O_CREATE|os.O_RDWR, 0644)
sourceF, _ := os.Open(sourceFile) sourceF, _ := os.Open(sourceFile)
if _, err = io.Copy(targetF, sourceF); err != nil { if _, err = io.Copy(targetF, sourceF); err != nil {
err = fmt.Errorf("cannot copy Jenkins CLI from %s to %s, error: %v", sourceFile, targetPath, err) err = fmt.Errorf("cannot copy Jenkins CLI from %s to %s, error: %v", sourceFile, targetPath, err)
...@@ -115,6 +124,26 @@ func (o *SelfUpgradeOption) RunE(cmd *cobra.Command, args []string) (err error) ...@@ -115,6 +124,26 @@ func (o *SelfUpgradeOption) RunE(cmd *cobra.Command, args []string) (err error)
return return
} }
func (o *SelfUpgradeOption) downloadCount(version string, arch string) {
countURL := fmt.Sprintf("https: //github.com/jenkins-zh/jenkins-cli/releases/download/v%s/jcli-%s-amd64.tar.gz",
version, arch)
if tempDir, err := ioutil.TempDir(".", "download-count"); err == nil {
tempFile := tempDir + "/jcli.tar.gz"
defer func() {
_ = os.RemoveAll(tempDir)
}()
downloader := util.HTTPDownloader{
RoundTripper: o.RoundTripper,
TargetFilePath: tempFile,
URL: countURL,
}
// we don't care about the result, just for counting
_ = downloader.DownloadFile()
}
}
func (o *SelfUpgradeOption) extractFiles(tarFile string) (err error) { func (o *SelfUpgradeOption) extractFiles(tarFile string) (err error) {
var f *os.File var f *os.File
var gzf *gzip.Reader var gzf *gzip.Reader
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册