From e7eab22ef6fb9f51c62cd511de99252b87f0bd19 Mon Sep 17 00:00:00 2001 From: Kirill Zaitsev Date: Sun, 13 Mar 2016 22:37:05 +0300 Subject: [PATCH] Upgrade --- grvm.go | 9 +++++++- install.sh | 59 ++++++++++++++++++++++++++++-------------------- scripts/grvm | 10 ++++----- upgrade.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 110 insertions(+), 31 deletions(-) create mode 100644 upgrade.go diff --git a/grvm.go b/grvm.go index 098e201..cd5145d 100644 --- a/grvm.go +++ b/grvm.go @@ -8,7 +8,8 @@ import ( ) const ( - rubyBuildRepo = "https://github.com/rbenv/ruby-build.git" + rubyBuildRepo = "https://github.com/rbenv/ruby-build.git" + latestReleaseUrl = "https://api.github.com/repos/Bugagazavr/grvm/releases/latest" ) // System @@ -86,6 +87,12 @@ func main() { Usage: "Instqalls ruby", Action: GetInstall, }, + { + Name: "upgrade", + Aliases: []string{"ug"}, + Usage: "Get upgrade information", + Action: GetUpgrade, + }, } app.Run(os.Args) diff --git a/install.sh b/install.sh index c0f420f..3b7d138 100644 --- a/install.sh +++ b/install.sh @@ -44,6 +44,33 @@ function tmpCleanup { [ -f "/tmp/grvm.tar.gz" ] && rm -rf /tmp/grvm.tar.gz } +function grvmInstall { + echo "Extracting" + mkdir -p /tmp/grvm + tar -xf /tmp/grvm.tar.gz --directory=/tmp/grvm + + if [ ! -d "$HOME/.grvm" ]; then + echo "Creating $HOME/.grvm directory" + mkdir -p $HOME/.grvm/{bin,scripts} + else + echo "Cleanup existing $HOME/.grvm directory" + [ -d "$HOME/.grvm/bin" ] && rm -f $HOME/.grvm/bin/* + [ -d "$HOMR/.grvm/scripts" ] && rm -f $HOME/.grvm/scripts/* + mkdir -p $HOME/.grvm/{bin,scripts} + fi + + echo "Install GRVM" + cp /tmp/grvm/bin/grvm $HOME/.grvm/bin/grvm + cp /tmp/grvm/scripts/grvm $HOME/.grvm/scripts/grvm + + echo "Delete installtion files" + tmpCleanup + + source $HOME/.grvm/scripts/grvm + __grvmFn doctor > /dev/null + echo "GRVM has been installed" +} + case $1 in "devinstall") go build --ldflags '-X main.version=dev' -o grvm *.go @@ -55,6 +82,13 @@ case $1 in cp grvm $HOME/.grvm/bin/grvm $HOME/.grvm/bin/grvm doctor ;; + "upgrade") + echo "Downloading upgrade $grvm_upgrade_url" + curl -L -s $grvm_upgrade_url > /tmp/grvm.tar.gz + echo "Downloading finished" + + grvmInstall + ;; *) echo "Prepare to install GRVM" tmpCleanup @@ -64,29 +98,6 @@ case $1 in curl -L -s $downloadUrl > /tmp/grvm.tar.gz echo "Downloading finished" - echo "Extracting" - mkdir -p /tmp/grvm - tar -xf /tmp/grvm.tar.gz --directory=/tmp/grvm - - if [ ! -d "$HOME/.grvm" ]; then - echo "Creating $HOME/.grvm directory" - mkdir -p $HOME/.grvm/{bin,scripts} - else - echo "Cleanup existing $HOME/.grvm directory" - [ -d "$HOME/.grvm/bin" ] && rm -f $HOME/.grvm/bin/* - [ -d "$HOMR/.grvm/scripts" ] && rm -f $HOME/.grvm/scripts/* - mkdir -p $HOME/.grvm/{bin,scripts} - fi - - echo "Install GRVM" - cp /tmp/grvm/bin/grvm $HOME/.grvm/bin/grvm - cp /tmp/grvm/scripts/grvm $HOME/.grvm/scripts/grvm - - echo "Delete installtion files" - tmpCleanup - - source $HOME/.grvm/scripts/grvm - __grvmFn doctor > /dev/null - echo "GRVM has been installed" + grvmInstall ;; esac diff --git a/scripts/grvm b/scripts/grvm index 2cba0f9..4f8050e 100755 --- a/scripts/grvm +++ b/scripts/grvm @@ -5,13 +5,11 @@ function __grvmEval { } function __grvmUpgrade { - availableVersion=$(curl -s https://api.github.com/repos/Bugagazavr/grvm/releases/latest | grep 'tag_name' | cut -d\" -f4 | tail -c +2) - currentVersion=$(__grvmFn --version | awk '{print $3}') + arg=`$HOME/.grvm/bin/grvm -s upgrade` + __grvmEval $arg - if [[ "$availableVersion" == "$currentVersion" ]]; then - echo "You have latest GRVM $currentVersion" - else - curl -s https://raw.githubusercontent.com/Bugagazavr/grvm/master/install.sh | bash -- + if [ ! -z "$grvm_upgrade_version" ] && [ ! -z "$grvm_upgrade_url" ]; then + curl -s https://raw.githubusercontent.com/Bugagazavr/grvm/master/install.sh | bash -s upgrade fi } diff --git a/upgrade.go b/upgrade.go new file mode 100644 index 0000000..590e265 --- /dev/null +++ b/upgrade.go @@ -0,0 +1,63 @@ +package main + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "os" + "runtime" + "strings" + + "github.com/codegangsta/cli" +) + +type Asset struct { + Name string `json:"name"` + DownloadUrl string `json:"browser_download_url"` +} + +type Release struct { + TagName string `json:"tag_name"` + Assets []Asset `json:"assets"` +} + +func GetUpgrade(c *cli.Context) { + resp, err := http.Get(latestReleaseUrl) + if err != nil { + Print(c, err.Error()) + os.Exit(1) + } + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + Print(c, err.Error()) + os.Exit(1) + } + + var release Release + if err := json.Unmarshal(body, &release); err != nil { + Print(c, err.Error()) + os.Exit(1) + } + + var releaseVersion = strings.TrimPrefix(release.TagName, "v") + + if releaseVersion == version { + Print(c, "You have already latest version:", releaseVersion) + os.Exit(0) + } + + for _, asset := range release.Assets { + if strings.Contains(asset.Name, runtime.GOARCH) && strings.Contains(asset.Name, runtime.GOOS) { + if c.GlobalBool("shell") { + fmt.Println(Export("grvm_upgrade_url", asset.DownloadUrl)) + fmt.Println(Export("grvm_upgrade_version", releaseVersion)) + break + } else { + fmt.Println("New version available:", asset.DownloadUrl) + } + } + } +}