diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..73f69e0
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/bb.iml b/.idea/bb.iml
new file mode 100644
index 0000000..c956989
--- /dev/null
+++ b/.idea/bb.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..c53d7bd
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cmd/commands/api/api.go b/cmd/commands/api/api.go
index 9ca9882..0c42744 100644
--- a/cmd/commands/api/api.go
+++ b/cmd/commands/api/api.go
@@ -3,6 +3,7 @@ package api
import (
"bytes"
"fmt"
+ "github.com/craftamap/bb/util/logging"
"io/ioutil"
"net/http"
"os"
@@ -46,7 +47,7 @@ func Add(rootCmd *cobra.Command, globalOpts *options.GlobalOptions) {
req, err := http.NewRequest(Method, url, bytes.NewBufferString(reqBody))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
req.SetBasicAuth(globalOpts.Client.Username, globalOpts.Client.Password)
@@ -59,7 +60,7 @@ func Add(rootCmd *cobra.Command, globalOpts *options.GlobalOptions) {
}
response, err := client.Do(req)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
@@ -67,7 +68,7 @@ func Add(rootCmd *cobra.Command, globalOpts *options.GlobalOptions) {
resBody, err := ioutil.ReadAll(response.Body)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
diff --git a/cmd/commands/auth/login/login.go b/cmd/commands/auth/login/login.go
index a9f8c4e..b01c7e9 100644
--- a/cmd/commands/auth/login/login.go
+++ b/cmd/commands/auth/login/login.go
@@ -2,6 +2,7 @@ package login
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"github.com/AlecAivazis/survey/v2"
"github.com/craftamap/bb/cmd/options"
@@ -21,7 +22,7 @@ func Add(authCmd *cobra.Command, globalOpts *options.GlobalOptions) {
cont := false
err := survey.AskOne(&survey.Confirm{Message: "Do you want to overwrite this?"}, &cont)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
@@ -30,9 +31,9 @@ func Add(authCmd *cobra.Command, globalOpts *options.GlobalOptions) {
}
}
- fmt.Println(aurora.Green("::"), "In order to use bb, you need to create an app password for bitbucket.org. Navigate to")
- fmt.Println(aurora.Green("::"), aurora.Index(242, "https://bitbucket.org/account/settings/app-passwords/"))
- fmt.Println(aurora.Green("::"), "And create an app password for your account with the required permissions.")
+ logging.Success("In order to use bb, you need to create an app password for bitbucket.org. Navigate to")
+ logging.Success(aurora.Index(242, "https://bitbucket.org/account/settings/app-passwords/"))
+ logging.Success("And create an app password for your account with the required permissions.")
answers := struct {
Username string
@@ -55,7 +56,7 @@ func Add(authCmd *cobra.Command, globalOpts *options.GlobalOptions) {
}, &answers)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
@@ -64,11 +65,11 @@ func Add(authCmd *cobra.Command, globalOpts *options.GlobalOptions) {
err = viper.WriteConfig()
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
- fmt.Println(aurora.Green("::"), "Stored credentials successfully to", viper.ConfigFileUsed())
+ logging.Success(fmt.Sprint("Stored credentials successfully to", viper.ConfigFileUsed()))
},
}
diff --git a/cmd/commands/downloads/download/download.go b/cmd/commands/downloads/download/download.go
index 95d2fdd..38c4403 100644
--- a/cmd/commands/downloads/download/download.go
+++ b/cmd/commands/downloads/download/download.go
@@ -3,6 +3,7 @@ package download
import (
"crypto/rand"
"fmt"
+ "github.com/craftamap/bb/util/logging"
"io"
"math/big"
"net/http"
@@ -60,7 +61,7 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if dir != "" {
info, err := os.Stat(dir)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if !info.IsDir() {
@@ -87,51 +88,51 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
c := globalOpts.Client
bbrepo := globalOpts.BitbucketRepo
- fmt.Printf("%s%s\n", aurora.Green(":: "), "Getting all downloads")
+ logging.Success("Getting all downloads")
downloads, err := c.GetDownloads(bbrepo.RepoOrga, bbrepo.RepoSlug)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
downloadMap := downloadsToMap(downloads)
dwnld, ok := downloadMap[remoteName]
if !ok {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
downloadLink := dwnld.Links["self"].Href
- fmt.Printf("%s%s\n", aurora.Green(":: "), fmt.Sprintf("Downloading file from %s", downloadLink))
+ logging.Success(fmt.Sprintf("Downloading file from %s", downloadLink))
req, err := http.NewRequest("GET", downloadLink, strings.NewReader(""))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
req.SetBasicAuth(c.Username, c.Password)
resp, err := http.DefaultClient.Do(req)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
defer resp.Body.Close()
- fmt.Printf("%s%s\n", aurora.Green(":: "), "Downloaded!")
- fmt.Printf("%s%s\n", aurora.Green(":: "), fmt.Sprintf("Saving file to %s", storagePath))
+ logging.Success("Downloaded!")
+ logging.Success(fmt.Sprintf("Saving file to %s", storagePath))
out, err := os.Create(storagePath)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
defer out.Close()
_, err = io.Copy(out, resp.Body)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
},
diff --git a/cmd/commands/downloads/list/list.go b/cmd/commands/downloads/list/list.go
index 2544a13..b7b17b0 100644
--- a/cmd/commands/downloads/list/list.go
+++ b/cmd/commands/downloads/list/list.go
@@ -2,6 +2,7 @@ package list
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"github.com/craftamap/bb/cmd/options"
"github.com/dustin/go-humanize"
@@ -28,14 +29,14 @@ func Add(downloadsCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if Web {
err := browser.OpenURL(fmt.Sprintf("https://bitbucket.org/%s/%s/downloads", bbrepo.RepoOrga, bbrepo.RepoSlug))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
return
}
downloads, err := c.GetDownloads(bbrepo.RepoOrga, bbrepo.RepoSlug)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
diff --git a/cmd/commands/downloads/upload/upload.go b/cmd/commands/downloads/upload/upload.go
index 8f0720b..eb88bf7 100644
--- a/cmd/commands/downloads/upload/upload.go
+++ b/cmd/commands/downloads/upload/upload.go
@@ -2,11 +2,11 @@ package upload
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"os"
"path/filepath"
"github.com/craftamap/bb/cmd/options"
- "github.com/logrusorgru/aurora"
"github.com/spf13/cobra"
)
@@ -22,7 +22,7 @@ func Add(downloadsCmd *cobra.Command, globalOpts *options.GlobalOptions) {
bbrepo := globalOpts.BitbucketRepo
if len(args) == 0 {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "No file specified")
+ logging.Warning("No file specified")
return
}
@@ -30,23 +30,23 @@ func Add(downloadsCmd *cobra.Command, globalOpts *options.GlobalOptions) {
fmt.Println(fpath)
if _, err := os.Stat(fpath); os.IsNotExist(err) {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
- fmt.Printf("%s Uploading file %s\n", aurora.Green(":: "), filepath.Base(fpath))
+ logging.Success(fmt.Sprintf("Uploading file %s", filepath.Base(fpath)))
_, err := c.UploadDownload(bbrepo.RepoOrga, bbrepo.RepoSlug, fpath)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
//if err != nil {
- // fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ // logging.Error(err)
// return
//}
- fmt.Printf("%s Uploaded file %s\n", aurora.Green(":: "), filepath.Base(fpath))
+ logging.Success(fmt.Sprintf("Uploaded file %s\n", filepath.Base(fpath)))
},
}
diff --git a/cmd/commands/pipelines/list/list.go b/cmd/commands/pipelines/list/list.go
index 16e2330..5479a47 100644
--- a/cmd/commands/pipelines/list/list.go
+++ b/cmd/commands/pipelines/list/list.go
@@ -2,6 +2,7 @@ package list
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"strings"
"github.com/craftamap/bb/cmd/options"
@@ -31,7 +32,7 @@ func Add(pipelinesCmd *cobra.Command, globalOpts *options.GlobalOptions) {
pipelines, err := c.PipelineList(bbrepo.RepoOrga, bbrepo.RepoSlug)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if len(*pipelines) == 0 {
diff --git a/cmd/commands/pipelines/logs/logs.go b/cmd/commands/pipelines/logs/logs.go
index b1c0a69..67744c9 100644
--- a/cmd/commands/pipelines/logs/logs.go
+++ b/cmd/commands/pipelines/logs/logs.go
@@ -2,6 +2,7 @@ package logs
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"strconv"
"strings"
@@ -29,17 +30,17 @@ func Add(pipelinesCmd *cobra.Command, globalOpts *options.GlobalOptions) {
}
pipelineID, err := strconv.Atoi(strings.Replace(args[0], "#", "", 1))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
steps, err := c.PipelineStepsList(bbrepo.RepoOrga, bbrepo.RepoSlug, strconv.Itoa(pipelineID))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
for _, step := range *steps {
- fmt.Println(aurora.Green("::"), aurora.Bold("step name:"), step.Name)
+ logging.Success(fmt.Sprint(aurora.Bold("step name:"), step.Name))
log, _ := c.PipelinesLogs(bbrepo.RepoOrga, bbrepo.RepoSlug, strconv.Itoa(pipelineID), step.UUID)
fmt.Println(log)
}
diff --git a/cmd/commands/pipelines/view/view.go b/cmd/commands/pipelines/view/view.go
index 102da47..f2b5b59 100644
--- a/cmd/commands/pipelines/view/view.go
+++ b/cmd/commands/pipelines/view/view.go
@@ -2,6 +2,7 @@ package view
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"strconv"
"strings"
@@ -37,19 +38,19 @@ func Add(pipelinesCmd *cobra.Command, globalOpts *options.GlobalOptions) {
}
pipelineID, err := strconv.Atoi(strings.Replace(args[0], "#", "", 1))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
pipeline, err := c.PipelineGet(bbrepo.RepoOrga, bbrepo.RepoSlug, strconv.Itoa(pipelineID))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
steps, err := c.PipelineStepsList(bbrepo.RepoOrga, bbrepo.RepoSlug, strconv.Itoa(pipelineID))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
diff --git a/cmd/commands/pr/approve/approve.go b/cmd/commands/pr/approve/approve.go
index 3f7afb4..6ca468c 100644
--- a/cmd/commands/pr/approve/approve.go
+++ b/cmd/commands/pr/approve/approve.go
@@ -2,12 +2,12 @@ package approve
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"strconv"
"strings"
"github.com/cli/cli/git"
"github.com/craftamap/bb/cmd/options"
- "github.com/logrusorgru/aurora"
"github.com/spf13/cobra"
)
@@ -31,23 +31,23 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if len(args) > 0 {
id, err = strconv.Atoi(strings.TrimPrefix(args[0], "#"))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
} else {
branchName, err := git.CurrentBranch()
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
prs, err := c.GetPrIDBySourceBranch(bbrepo.RepoOrga, bbrepo.RepoSlug, branchName)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if len(prs.Values) == 0 {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "Nothing on this branch")
+ logging.Warning("Nothing on this branch")
return
}
@@ -56,17 +56,17 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if !Unapprove {
participant, err := c.PrApprove(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%d", id))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
- fmt.Println(aurora.Green(":: "), participant.State)
+ logging.Success(participant.State)
} else {
err := c.PrUnApprove(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%d", id))
if err != nil && !strings.Contains(err.Error(), "204") {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
- fmt.Println(aurora.Green(":: "), "unapproved")
+ logging.Success("unapproved")
}
},
}
diff --git a/cmd/commands/pr/checkout/checkout.go b/cmd/commands/pr/checkout/checkout.go
index 9729fb8..bb30c74 100644
--- a/cmd/commands/pr/checkout/checkout.go
+++ b/cmd/commands/pr/checkout/checkout.go
@@ -2,6 +2,7 @@ package checkout
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"os"
"os/exec"
"strconv"
@@ -11,7 +12,6 @@ import (
"github.com/cli/safeexec"
"github.com/craftamap/bb/cmd/options"
"github.com/craftamap/bb/internal/run"
- "github.com/logrusorgru/aurora"
"github.com/spf13/cobra"
)
@@ -34,7 +34,7 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if len(args) > 0 {
id, err = strconv.Atoi(strings.TrimPrefix(args[0], "#"))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
} else {
@@ -42,7 +42,7 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
}
pr, err := c.PrView(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%d", id))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
@@ -65,14 +65,14 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
exe, err := safeexec.LookPath(args[0])
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
cmd := exec.Command(exe, args[1:]...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := run.PrepareCmd(cmd).Run(); err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
}
diff --git a/cmd/commands/pr/comments/comments.go b/cmd/commands/pr/comments/comments.go
index 35cbeae..4e816b4 100644
--- a/cmd/commands/pr/comments/comments.go
+++ b/cmd/commands/pr/comments/comments.go
@@ -2,6 +2,7 @@ package comments
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"regexp"
"sort"
"strconv"
@@ -38,23 +39,23 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if len(args) > 0 {
id, err = strconv.Atoi(strings.TrimPrefix(args[0], "#"))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
} else {
branchName, err := git.CurrentBranch()
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
prs, err := c.GetPrIDBySourceBranch(bbrepo.RepoOrga, bbrepo.RepoSlug, branchName)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if len(prs.Values) == 0 {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "Nothing on this branch")
+ logging.Warning("Nothing on this branch")
return
}
@@ -62,7 +63,7 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
}
comments, err := c.PrThreadedComments(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%d", id))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
diff --git a/cmd/commands/pr/create/create.go b/cmd/commands/pr/create/create.go
index 62ade29..493cee2 100644
--- a/cmd/commands/pr/create/create.go
+++ b/cmd/commands/pr/create/create.go
@@ -3,6 +3,7 @@ package create
import (
"fmt"
"github.com/craftamap/bb/client"
+ "github.com/craftamap/bb/util/logging"
"github.com/ktrysmt/go-bitbucket"
"os"
@@ -52,7 +53,7 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
)
sourceBranch, err := git.CurrentBranch()
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
@@ -60,7 +61,7 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
// First, init default data
repo, err := c.RepositoryGet(bbrepo.RepoOrga, bbrepo.RepoSlug)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
targetBranch = repo.MainBranch.Name
@@ -76,34 +77,34 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
head, err := bbgit.CurrentHead()
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if _, err := c.GetCommit(bbrepo.RepoOrga, bbrepo.RepoSlug, head); err != nil {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "Current commit is not available on bitbucket yet. If you create the pull request now, it won't contain the latest pushes.")
+ logging.Warning("Current commit is not available on bitbucket yet. If you create the pull request now, it won't contain the latest pushes.")
}
if ucc, err := git.UncommittedChangeCount(); err == nil && ucc > 0 {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), utils.Pluralize(ucc, "uncommitted change"))
+ logging.Warning(utils.Pluralize(ucc, "uncommitted change"))
}
title, body, err = c.PrDefaultTitleAndBody(bbrepo.RepoOrga, bbrepo.RepoSlug, sourceBranch, targetBranch)
defaultBody = body
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
defaultReviewers, err := c.GetDefaultReviewers(bbrepo.RepoOrga, bbrepo.RepoSlug)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
currentUser, err := c.GetCurrentUser()
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "Can't get the current user - this means that the default reviewers won't be added to this pull request. Make sure to grant the account-scope for your access token")
+ logging.Warning("Can't get the current user - this means that the default reviewers won't be added to this pull request. Make sure to grant the account-scope for your access token")
} else {
for _, rev := range defaultReviewers.Values {
if currentUser.Uuid != rev.UUID {
@@ -117,14 +118,14 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
// Then, check if a pr is already existing. If force is True, take that data
possiblePrs, err := c.GetPrIDBySourceBranch(bbrepo.RepoOrga, bbrepo.RepoSlug, sourceBranch)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if !Force {
if len(possiblePrs.Values) != 0 {
id := possiblePrs.Values[0].ID
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), fmt.Sprintf("Pull request %d already exists for this branch. Use --force to ignore this.", id))
+ logging.Warning(fmt.Sprintf("Pull request %d already exists for this branch. Use --force to ignore this.", id))
return
}
} else {
@@ -170,11 +171,11 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
err = survey.AskOne(questionTitle, &title)
}
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
- fmt.Println(aurora.Bold(aurora.Green("!").String() + " Body:"))
+ logging.SuccessExclamation("Body:")
out, _ := glamour.Render(body, "dark")
fmt.Print(out)
@@ -210,7 +211,7 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
var doNext string
err = survey.AskOne(selectNext, &doNext)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
@@ -310,7 +311,7 @@ func changeDestinationBranch(bbrepo *bbgit.BitbucketRepo, c *client.Client, targ
_, tempBody, err := c.PrDefaultTitleAndBody(bbrepo.RepoOrga, bbrepo.RepoSlug, sourceBranch, targetBranch)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return "", err
}
if body == defaultBody {
@@ -321,7 +322,7 @@ func changeDestinationBranch(bbrepo *bbgit.BitbucketRepo, c *client.Client, targ
func manageReviewers(bbrepo *bbgit.BitbucketRepo, c *client.Client, currentUser *bitbucket.User, reviewers []string) ([]string, error) {
if currentUser == nil {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "Can't get the current user - this means that reviewers can't be managed on this pull request. Make sure to grant the account-scope for your access token.")
+ logging.Warning("Can't get the current user - this means that reviewers can't be managed on this pull request. Make sure to grant the account-scope for your access token.")
}
for {
fmt.Println("Reviewers:")
@@ -360,7 +361,7 @@ func manageReviewers(bbrepo *bbgit.BitbucketRepo, c *client.Client, currentUser
nameToUUID[name] = rev
}
if len(listOfNames) == 0 {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "No reviwers to remove available")
+ logging.Warning("No reviwers to remove available")
continue
}
var removedReviewers []string
@@ -384,7 +385,7 @@ func manageReviewers(bbrepo *bbgit.BitbucketRepo, c *client.Client, currentUser
members, err := c.GetWorkspaceMembers(bbrepo.RepoOrga)
if err != nil {
- fmt.Printf("%s%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "Could not get workspace members - create the pr without reviewers and add them manually using the browser", err)
+ logging.Warning(fmt.Sprint("Could not get workspace members - create the pr without reviewers and add them manually using the browser", err))
continue
}
var nonReviewersMembers []string
@@ -402,7 +403,7 @@ func manageReviewers(bbrepo *bbgit.BitbucketRepo, c *client.Client, currentUser
nameToUUID[name] = rev
}
if len(listOfNames) == 0 {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "No reviwers to add available")
+ logging.Warning("No reviwers to add available")
continue
}
var addedReviewers []string
@@ -412,7 +413,7 @@ func manageReviewers(bbrepo *bbgit.BitbucketRepo, c *client.Client, currentUser
PageSize: 20,
}, &addedReviewers)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return nil, err
}
for _, addedReviewer := range addedReviewers {
diff --git a/cmd/commands/pr/diff/diff.go b/cmd/commands/pr/diff/diff.go
index e428318..2eb6014 100644
--- a/cmd/commands/pr/diff/diff.go
+++ b/cmd/commands/pr/diff/diff.go
@@ -3,12 +3,12 @@ package diff
import (
"bufio"
"fmt"
+ "github.com/craftamap/bb/util/logging"
"strconv"
"strings"
"github.com/cli/cli/git"
"github.com/craftamap/bb/cmd/options"
- "github.com/logrusorgru/aurora"
"github.com/spf13/cobra"
)
@@ -31,23 +31,23 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if len(args) > 0 {
id, err = strconv.Atoi(strings.TrimPrefix(args[0], "#"))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
} else {
branchName, err := git.CurrentBranch()
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
prs, err := c.GetPrIDBySourceBranch(bbrepo.RepoOrga, bbrepo.RepoSlug, branchName)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if len(prs.Values) == 0 {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "Nothing on this branch")
+ logging.Warning("Nothing on this branch")
return
}
@@ -55,13 +55,13 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
}
repo, err := c.PrView(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%d", id))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
diff, err := c.DiffGet(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%s..%s", repo.Source.Commit.Hash, repo.Destination.Commit.Hash))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
diff --git a/cmd/commands/pr/list/list.go b/cmd/commands/pr/list/list.go
index 10189dd..d134233 100644
--- a/cmd/commands/pr/list/list.go
+++ b/cmd/commands/pr/list/list.go
@@ -2,6 +2,7 @@ package list
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"strings"
"github.com/craftamap/bb/cmd/options"
@@ -32,14 +33,14 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if Web {
repo, err := c.RepositoryGet(bbrepo.RepoOrga, bbrepo.RepoSlug)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
}
linkWrapper := repo.Links["Html"].(*bitbucket.SubjectTypesRepositoryEvents)
link := linkWrapper.Href + "/pull-requests"
err = browser.OpenURL(link)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
@@ -50,7 +51,7 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
prs, err := c.PrList(bbrepo.RepoOrga, bbrepo.RepoSlug, []string{state})
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
}
fmt.Println()
diff --git a/cmd/commands/pr/merge/merge.go b/cmd/commands/pr/merge/merge.go
index d7cc9c2..fd1c892 100644
--- a/cmd/commands/pr/merge/merge.go
+++ b/cmd/commands/pr/merge/merge.go
@@ -2,13 +2,13 @@ package merge
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"strconv"
"strings"
"github.com/cli/cli/git"
"github.com/craftamap/bb/cmd/commands/pr/view"
"github.com/craftamap/bb/cmd/options"
- "github.com/logrusorgru/aurora"
"github.com/spf13/cobra"
)
@@ -31,23 +31,23 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if len(args) > 0 {
id, err = strconv.Atoi(strings.TrimPrefix(args[0], "#"))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
} else {
branchName, err := git.CurrentBranch()
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
prs, err := c.GetPrIDBySourceBranch(bbrepo.RepoOrga, bbrepo.RepoSlug, branchName)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if len(prs.Values) == 0 {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "Nothing on this branch")
+ logging.Warning("Nothing on this branch")
return
}
@@ -55,13 +55,13 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
}
pr, err := c.PrMerge(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%d", id))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
commits, err := c.PrCommits(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%d", id))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
view.PrintSummary(pr, commits)
diff --git a/cmd/commands/pr/requestchanges/requestchanges.go b/cmd/commands/pr/requestchanges/requestchanges.go
index 8117efc..83a8dfa 100644
--- a/cmd/commands/pr/requestchanges/requestchanges.go
+++ b/cmd/commands/pr/requestchanges/requestchanges.go
@@ -2,12 +2,12 @@ package requestchanges
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"strconv"
"strings"
"github.com/cli/cli/git"
"github.com/craftamap/bb/cmd/options"
- "github.com/logrusorgru/aurora"
"github.com/spf13/cobra"
)
@@ -31,23 +31,23 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if len(args) > 0 {
id, err = strconv.Atoi(strings.TrimPrefix(args[0], "#"))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
} else {
branchName, err := git.CurrentBranch()
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
prs, err := c.GetPrIDBySourceBranch(bbrepo.RepoOrga, bbrepo.RepoSlug, branchName)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if len(prs.Values) == 0 {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "Nothing on this branch")
+ logging.Warning("Nothing on this branch")
return
}
@@ -56,17 +56,17 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if !UnRequest {
participant, err := c.PrRequestChanges(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%d", id))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
- fmt.Println(aurora.Green(":: "), participant.State)
+ logging.Success(participant.State)
} else {
err := c.PrUnRequestChanges(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%d", id))
if err != nil && !strings.Contains(err.Error(), "204") {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
- fmt.Println(aurora.Green(":: "), "unrequested")
+ logging.Success("unrequested")
}
},
}
diff --git a/cmd/commands/pr/statuses/statuses.go b/cmd/commands/pr/statuses/statuses.go
index 87392ca..aa9b6df 100644
--- a/cmd/commands/pr/statuses/statuses.go
+++ b/cmd/commands/pr/statuses/statuses.go
@@ -2,6 +2,7 @@ package statuses
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"strconv"
"strings"
@@ -37,23 +38,23 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if len(args) > 0 {
id, err = strconv.Atoi(strings.TrimPrefix(args[0], "#"))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
} else {
branchName, err := git.CurrentBranch()
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
prs, err := c.GetPrIDBySourceBranch(bbrepo.RepoOrga, bbrepo.RepoSlug, branchName)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if len(prs.Values) == 0 {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "Nothing on this branch")
+ logging.Warning("Nothing on this branch")
return
}
@@ -61,7 +62,7 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
}
statuses, err := c.PrStatuses(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%d", id))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
diff --git a/cmd/commands/pr/view/view.go b/cmd/commands/pr/view/view.go
index 8d82c6b..64bb247 100644
--- a/cmd/commands/pr/view/view.go
+++ b/cmd/commands/pr/view/view.go
@@ -2,6 +2,7 @@ package view
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"strconv"
"strings"
@@ -37,23 +38,23 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if len(args) > 0 {
id, err = strconv.Atoi(strings.TrimPrefix(args[0], "#"))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
} else {
branchName, err := git.CurrentBranch()
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
prs, err := c.GetPrIDBySourceBranch(bbrepo.RepoOrga, bbrepo.RepoSlug, branchName)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if len(prs.Values) == 0 {
- fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), "Nothing on this branch")
+ logging.Warning("Nothing on this branch")
return
}
id = prs.Values[0].ID
@@ -61,13 +62,13 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
pr, err := c.PrView(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%d", id))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if Web {
err := browser.OpenURL(pr.Links["html"].Href)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
return
@@ -75,7 +76,7 @@ func Add(prCmd *cobra.Command, globalOpts *options.GlobalOptions) {
commits, err := c.PrCommits(bbrepo.RepoOrga, bbrepo.RepoSlug, fmt.Sprintf("%d", id))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
@@ -108,7 +109,7 @@ func PrintSummary(pr *client.PullRequest, commits *client.Commits) {
if pr.Description != "" {
out, err := glamour.Render(pr.Description, "dark")
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
fmt.Println(out)
diff --git a/cmd/commands/repo/clone/clone.go b/cmd/commands/repo/clone/clone.go
index e5bc0af..b1751be 100644
--- a/cmd/commands/repo/clone/clone.go
+++ b/cmd/commands/repo/clone/clone.go
@@ -2,6 +2,7 @@ package clone
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"strings"
"github.com/AlecAivazis/survey/v2"
@@ -29,7 +30,7 @@ func Add(repoCmd *cobra.Command, globalOpts *options.GlobalOptions) {
Options: []string{"ssh", "https"},
}, &gitProtocol)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
viper.Set("git_protocol", gitProtocol)
@@ -39,7 +40,7 @@ func Add(repoCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if len(args) == 0 {
workspaces, err := c.GetWorkspaces()
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
// fmt.Println(workspaces)
@@ -54,13 +55,13 @@ func Add(repoCmd *cobra.Command, globalOpts *options.GlobalOptions) {
Options: workspaceSlugs,
}, &workspaceSlug)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
// fmt.Println(workspaceSlug)
repos, err := c.RepositoriesForWorkspace(workspaceSlug)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
repoSlugs := []string{}
@@ -73,7 +74,7 @@ func Add(repoCmd *cobra.Command, globalOpts *options.GlobalOptions) {
Options: repoSlugs,
}, &repoOrgaSlug)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
@@ -81,7 +82,7 @@ func Add(repoCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if len(splitted) == 2 {
_, err := c.RepositoryGet(splitted[0], splitted[1])
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
@@ -93,7 +94,7 @@ func Add(repoCmd *cobra.Command, globalOpts *options.GlobalOptions) {
if len(splitted) == 2 {
_, err := c.RepositoryGet(splitted[0], splitted[1])
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
diff --git a/cmd/commands/repo/view/view.go b/cmd/commands/repo/view/view.go
index ea77198..a24ce52 100644
--- a/cmd/commands/repo/view/view.go
+++ b/cmd/commands/repo/view/view.go
@@ -2,6 +2,7 @@ package view
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"github.com/charmbracelet/glamour"
"github.com/craftamap/bb/cmd/options"
@@ -31,13 +32,13 @@ func Add(repoCmd *cobra.Command, globalOpts *options.GlobalOptions) {
repo, err := c.RepositoryGet(bbrepo.RepoOrga, bbrepo.RepoSlug)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
if Web {
err := browser.OpenURL(repo.Links["html"].(map[string]interface{})["href"].(string))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
return
@@ -45,7 +46,7 @@ func Add(repoCmd *cobra.Command, globalOpts *options.GlobalOptions) {
readme, err := c.GetReadmeContent(bbrepo.RepoOrga, bbrepo.RepoSlug, repo.MainBranch.Name)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
@@ -66,7 +67,7 @@ func PrintSummary(repo *client.Repository, readme string) {
if readme != "" {
out, err := glamour.Render(readme, "dark")
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
fmt.Println(out)
diff --git a/cmd/root.go b/cmd/root.go
index c49a83f..7f938e9 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -2,6 +2,7 @@ package cmd
import (
"fmt"
+ "github.com/craftamap/bb/util/logging"
"os"
"path/filepath"
@@ -33,7 +34,7 @@ var (
if _, ok := cmd.Annotations["RequiresRepository"]; ok {
bbrepo, err := bbgit.GetBitbucketRepo(remoteName)
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
os.Exit(1)
}
if !bbrepo.IsBitbucketOrg() {
@@ -83,12 +84,12 @@ func init() {
err := viper.BindPFlag("username", rootCmd.PersistentFlags().Lookup("username"))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
err = viper.BindPFlag("password", rootCmd.PersistentFlags().Lookup("password"))
if err != nil {
- fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), err)
+ logging.Error(err)
return
}
diff --git a/go.mod b/go.mod
index 8e7f500..2e89839 100644
--- a/go.mod
+++ b/go.mod
@@ -4,28 +4,20 @@ go 1.15
require (
github.com/AlecAivazis/survey/v2 v2.1.1
- github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 // indirect
github.com/charmbracelet/glamour v0.2.1-0.20200724174618-1246d13c1684
github.com/cli/cli v1.3.0
github.com/cli/safeexec v1.0.0
- github.com/coreos/etcd v3.3.13+incompatible
github.com/dustin/go-humanize v1.0.0
github.com/kirsle/configdir v0.0.0-20170128060238-e45d2f54772f
github.com/ktrysmt/go-bitbucket v0.9.2
github.com/kyokomi/emoji v2.2.4+incompatible
github.com/logrusorgru/aurora v2.0.3+incompatible
- github.com/logrusorgru/aurora/v3 v3.0.0 // indirect
github.com/mitchellh/mapstructure v1.3.3
github.com/muesli/reflow v0.1.0
- github.com/pborman/ansi v1.0.0
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4
- github.com/spance/go-callprivate v0.0.0-20151213012958-d8b9b5523668 // indirect
github.com/spf13/cobra v1.1.1
github.com/spf13/viper v1.7.0
- github.com/thoas/go-funk v0.7.0 // indirect
github.com/tidwall/pretty v1.0.2
- github.com/ugorji/go v1.1.4 // indirect
github.com/wbrefvem/go-bitbucket v0.0.0-20190128183802-fc08fd046abb
- github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect
)
diff --git a/go.sum b/go.sum
index 5123dd2..34b97dd 100644
--- a/go.sum
+++ b/go.sum
@@ -11,24 +11,27 @@ cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqCl
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-github.com/AlecAivazis/survey v1.8.8 h1:Y4yypp763E8cbqb5RBqZhGgkCFLRFnbRBHrxnpMMsgQ=
github.com/AlecAivazis/survey/v2 v2.1.1 h1:LEMbHE0pLj75faaVEKClEX1TM4AJmmnOh9eimREzLWI=
github.com/AlecAivazis/survey/v2 v2.1.1/go.mod h1:9FJRdMdDm8rnT+zHVbvQT2RTSTLq0Ttd6q3Vl2fahjk=
+github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
+github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8 h1:xzYJEypr/85nBpB11F9br+3HUrpgb+fcm5iADzXXYEw=
github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
+github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm+0dGI2AIUHY+w0BUc+4tn40djz7+6U=
github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI=
github.com/alecthomas/chroma v0.7.3 h1:NfdAERMy+esYQs8OXk0I868/qDxxCEo7FMz1WIqMAeI=
github.com/alecthomas/chroma v0.7.3/go.mod h1:sko8vR34/90zvl5QdcUdvzL3J8NKjAUx9va9jPuFNoM=
+github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721 h1:JHZL0hZKJ1VENNfmXvHbgYlbUOvpzYzvy2aZU5gXVeo=
github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0=
github.com/alecthomas/kong v0.2.4/go.mod h1:kQOmtJgV+Lb4aj+I2LEn40cbtawdWJ9Y8QLq+lElKxE=
+github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897 h1:p9Sln00KOTlrYkxI1zYWl1QLnEqAqEARBEYa8FQnQcY=
github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
-github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
@@ -38,22 +41,16 @@ github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJm
github.com/briandowns/spinner v1.11.1 h1:OixPqDEcX3juo5AjQZAnFPbeUA0jvkp2qzB5gOZJ/L0=
github.com/briandowns/spinner v1.11.1/go.mod h1:QOuQk7x+EaDASo80FEXwlwiA+j/PPIcX3FScO+3/ZPQ=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
-github.com/charmbracelet/glamour v0.2.0 h1:mTgaiNiumpqTZp3qVM6DH9UB0NlbY17wejoMf1kM8Pg=
-github.com/charmbracelet/glamour v0.2.0/go.mod h1:UA27Kwj3QHialP74iU6C+Gpc8Y7IOAKupeKMLLBURWM=
github.com/charmbracelet/glamour v0.2.1-0.20200724174618-1246d13c1684 h1:YMyvXRstOQc7n6eneHfudVMbARSCmZ7EZGjtTkkeB3A=
github.com/charmbracelet/glamour v0.2.1-0.20200724174618-1246d13c1684/go.mod h1:UA27Kwj3QHialP74iU6C+Gpc8Y7IOAKupeKMLLBURWM=
-github.com/cli/cli v1.1.0 h1:Ynfk6q+1ozX/3YhY5J4QMf9J6rekO7rDpwYgc2DtEkc=
-github.com/cli/cli v1.1.0/go.mod h1:9W9naQhz5tAJCqlvkp962EQE7jiEUuRW83oqk71yYsc=
github.com/cli/cli v1.3.0 h1:wLrjwtaRCWgpjQ6Iorm6Vux9+yLH1DPxaJYdYhfRSt0=
github.com/cli/cli v1.3.0/go.mod h1:O+aEd7JTaciPdbHznT5h+edEwf8u638haQ4d8++kIec=
github.com/cli/safeexec v1.0.0 h1:0VngyaIyqACHdcMNWfo6+KdUYnqEr2Sg+bSP1pdF+dI=
github.com/cli/safeexec v1.0.0/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
-github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/etcd v3.3.13+incompatible h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ=
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
-github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
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=
@@ -61,6 +58,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsr
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ=
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+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=
@@ -106,8 +104,8 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaU
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
@@ -135,14 +133,17 @@ github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0m
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/henvic/httpretty v0.0.6/go.mod h1:X38wLjWXHkXT7r2+uK8LjCMne9rsuNaBLJ+5cU2/Pmo=
+github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174 h1:WlZsjVhE8Af9IcZDGgJGQpNflI3+MJSBhsgT5PCtzBQ=
github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQF+M0ao65imhwqKnz3Q2z/d8PWZRMQvDM=
github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
github.com/k0kubun/pp v2.3.0+incompatible h1:EKhKbi34VQDWJtq+zpsKSEhkHHs9w2P8Izbq8IhLVSo=
github.com/k0kubun/pp v2.3.0+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg=
@@ -154,32 +155,21 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/pty v1.1.4 h1:5Myjjh3JY/NaAi4IsUbHADytDyl1VE1Y9PXDlL+P/VQ=
github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/ktrysmt/go-bitbucket v0.6.4 h1:C8dUGp0qkwncKtAnozHCbbqhptefzEd1I0sfnuy9rYQ=
-github.com/ktrysmt/go-bitbucket v0.6.4/go.mod h1:9u0v3hsd2rqCHRIpbir1oP7F58uo5dq19sBYvuMoyQ4=
-github.com/ktrysmt/go-bitbucket v0.6.5 h1:+M4oFRZbzKH+Jt/eY3rKDPwyA5uvjY0KSJQwePGvvzQ=
-github.com/ktrysmt/go-bitbucket v0.6.5/go.mod h1:9u0v3hsd2rqCHRIpbir1oP7F58uo5dq19sBYvuMoyQ4=
-github.com/ktrysmt/go-bitbucket v0.6.6 h1:78sCjU8xMUvNGIBCRLSrNAjtbCk6ayVSwEr9n5LLp0U=
-github.com/ktrysmt/go-bitbucket v0.6.6/go.mod h1:9u0v3hsd2rqCHRIpbir1oP7F58uo5dq19sBYvuMoyQ4=
-github.com/ktrysmt/go-bitbucket v0.8.0 h1:KwJcRTtGhiHezFQgdFrMOV/r9rVyuFk/KYZftgb1TIg=
-github.com/ktrysmt/go-bitbucket v0.8.0/go.mod h1:9u0v3hsd2rqCHRIpbir1oP7F58uo5dq19sBYvuMoyQ4=
-github.com/ktrysmt/go-bitbucket v0.9.0 h1:T/8UBpQZ67atGa3hnESlWidQ0n9MpsqfKxPNe4sCOMQ=
-github.com/ktrysmt/go-bitbucket v0.9.0/go.mod h1:9u0v3hsd2rqCHRIpbir1oP7F58uo5dq19sBYvuMoyQ4=
github.com/ktrysmt/go-bitbucket v0.9.2 h1:HpfQEGPqyvdxYamryObQHm82okwVi1iDTDETVZxBAJE=
github.com/ktrysmt/go-bitbucket v0.9.2/go.mod h1:9u0v3hsd2rqCHRIpbir1oP7F58uo5dq19sBYvuMoyQ4=
-github.com/kyokomi/emoji v1.5.1 h1:qp9dub1mW7C4MlvoRENH6EAENb9skEFOvIEbp1Waj38=
github.com/kyokomi/emoji v2.2.4+incompatible h1:np0woGKwx9LiHAQmwZx79Oc0rHpNw3o+3evou4BEPv4=
github.com/kyokomi/emoji v2.2.4+incompatible/go.mod h1:mZ6aGCD7yk8j6QY6KICwnZ2pxoszVseX1DNoGtU2tBA=
github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8=
github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
-github.com/logrusorgru/aurora/v3 v3.0.0 h1:R6zcoZZbvVcGMvDCKo45A9U/lzYyzl5NfYIvznmDfE4=
-github.com/logrusorgru/aurora/v3 v3.0.0/go.mod h1:vsR12bk5grlLvLXAYrBsb5Oc/N+LxAlxggSjiwMnCUc=
github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac=
github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
-github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
@@ -187,8 +177,6 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE=
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
-github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw=
-github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI=
@@ -226,8 +214,6 @@ github.com/muesli/reflow v0.1.0 h1:oQdpLfO56lr5pgLvqD0TcjW85rDjSYSBVdiG1Ch1ddM=
github.com/muesli/reflow v0.1.0/go.mod h1:I9bWAt7QTg/que/qmUCJBGlj7wEq8OAFBjPNjc6xK4I=
github.com/muesli/termenv v0.6.0 h1:zxvzTBmo4ZcxhNGGWeMz+Tttm51eF5bmPjfy4MCRYlk=
github.com/muesli/termenv v0.6.0/go.mod h1:SohX91w6swWA4AYU+QmPx+aSgXhWO0juiyID9UZmbpA=
-github.com/muesli/termenv v0.7.2 h1:r1raklL3uKE7rOvWgSenmEm2px+dnc33OTisZ8YR1fw=
-github.com/muesli/termenv v0.7.2/go.mod h1:ct2L5N2lmix82RaY3bMWwVu/jUFc9Ule0KGDCiKYPh8=
github.com/muesli/termenv v0.7.4 h1:/pBqvU5CpkY53tU0vVn+xgs2ZTX63aH5nY+SSps5Xa8=
github.com/muesli/termenv v0.7.4/go.mod h1:pZ7qY9l3F7e5xsAOS0zCew2tME+p7bWeBkotCEcIIcc=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
@@ -235,8 +221,6 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn
github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8=
github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
-github.com/pborman/ansi v1.0.0 h1:OqjHMhvlSuCCV5JT07yqPuJPQzQl+WXsiZ14gZsqOrQ=
-github.com/pborman/ansi v1.0.0/go.mod h1:SgWzwMAx1X/Ez7i90VqF8LRiQtx52pWDiQP+x3iGnzw=
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98=
@@ -244,6 +228,7 @@ github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
@@ -262,25 +247,22 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
+github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
-github.com/shurcooL/githubv4 v0.0.0-20200802174311-f27d2ca7f6d5/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo=
github.com/shurcooL/githubv4 v0.0.0-20200928013246-d292edc3691b/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo=
github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
-github.com/spance/go-callprivate v0.0.0-20151213012958-d8b9b5523668 h1:wSXAJdKyzJNaIvTDkThQd13R+3DiVKttdi1iOUa/6xw=
-github.com/spance/go-callprivate v0.0.0-20151213012958-d8b9b5523668/go.mod h1:YAHXixP6/M2dnkeoKo4MG9cK8i7OjSn0AFS0SmcBgFA=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
-github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
-github.com/spf13/cobra v1.1.0 h1:aq3wCKjTPmzcNWLVGnsFVN4rflK7Uzn10F8/aw8MhdQ=
-github.com/spf13/cobra v1.1.0/go.mod h1:yk5b0mALVusDL5fMM6Rd1wgnoO5jUPhwsQ6LQAJTidQ=
github.com/spf13/cobra v1.1.1 h1:KfztREH0tPxJJ+geloSLaAkaPkr4ki2Er5quFV1TDo4=
github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
@@ -288,7 +270,6 @@ github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb6
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM=
github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -296,20 +277,16 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
-github.com/thoas/go-funk v0.7.0 h1:GmirKrs6j6zJbhJIficOsz2aAI7700KsU/5YrdHRM1Y=
-github.com/thoas/go-funk v0.7.0/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q=
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
-github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
github.com/wbrefvem/go-bitbucket v0.0.0-20190128183802-fc08fd046abb h1:KrmaSo+FHWBt1H652w/uerwzKvQqh4H7Jgyxm4hz2BQ=
github.com/wbrefvem/go-bitbucket v0.0.0-20190128183802-fc08fd046abb/go.mod h1:Z91j2jYBApRjJ0zlXDCxPrrZR8ohkkd4g0n+Hqs1w0Q=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
-github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yuin/goldmark v1.2.0 h1:WOOcyaJPlzb8fZ8TloxFe8QZkhOOJx87leDa9MIT9dc=
github.com/yuin/goldmark v1.2.0/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
@@ -325,8 +302,6 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM=
-golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E=
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -360,7 +335,6 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -400,8 +374,6 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -447,10 +419,10 @@ google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBr
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
-google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
@@ -458,12 +430,12 @@ gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/util/logging/logging.go b/util/logging/logging.go
new file mode 100644
index 0000000..bcf84ad
--- /dev/null
+++ b/util/logging/logging.go
@@ -0,0 +1,26 @@
+package logging
+
+import (
+ "fmt"
+ "github.com/logrusorgru/aurora"
+)
+
+func Error(message ...interface{}) {
+ fmt.Printf("%s%s%s\n", aurora.Red(":: "), aurora.Bold("An error occurred: "), message)
+}
+
+func Warning(message ...interface{}) {
+ fmt.Printf("%s%s%s\n", aurora.Yellow(":: "), aurora.Bold("Warning: "), fmt.Sprint(message...))
+}
+
+func Note(message ...interface{}) {
+ fmt.Printf("%s%s%s\n", aurora.Magenta(":: "), aurora.Bold("Note: "), fmt.Sprint(message...))
+}
+
+func Success(message ...interface{}) {
+ fmt.Printf("%s%s\n", aurora.Green(":: "), fmt.Sprint(message...))
+}
+
+func SuccessExclamation(message ...interface{}) {
+ fmt.Printf("%s%s", aurora.Bold(aurora.Green("! ")), aurora.Bold(fmt.Sprint(message...)))
+}
\ No newline at end of file