Skip to content

Commit

Permalink
Improve usability of func CLI for IDE plugins (#1091)
Browse files Browse the repository at this point in the history
* Better input handling for non-tty

Signed-off-by: Matej Vasek <mvasek@redhat.com>

* Make cred-helper 'not implemented' non fatal error

Signed-off-by: Matej Vasek <mvasek@redhat.com>
  • Loading branch information
matejvasek authored Jul 1, 2022
1 parent 5c211a6 commit 8050597
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 12 deletions.
44 changes: 34 additions & 10 deletions cmd/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -318,18 +318,42 @@ you can install docker credential helper https://github.com/docker/docker-creden
return "", nil
}

isTerm := term.IsTerminal(int(os.Stdin.Fd()))

var resp string
err := survey.AskOne(&survey.Select{
Message: "Choose credentials helper",
Options: append(availableHelpers, "None"),
}, &resp, survey.WithValidator(survey.Required))
if err != nil {
return "", err
}
if resp == "None" {
fmt.Fprintf(os.Stderr, "No helper selected. Credentials will not be saved.\n")
return "", nil

if isTerm {
err := survey.AskOne(&survey.Select{
Message: "Choose credentials helper",
Options: append(availableHelpers, "None"),
}, &resp, survey.WithValidator(survey.Required))
if err != nil {
return "", err
}
if resp == "None" {
fmt.Fprintf(os.Stderr, "No helper selected. Credentials will not be saved.\n")
return "", nil
}
} else {
fmt.Fprintf(os.Stderr, "Available credential helpers:\n")
for _, helper := range availableHelpers {
fmt.Fprintf(os.Stderr, "%s\n", helper)
}
fmt.Fprintf(os.Stderr, "Choose credentials helper: ")

reader := bufio.NewReader(os.Stdin)

var err error
resp, err = reader.ReadString('\n')
if err != nil {
return "", err
}
resp = strings.Trim(resp, "\r\n")
if resp == "" {
fmt.Fprintf(os.Stderr, "No helper selected. Credentials will not be saved.\n")
}
}

return resp, nil
}
}
Expand Down
20 changes: 18 additions & 2 deletions docker/creds/credentials.go
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,13 @@ func (c *credentialsProvider) getCredentials(ctx context.Context, registry strin
if err == nil {
err = setCredentialsByCredentialHelper(c.authFilePath, registry, result.Username, result.Password)
if err != nil {

// This shouldn't be fatal error.
if strings.Contains(err.Error(), "not implemented") {
fmt.Fprintf(os.Stderr, "the cred-helper does not support write operation (consider changing the cred-helper it in auth.json)\n")
return docker.Credentials{}, nil
}

if !errors.Is(err, errNoCredentialHelperConfigured) {
return docker.Credentials{}, err
}
Expand All @@ -269,8 +276,17 @@ func (c *credentialsProvider) getCredentials(ctx context.Context, registry strin
return docker.Credentials{}, fmt.Errorf("faild to set the helper to the config: %w", err)
}
err = setCredentialsByCredentialHelper(c.authFilePath, registry, result.Username, result.Password)
if err != nil && !errors.Is(err, errNoCredentialHelperConfigured) {
return docker.Credentials{}, err
if err != nil {

// This shouldn't be fatal error.
if strings.Contains(err.Error(), "not implemented") {
fmt.Fprintf(os.Stderr, "the cred-helper does not support write operation (consider changing the cred-helper it in auth.json)\n")
return docker.Credentials{}, nil
}

if !errors.Is(err, errNoCredentialHelperConfigured) {
return docker.Credentials{}, err
}
}
}
return result, nil
Expand Down

0 comments on commit 8050597

Please sign in to comment.