diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 743f6a5..eb82aba 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -82,14 +82,6 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos files: coverage.out - # - name: Codeclimate - # uses: paambaati/codeclimate-action@v2.7.5 - # with: - # coverageCommand: go test -race -coverprofile=cover.out -covermode=atomic -v -bench=. ./... - # coverageLocations: - # "${{github.workspace}}/cover.out:gocov" - # env: - # CC_TEST_REPORTER_ID: ${{ secrets.CODECLIMATE_KEY }} code_scans: needs: [ prepare ] diff --git a/README.md b/README.md index 1927249..2d92d16 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ Flags: -h, --help help for semver-gen -l, --local Use local repository -r, --repository string Remote repository URL. (default "https://github.com/lukaszraczylo/simple-gql-client") + -u, --update Update binary with latest -v, --version Display version ``` diff --git a/cmd/github.go b/cmd/github.go index f0f98e4..e5e0ab6 100644 --- a/cmd/github.go +++ b/cmd/github.go @@ -3,11 +3,75 @@ package cmd import ( "fmt" "os" + "runtime" gql "github.com/lukaszraczylo/simple-gql-client" + "github.com/melbahja/got" "github.com/tidwall/gjson" ) +func updatePackage() bool { + ghToken, ghTokenSet := os.LookupEnv("GITHUB_TOKEN") + if ghTokenSet { + binaryName := fmt.Sprintf("semver-gen-%s-%s", runtime.GOOS, runtime.GOARCH) + fmt.Println("Downloading", binaryName) + gql.GraphQLUrl = "https://api.github.com/graphql" + headers := map[string]interface{}{ + "Authorization": fmt.Sprintf("bearer %s", ghToken), + } + variables := map[string]interface{}{ + "binaryName": binaryName, + } + var query = `query ($binaryName: String) { + repository(name: "semver-generator", owner: "lukaszraczylo") { + latestRelease { + releaseAssets(first: 10, name: $binaryName) { + edges { + node { + name + downloadUrl + } + } + } + } + } + }` + result, err := gql.Query(query, variables, headers) + if err != nil { + fmt.Println("Query error", err) + return false + } + result = gjson.Get(result, "repository.latestRelease.releaseAssets.edges.0.node.downloadUrl").String() + if result == "" { + fmt.Println("Unable to obtain download url for the binary", binaryName) + return false + } + downloadedBinaryPath := fmt.Sprintf("/tmp/%s", binaryName) + g := got.New() + err = g.Download(result, downloadedBinaryPath) + if err != nil { + fmt.Println("Unable to download binary", err.Error()) + return false + } + currentBinary, err := os.Executable() + if err != nil { + fmt.Println("Unable to obtain current binary path", err.Error()) + return false + } + err = os.Rename(downloadedBinaryPath, currentBinary) + if err != nil { + fmt.Println("Unable to overwrite current binary", err.Error()) + return false + } + err = os.Chmod(currentBinary, 0777) + if err != nil { + fmt.Println("Unable to make binary executable", err.Error()) + return false + } + } + return true +} + func checkLatestRelease() (string, bool) { ghToken, ghTokenSet := os.LookupEnv("GITHUB_TOKEN") if ghTokenSet { diff --git a/cmd/main.go b/cmd/main.go index 6702c45..bc00e01 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -242,6 +242,9 @@ func main() { fmt.Println("semver-gen", PKG_VERSION, "", outdatedMsg, "\tMore information: https://github.com/lukaszraczylo/semver-generator") return } + if varUpdate { + updatePackage() + } if repo.Generate { err := repo.ReadConfig(repo.LocalConfigFile) if err != nil { diff --git a/cmd/root.go b/cmd/root.go index 8e7b86f..8ee192e 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -59,6 +59,7 @@ var ( varUseLocal bool varShowVersion bool varDebug bool + varUpdate bool ) func init() { @@ -70,5 +71,6 @@ func init() { rootCmd.PersistentFlags().BoolVarP(&varUseLocal, "local", "l", false, "Use local repository") rootCmd.PersistentFlags().BoolVarP(&varShowVersion, "version", "v", false, "Display version") rootCmd.PersistentFlags().BoolVarP(&varDebug, "debug", "d", false, "Enable debug mode") + rootCmd.PersistentFlags().BoolVarP(&varUpdate, "update", "u", false, "Update binary with latest") } } diff --git a/go.mod b/go.mod index fd5bb1c..6864de3 100644 --- a/go.mod +++ b/go.mod @@ -9,9 +9,10 @@ require ( github.com/go-git/go-git/v5 v5.3.0 github.com/kevinburke/ssh_config v1.1.0 // indirect github.com/lithammer/fuzzysearch v1.1.2 - github.com/lukaszraczylo/simple-gql-client v1.26.5 + github.com/lukaszraczylo/simple-gql-client v1.32.1 github.com/lukaszraczylo/zero v0.0.0-20160322155811-4a4535dd56e7 github.com/magiconair/properties v1.8.5 // indirect + github.com/melbahja/got v0.5.0 github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/pelletier/go-toml v1.9.1 // indirect github.com/sergi/go-diff v1.2.0 // indirect @@ -21,9 +22,9 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/viper v1.7.1 github.com/stretchr/testify v1.7.0 - github.com/tidwall/gjson v1.7.5 - golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf // indirect + github.com/tidwall/gjson v1.8.0 + golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a // indirect golang.org/x/net v0.0.0-20210510120150-4163338589ed // indirect - golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 // indirect + golang.org/x/sys v0.0.0-20210514084401-e8d321eab015 // indirect gopkg.in/ini.v1 v1.62.0 // indirect ) diff --git a/go.sum b/go.sum index e9762a8..a53259d 100644 --- a/go.sum +++ b/go.sum @@ -44,6 +44,7 @@ github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -51,6 +52,7 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -167,6 +169,8 @@ github.com/lukaszraczylo/simple-gql-client v1.26.3 h1:fzhzhq35G2F4fyu9DC/CvxxMEe github.com/lukaszraczylo/simple-gql-client v1.26.3/go.mod h1:EYZRMolx5pW3IaSkcdQTNo1DFmnohj1DK9cMeyQlgyA= github.com/lukaszraczylo/simple-gql-client v1.26.5 h1:D8qo5YcpCZE7OHhkyPwqXzfQZiSsD8M3uRHPt7hnXJM= github.com/lukaszraczylo/simple-gql-client v1.26.5/go.mod h1:EYZRMolx5pW3IaSkcdQTNo1DFmnohj1DK9cMeyQlgyA= +github.com/lukaszraczylo/simple-gql-client v1.32.1 h1:/yVK1T9k0U6/Qi0t9Oxz2P0lFIv/Mvvoo6TsiuBHwPs= +github.com/lukaszraczylo/simple-gql-client v1.32.1/go.mod h1:UpCfgSwqul0yp7gwPbO3uHLHnt1VsKtYzVuI7SS3dF0= github.com/lukaszraczylo/zero v0.0.0-20160322155811-4a4535dd56e7 h1:9l31ZdbJuSK5sQH4hldeHB/ulflee5srCFzT4Oxm65Q= github.com/lukaszraczylo/zero v0.0.0-20160322155811-4a4535dd56e7/go.mod h1:UOwgylrs4V/Vzo1KfbjhzU+iB/5Pu4HnSpgE8WI14gs= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -175,6 +179,8 @@ github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPK github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/melbahja/got v0.5.0 h1:tFp5WasOUeZ/SiW82G4SS8clb5Q/Pw6IFYvOcLgt/ZY= +github.com/melbahja/got v0.5.0/go.mod h1:z/sG672dxMFNDZtZ9CHBbfuYeTzV0Xqilq6BUEw41oY= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -263,11 +269,14 @@ github.com/tidwall/gjson v1.7.3 h1:9dOulDrkCJf1mwljVMhXNQr9ZL2NvajRX7A1R8c6Qxw= github.com/tidwall/gjson v1.7.3/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= github.com/tidwall/gjson v1.7.5 h1:zmAN/xmX7OtpAkv4Ovfso60r/BiCi5IErCDYGNJu+uc= github.com/tidwall/gjson v1.7.5/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= +github.com/tidwall/gjson v1.8.0 h1:Qt+orfosKn0rbNTZqHYDqBrmm3UDA4KRkv70fDzG+PQ= +github.com/tidwall/gjson v1.8.0/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= github.com/tidwall/match v1.0.3 h1:FQUVvBImDutD8wJLN6c5eMzWtjgONK9MwIBCOrUJKeE= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.1.0 h1:K3hMW5epkdAVwibsQEfR/7Zj0Qgt4DxtNumTq/VloO8= github.com/tidwall/pretty v1.1.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.22.0 h1:OpwH5KDOJ9cS2bq8fD+KfT4IrksK0llvkHf4MZx42jQ= @@ -278,6 +287,9 @@ github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +gitlab.com/poldi1405/go-ansi v1.1.0/go.mod h1:TLoRttGdPaq5H2qfF7I1cC5Lt2WXtQeIkFurjbUf6OI= +gitlab.com/poldi1405/go-indicators v0.0.0-20200820134929-9b373aa411a5/go.mod h1:jn34qwBiXTHz73wD9neAMeJGCeMijVro+WCqk1RJXL4= +gitlab.com/poldi1405/go-indicators v1.0.0/go.mod h1:jn34qwBiXTHz73wD9neAMeJGCeMijVro+WCqk1RJXL4= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -291,10 +303,13 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf h1:B2n+Zi5QeYRDAEodEu72OS36gmTWjgpXr2+cWcBW90o= golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a h1:kr2P4QFmQr29mSLA43kwrOcgcReGTfbE9N577tCTuBc= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -371,6 +386,8 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0v golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 h1:yhBbb4IRs2HS9PPlAg6DMC6mUOKexJBNsLf4Z+6En1Q= golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015 h1:hZR0X1kPW+nwyJ9xRxqZk1vx5RUObAPBdKVvXPDUH/E= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=