diff --git a/cli/command/image/push.go b/cli/command/image/push.go index e91189d92d..a875ac0d9f 100644 --- a/cli/command/image/push.go +++ b/cli/command/image/push.go @@ -74,6 +74,8 @@ Image index won't be pushed, meaning that other manifests, including attestation } // runPush performs a push against the engine based on the specified options. +// +//nolint:gocyclo // ignore cyclomatic complexity 17 of func `runPush` is high (> 16) for now. func runPush(ctx context.Context, dockerCli command.Cli, opts pushOptions) error { var platform *ocispec.Platform out := tui.NewOutput(dockerCli.Out()) @@ -113,7 +115,10 @@ To push the complete multi-platform image, remove the --platform flag. if err != nil { return err } - requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(dockerCli, repoInfo.Index, "push") + var requestPrivilege registrytypes.RequestAuthConfig + if dockerCli.In().IsTerminal() { + requestPrivilege = command.RegistryAuthenticationPrivilegedFunc(dockerCli, repoInfo.Index, "push") + } options := image.PushOptions{ All: opts.all, RegistryAuth: encodedAuth, diff --git a/cli/command/image/trust.go b/cli/command/image/trust.go index e224077a56..e2980e8477 100644 --- a/cli/command/image/trust.go +++ b/cli/command/image/trust.go @@ -149,7 +149,10 @@ func imagePullPrivileged(ctx context.Context, cli command.Cli, imgRefAndAuth tru if err != nil { return err } - requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(cli, imgRefAndAuth.RepoInfo().Index, "pull") + var requestPrivilege registrytypes.RequestAuthConfig + if cli.In().IsTerminal() { + requestPrivilege = command.RegistryAuthenticationPrivilegedFunc(cli, imgRefAndAuth.RepoInfo().Index, "pull") + } responseBody, err := cli.Client().ImagePull(ctx, reference.FamiliarString(imgRefAndAuth.Reference()), image.PullOptions{ RegistryAuth: encodedAuth, PrivilegeFunc: requestPrivilege, diff --git a/cli/command/plugin/install.go b/cli/command/plugin/install.go index f2004413b0..027478c0fc 100644 --- a/cli/command/plugin/install.go +++ b/cli/command/plugin/install.go @@ -90,13 +90,18 @@ func buildPullConfig(ctx context.Context, dockerCli command.Cli, opts pluginOpti return types.PluginInstallOptions{}, err } + var requestPrivilege registrytypes.RequestAuthConfig + if dockerCli.In().IsTerminal() { + requestPrivilege = command.RegistryAuthenticationPrivilegedFunc(dockerCli, repoInfo.Index, cmdName) + } + options := types.PluginInstallOptions{ RegistryAuth: encodedAuth, RemoteRef: remote, Disabled: opts.disable, AcceptAllPermissions: opts.grantPerms, AcceptPermissionsFunc: acceptPrivileges(dockerCli, opts.remote), - PrivilegeFunc: command.RegistryAuthenticationPrivilegedFunc(dockerCli, repoInfo.Index, cmdName), + PrivilegeFunc: requestPrivilege, Args: opts.args, } return options, nil diff --git a/cli/command/registry.go b/cli/command/registry.go index 4c630ff9e4..be49d85b6b 100644 --- a/cli/command/registry.go +++ b/cli/command/registry.go @@ -35,7 +35,7 @@ const ( const authConfigKey = "https://index.docker.io/v1/" // RegistryAuthenticationPrivilegedFunc returns a RequestPrivilegeFunc from the specified registry index info -// for the given command. +// for the given command to prompt the user for username and password. func RegistryAuthenticationPrivilegedFunc(cli Cli, index *registrytypes.IndexInfo, cmdName string) registrytypes.RequestAuthConfig { configKey := getAuthConfigKey(index.Name) isDefaultRegistry := configKey == authConfigKey || index.Official diff --git a/cli/command/registry/search.go b/cli/command/registry/search.go index d82ee32326..5007322fc8 100644 --- a/cli/command/registry/search.go +++ b/cli/command/registry/search.go @@ -63,7 +63,10 @@ func runSearch(ctx context.Context, dockerCli command.Cli, options searchOptions return err } - requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(dockerCli, indexInfo, "search") + var requestPrivilege registrytypes.RequestAuthConfig + if dockerCli.In().IsTerminal() { + requestPrivilege = command.RegistryAuthenticationPrivilegedFunc(dockerCli, indexInfo, "search") + } results, err := dockerCli.Client().ImageSearch(ctx, options.term, registrytypes.SearchOptions{ RegistryAuth: encodedAuth, PrivilegeFunc: requestPrivilege, diff --git a/cli/command/trust/sign.go b/cli/command/trust/sign.go index df97f04d32..077620155a 100644 --- a/cli/command/trust/sign.go +++ b/cli/command/trust/sign.go @@ -82,7 +82,10 @@ func runSignImage(ctx context.Context, dockerCLI command.Cli, options signOption return trust.NotaryError(imgRefAndAuth.RepoInfo().Name.Name(), err) } } - requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(dockerCLI, imgRefAndAuth.RepoInfo().Index, "push") + var requestPrivilege registrytypes.RequestAuthConfig + if dockerCLI.In().IsTerminal() { + requestPrivilege = command.RegistryAuthenticationPrivilegedFunc(dockerCLI, imgRefAndAuth.RepoInfo().Index, "push") + } target, err := createTarget(notaryRepo, imgRefAndAuth.Tag()) if err != nil || options.local { switch err := err.(type) {