This is an automated email from the ASF dual-hosted git repository.
zhongxjian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-kubernetes.git
The following commit(s) were added to refs/heads/master by this push:
new eae35967 [dubboctl] Change docker login option and other chore (#753)
eae35967 is described below
commit eae359677f1c474512992bf14cf42505cfd42067
Author: Jian Zhong <[email protected]>
AuthorDate: Tue Jul 22 00:52:49 2025 +0800
[dubboctl] Change docker login option and other chore (#753)
---
.asf.yaml | 2 ++
README.md | 13 ++------
dubboctl/cmd/root.go | 21 ++++++++----
dubboctl/cmd/seek.go | 17 ++++++++++
dubboctl/pkg/chat/openai.go | 17 ++++++++++
dubboctl/pkg/hub/credentials/prompt/prompt.go | 48 +++++++++++++++++++++++++++
6 files changed, 102 insertions(+), 16 deletions(-)
diff --git a/.asf.yaml b/.asf.yaml
index 5852d510..933e7253 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -38,3 +38,5 @@ github:
- kubernetes
- microservices
- service-mesh
+ - proxyless
+ - ai
diff --git a/README.md b/README.md
index a933c4d4..f56678c3 100644
--- a/README.md
+++ b/README.md
@@ -2,27 +2,20 @@
The Dubbo Kubernetes Integration
</h1>
-[](https://github.com/apache/dubbo-kubernetes/actions/workflows/ci.yml)
-[](https://codecov.io/gh/apache/dubbo-kubernetes)

-Provides observability features and supporting tools for building and
deploying Dubbo applications in various environments, including Kubernetes and
Alibaba Cloud ACK.
+Provides support for building and deploying Dubbo applications in various
environments, including Kubernetes and Alibaba Cloud ACK.
## Repositories
The main code repositories of Dubbo on Kubernetes include:
- [dubboctl](dubboctl/). This directory contains code for the command line
utility.
-- [admin](app/). This directory contains code for the
-[dubbo admin
dashboard](https://github.com/apache/dubbo-kubernetes/blob/master/app/README.md).
-
-
+- [operator](operator/). Dubbo operator provides user friendly options to
operate the Dubbo proxyless mesh
+- [helm-charts](manifests/charts). This directory contains the [Helm
chart](https://github.com/apache/dubbo-helm-charts) sources, which are
versioned, built, and pushed to the following Helm repositories with each Dubbo
release.
## Quick Start
Please refer to [official
website](https://cn.dubbo.apache.org/zh-cn/overview/home/)
-## Roadmap
-Kubernetes mode support and proxyless mesh development.
-
## Contributing
Refer to
[CONTRIBUTING.md](https://github.com/apache/dubbo-kubernetes/blob/master/CONTRIBUTING.md)
diff --git a/dubboctl/cmd/root.go b/dubboctl/cmd/root.go
index b73a1ed4..25341821 100644
--- a/dubboctl/cmd/root.go
+++ b/dubboctl/cmd/root.go
@@ -19,6 +19,7 @@ package cmd
import (
"flag"
+ "fmt"
"github.com/apache/dubbo-kubernetes/dubboctl/pkg/cli"
"github.com/apache/dubbo-kubernetes/dubboctl/pkg/hub/builder/pack"
"github.com/apache/dubbo-kubernetes/dubboctl/pkg/hub/credentials"
@@ -33,7 +34,6 @@ import (
"github.com/spf13/cobra"
"net/http"
"os"
- // "os"
)
const ChartFlag = "charts"
@@ -69,11 +69,20 @@ func newTransport(insecureSkipVerify bool)
pusher.RoundTripCloser {
}
func newCredentialsProvider(configPath string, t http.RoundTripper)
pusher.CredentialsProvider {
- options := []credentials.Opt{
-
credentials.WithPromptForCredentials(prompt.NewPromptForCredentials(os.Stdin,
os.Stdout, os.Stderr)),
-
credentials.WithPromptForCredentialStore(prompt.NewPromptForCredentialStore()),
- credentials.WithTransport(t),
- }
+ options := []credentials.Opt{}
+
+ options = append(options,
credentials.WithPromptForCredentials(func(registry string) (pusher.Credentials,
error) {
+ if creds, err := prompt.GetDockerAuth(registry); err == nil {
+ fmt.Fprintf(os.Stderr, "Using Docker credentials for
registry: %s\n", registry)
+ return creds, nil
+ }
+ fmt.Fprintf(os.Stderr, "No saved Docker credentials found for
%s, prompting...\n", registry)
+ return prompt.NewPromptForCredentials(os.Stdin, os.Stdout,
os.Stderr)(registry)
+ }))
+
+ options = append(options,
credentials.WithPromptForCredentialStore(prompt.NewPromptForCredentialStore()))
+ options = append(options, credentials.WithTransport(t))
+
return credentials.NewCredentialsProvider(configPath, options...)
}
diff --git a/dubboctl/cmd/seek.go b/dubboctl/cmd/seek.go
index 06392607..f558cd28 100644
--- a/dubboctl/cmd/seek.go
+++ b/dubboctl/cmd/seek.go
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package cmd
import (
diff --git a/dubboctl/pkg/chat/openai.go b/dubboctl/pkg/chat/openai.go
index af2f2784..fdbe154c 100644
--- a/dubboctl/pkg/chat/openai.go
+++ b/dubboctl/pkg/chat/openai.go
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package chat
import llmopenai "github.com/tmc/langchaingo/llms/openai"
diff --git a/dubboctl/pkg/hub/credentials/prompt/prompt.go
b/dubboctl/pkg/hub/credentials/prompt/prompt.go
index 5d422d5e..8ee705a6 100644
--- a/dubboctl/pkg/hub/credentials/prompt/prompt.go
+++ b/dubboctl/pkg/hub/credentials/prompt/prompt.go
@@ -19,6 +19,7 @@ package prompt
import (
"bufio"
+ "encoding/base64"
"fmt"
"github.com/AlecAivazis/survey/v2"
"github.com/AlecAivazis/survey/v2/terminal"
@@ -27,6 +28,7 @@ import (
"golang.org/x/term"
"io"
"os"
+ "path/filepath"
"strings"
)
@@ -147,3 +149,49 @@ you can install docker credential helper
https://github.com/docker/docker-creden
return resp, nil
}
}
+
+func GetDockerAuth(registry string) (pusher.Credentials, error) {
+ configFile := filepath.Join(os.Getenv("HOME"), ".docker", "config.json")
+ data, err := os.ReadFile(configFile)
+ if err != nil {
+ return pusher.Credentials{}, err
+ }
+
+ var config struct {
+ Auths map[string]struct {
+ Auth string `json:"auth"`
+ } `json:"auths"`
+ }
+
+ if err := json.Unmarshal(data, &config); err != nil {
+ return pusher.Credentials{}, err
+ }
+
+ // Define lookup order
+ lookupKeys := []string{
+ registry,
+ "https://" + registry,
+ "https://" + registry + "/v1/",
+ }
+
+ // Docker Hub special case
+ if registry == "index.docker.io" {
+ lookupKeys = append(lookupKeys, "https://index.docker.io/v1/")
+ }
+
+ for _, key := range lookupKeys {
+ if entry, ok := config.Auths[key]; ok {
+ decoded, err :=
base64.StdEncoding.DecodeString(entry.Auth)
+ if err != nil {
+ return pusher.Credentials{}, fmt.Errorf("failed
to decode credentials: %w", err)
+ }
+ parts := strings.SplitN(string(decoded), ":", 2)
+ if len(parts) != 2 {
+ return pusher.Credentials{},
fmt.Errorf("invalid credentials format for %s", key)
+ }
+ return pusher.Credentials{Username: parts[0], Password:
parts[1]}, nil
+ }
+ }
+
+ return pusher.Credentials{}, fmt.Errorf("no credentials found for
registry: %s", registry)
+}