change GitHub issue output to upload `minikube logs` file

pull/12395/head
Steven Powell 2021-09-02 15:09:09 -07:00
parent efe6115b17
commit 78febe240d
2 changed files with 94 additions and 26 deletions

View File

@ -33,9 +33,9 @@ import (
"github.com/Delta456/box-cli-maker/v2" "github.com/Delta456/box-cli-maker/v2"
"github.com/briandowns/spinner" "github.com/briandowns/spinner"
"github.com/mattn/go-isatty" "github.com/mattn/go-isatty"
"github.com/spf13/pflag"
"k8s.io/klog/v2" "k8s.io/klog/v2"
"k8s.io/minikube/pkg/minikube/localpath"
"k8s.io/minikube/pkg/minikube/out/register" "k8s.io/minikube/pkg/minikube/out/register"
"k8s.io/minikube/pkg/minikube/style" "k8s.io/minikube/pkg/minikube/style"
"k8s.io/minikube/pkg/minikube/translate" "k8s.io/minikube/pkg/minikube/translate"
@ -381,14 +381,6 @@ func displayError(msg string, err error) {
} }
func latestLogFilePath() (string, error) { func latestLogFilePath() (string, error) {
if len(os.Args) < 2 {
return "", fmt.Errorf("unable to detect command")
}
cmd := os.Args[1]
if cmd == "start" {
return localpath.LastStartLog(), nil
}
tmpdir := os.TempDir() tmpdir := os.TempDir()
files, err := ioutil.ReadDir(tmpdir) files, err := ioutil.ReadDir(tmpdir)
if err != nil { if err != nil {
@ -411,16 +403,32 @@ func latestLogFilePath() (string, error) {
return fullPath, nil return fullPath, nil
} }
func command() (string, error) {
if len(pflag.Args()) < 1 {
return "", fmt.Errorf("unable to detect command")
}
return pflag.Arg(0), nil
}
func displayGitHubIssueMessage() { func displayGitHubIssueMessage() {
logPath, err := latestLogFilePath() cmd, err := command()
if err != nil { if err != nil {
klog.Warningf("failed to diplay GitHub issue message: %v", err) klog.Warningf("failed to get command: %v", err)
} }
msg := Sprintf(style.Sad, "If the above advice does not help, please let us know:") msg := Sprintf(style.Sad, "If the above advice does not help, please let us know:")
msg += Sprintf(style.URL, "https://github.com/kubernetes/minikube/issues/new/choose\n") msg += Sprintf(style.URL, "https://github.com/kubernetes/minikube/issues/new/choose\n")
msg += Sprintf(style.Empty, "Please attach the following file to the GitHub issue:") msg += Sprintf(style.Empty, "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.")
msg += Sprintf(style.Empty, "- {{.logPath}}", V{"logPath": logPath})
if cmd != "start" {
logPath, err := latestLogFilePath()
if err != nil {
klog.Warningf("failed to get latest log file path: %v", err)
}
msg += Sprintf(style.Empty, "Please also attach the following file to the GitHub issue:")
msg += Sprintf(style.Empty, "- {{.logPath}}", V{"logPath": logPath})
}
BoxedErr(msg) BoxedErr(msg)
} }

View File

@ -21,11 +21,12 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"strconv" "strconv"
"strings"
"testing" "testing"
"github.com/Delta456/box-cli-maker/v2" "github.com/Delta456/box-cli-maker/v2"
"github.com/spf13/pflag"
"k8s.io/minikube/pkg/minikube/localpath"
"k8s.io/minikube/pkg/minikube/style" "k8s.io/minikube/pkg/minikube/style"
"k8s.io/minikube/pkg/minikube/tests" "k8s.io/minikube/pkg/minikube/tests"
"k8s.io/minikube/pkg/minikube/translate" "k8s.io/minikube/pkg/minikube/translate"
@ -130,37 +131,96 @@ func createLogFile() (string, error) {
return f.Name(), nil return f.Name(), nil
} }
func TestLatestLogPath(t *testing.T) { func TestLatestLogFilePath(t *testing.T) {
filename, err := createLogFile() want, err := createLogFile()
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
defer os.Remove(filename) defer os.Remove(want)
got, err := latestLogFilePath()
if err != nil {
t.Errorf("latestLogFilePath() failed with error = %v", err)
}
if got != want {
t.Errorf("latestLogFilePath() = %q; wanted %q", got, want)
}
}
func TestCommand(t *testing.T) {
testCases := []struct { testCases := []struct {
args []string args []string
want string want string
shouldError bool
}{ }{
{ {
[]string{"minikube", "start"}, []string{"minikube", "start"},
localpath.LastStartLog(), "start",
false,
}, },
{ {
[]string{"minikube", "status"}, []string{"minikube", "--profile", "profile1", "start"},
filename, "start",
false,
},
{
[]string{"minikube"},
"",
true,
}, },
} }
pflag.String("profile", "", "")
for _, tt := range testCases { for _, tt := range testCases {
oldArgs := os.Args oldArgs := os.Args
defer func() { os.Args = oldArgs }() defer func() { os.Args = oldArgs }()
os.Args = tt.args os.Args = tt.args
got, err := latestLogFilePath() pflag.Parse()
if err != nil { got, err := command()
t.Fatalf("os.Args = %s; latestLogFilePath() failed with error = %v", tt.args, err) if err == nil && tt.shouldError {
t.Errorf("os.Args = %s; command() did not fail but was expected to", tt.args)
}
if err != nil && !tt.shouldError {
t.Errorf("os.Args = %s; command() failed with error = %v", tt.args, err)
} }
if got != tt.want { if got != tt.want {
t.Errorf("os.Args = %s; latestLogFilePath() = %q; wanted %q", tt.args, got, tt.want) t.Errorf("os.Args = %s; command() = %q; wanted %q", tt.args, got, tt.want)
}
}
}
func TestDisplayGitHubIssueMessage(t *testing.T) {
testCases := []struct {
args []string
shouldContainMessage bool
}{
{
[]string{"minikube", "start"},
false,
},
{
[]string{"minikube", "delete"},
true,
},
}
msg := "Please also attach the following file to the GitHub issue:"
for _, tt := range testCases {
oldArgs := os.Args
defer func() { os.Args = oldArgs }()
os.Args = tt.args
pflag.Parse()
f := tests.NewFakeFile()
SetErrFile(f)
displayGitHubIssueMessage()
output := f.String()
if strings.Contains(output, msg) && !tt.shouldContainMessage {
t.Errorf("os.Args = %s; displayGitHubIssueMessage() output = %q; did not expect it to contain = %q", tt.args, output, msg)
}
if !strings.Contains(output, msg) && tt.shouldContainMessage {
t.Errorf("os.Args = %s; displayGitHubIssueMessage() output = %q; expected to contain = %q", tt.args, output, msg)
} }
} }
} }