Skip to content

Commit

Permalink
stupid goreleaser
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Levinson committed Nov 19, 2017
1 parent 0038960 commit 2bc65d2
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 112 deletions.
103 changes: 103 additions & 0 deletions cmd/gscript/main.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
package main

import (
"archive/zip"
"bufio"
"bytes"
"context"
"fmt"
"io"
"io/ioutil"
"net/http"
"os"
"os/exec"
"path/filepath"
"runtime"
"sort"
"strings"
"time"

"github.com/gen0cide/gscript"
"github.com/google/go-github/github"
update "github.com/inconshreveable/go-update"
"github.com/urfave/cli"
)

Expand Down Expand Up @@ -183,3 +192,97 @@ func main() {

app.Run(os.Args)
}

func UpdateCLI(c *cli.Context) error {
gse := gscript.New("UPDATER")
gse.EnableLogging()
gse.Logger.DisabledInfo = true

ctx := context.Background()

client := github.NewClient(nil)

repRel, _, err := client.Repositories.GetLatestRelease(ctx, "gen0cide", "gscript")
if err != nil {
gse.LogCritf("Github Error: " + err.Error())
}

tagName := strings.TrimLeft(repRel.GetTagName(), "v")

if c.App.Version == tagName {
gse.LogInfof("Running Lastest Version (no update available): %s", c.App.Version)
return nil
}

gse.LogInfof("New Version Found: %s", tagName)

fileName := fmt.Sprintf("gscript_%s_%s_amd64.zip", tagName, runtime.GOOS)

assetID := 0
fileSize := 0

for _, asset := range repRel.Assets {
if asset.GetName() == fileName {
assetID = asset.GetID()
fileSize = asset.GetSize()
gse.LogInfof("Downloading New Binary: %s", asset.GetBrowserDownloadURL())
}
}

if assetID == 0 {
gse.LogCritf("No release found for your OS! WTF? Report this.")
}

_, redirectURL, err := client.Repositories.DownloadReleaseAsset(ctx, "gen0cide", "gscript", assetID)
if err != nil {
gse.LogCritf("Github Error: %s", err.Error())
}

if len(redirectURL) == 0 {
gse.LogCritf("There was an error retriving the release from Github.")
}

resp, err := http.Get(redirectURL)
if err != nil {
gse.LogCritf("Error Retrieving Binary: %s", err.Error())
}
defer resp.Body.Close()
compressedFile, err := ioutil.ReadAll(resp.Body)

gse.LogInfof("Uncompressing Binary...")

var binary bytes.Buffer
writer := bufio.NewWriter(&binary)
compressedReader := bytes.NewReader(compressedFile)

r, err := zip.NewReader(compressedReader, int64(fileSize))
if err != nil {
gse.LogCritf("Error Buffering Zip File: %s", err.Error())
}

for _, zf := range r.File {
if zf.Name != "gscript" && zf.Name != "gscript.exe" {
continue
}
src, err := zf.Open()
if err != nil {
gse.LogCritf("Error Unzipping File: %s", err.Error())
}
defer src.Close()

io.Copy(writer, src)
}

reader := bufio.NewReader(&binary)

err = update.Apply(reader, update.Options{})
if err != nil {
if rerr := update.RollbackError(err); rerr != nil {
gse.LogCritf("Failed to rollback from bad update: %v", rerr)
}
gse.LogCritf("Update Failed - original version rolled back successfully.")
}

gse.LogInfof("Successfully updated to gscript v%s", tagName)
return nil
}
112 changes: 0 additions & 112 deletions cmd/gscript/update.go
Original file line number Diff line number Diff line change
@@ -1,113 +1 @@
package main

import (
"archive/zip"
"bufio"
"bytes"
"context"
"fmt"
"io"
"io/ioutil"
"net/http"
"runtime"
"strings"

"github.com/gen0cide/gscript"
"github.com/google/go-github/github"
update "github.com/inconshreveable/go-update"
"github.com/urfave/cli"
)

func UpdateCLI(c *cli.Context) error {
gse := gscript.New("UPDATER")
gse.EnableLogging()
gse.Logger.DisabledInfo = true

ctx := context.Background()

client := github.NewClient(nil)

repRel, _, err := client.Repositories.GetLatestRelease(ctx, "gen0cide", "gscript")
if err != nil {
gse.LogCritf("Github Error: " + err.Error())
}

tagName := strings.TrimLeft(repRel.GetTagName(), "v")

if c.App.Version == tagName {
gse.LogInfof("Running Lastest Version (no update available): %s", c.App.Version)
return nil
}

gse.LogInfof("New Version Found: %s", tagName)

fileName := fmt.Sprintf("gscript_%s_%s_amd64.zip", tagName, runtime.GOOS)

assetID := 0
fileSize := 0

for _, asset := range repRel.Assets {
if asset.GetName() == fileName {
assetID = asset.GetID()
fileSize = asset.GetSize()
gse.LogInfof("Downloading New Binary: %s", asset.GetBrowserDownloadURL())
}
}

if assetID == 0 {
gse.LogCritf("No release found for your OS! WTF? Report this.")
}

_, redirectURL, err := client.Repositories.DownloadReleaseAsset(ctx, "gen0cide", "gscript", assetID)
if err != nil {
gse.LogCritf("Github Error: %s", err.Error())
}

if len(redirectURL) == 0 {
gse.LogCritf("There was an error retriving the release from Github.")
}

resp, err := http.Get(redirectURL)
if err != nil {
gse.LogCritf("Error Retrieving Binary: %s", err.Error())
}
defer resp.Body.Close()
compressedFile, err := ioutil.ReadAll(resp.Body)

gse.LogInfof("Uncompressing Binary...")

var binary bytes.Buffer
writer := bufio.NewWriter(&binary)
compressedReader := bytes.NewReader(compressedFile)

r, err := zip.NewReader(compressedReader, int64(fileSize))
if err != nil {
gse.LogCritf("Error Buffering Zip File: %s", err.Error())
}

for _, zf := range r.File {
if zf.Name != "gscript" && zf.Name != "gscript.exe" {
continue
}
src, err := zf.Open()
if err != nil {
gse.LogCritf("Error Unzipping File: %s", err.Error())
}
defer src.Close()

io.Copy(writer, src)
}

reader := bufio.NewReader(&binary)

err = update.Apply(reader, update.Options{})
if err != nil {
if rerr := update.RollbackError(err); rerr != nil {
gse.LogCritf("Failed to rollback from bad update: %v", rerr)
}
gse.LogCritf("Update Failed - original version rolled back successfully.")
}

gse.LogInfof("Successfully updated to gscript v%s", tagName)
return nil
}

0 comments on commit 2bc65d2

Please sign in to comment.