WeKnora deployment source with the reviewed wiki identity, summary and recovery fixes
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
package sandbox
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// DetectLocalDockerHost returns the daemon endpoint the Docker CLI would use
|
||||
// on this machine when the workspace config leaves the host blank: DOCKER_HOST
|
||||
// first, then the current docker context, then DefaultDockerHost.
|
||||
//
|
||||
// /var/run/docker.sock is the Linux default and is often absent on macOS
|
||||
// (Colima, Docker Desktop, OrbStack each expose a socket under $HOME). An
|
||||
// operator who can run `docker ps` should not have to copy that path into
|
||||
// the settings form.
|
||||
func DetectLocalDockerHost() string {
|
||||
if host := strings.TrimSpace(os.Getenv("DOCKER_HOST")); host != "" {
|
||||
return host
|
||||
}
|
||||
if host := dockerCLIContextHost(); host != "" {
|
||||
return host
|
||||
}
|
||||
return DefaultDockerHost
|
||||
}
|
||||
|
||||
func dockerCLIContextHost() string {
|
||||
configDir := strings.TrimSpace(os.Getenv("DOCKER_CONFIG"))
|
||||
if configDir == "" {
|
||||
home, err := os.UserHomeDir()
|
||||
if err != nil || home == "" {
|
||||
return ""
|
||||
}
|
||||
configDir = filepath.Join(home, ".docker")
|
||||
}
|
||||
|
||||
name := strings.TrimSpace(os.Getenv("DOCKER_CONTEXT"))
|
||||
if name == "" {
|
||||
name = dockerCurrentContextName(configDir)
|
||||
}
|
||||
if name == "" || name == "default" {
|
||||
return ""
|
||||
}
|
||||
|
||||
entries, err := os.ReadDir(filepath.Join(configDir, "contexts", "meta"))
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
for _, entry := range entries {
|
||||
if !entry.IsDir() {
|
||||
continue
|
||||
}
|
||||
host := dockerContextHost(
|
||||
filepath.Join(configDir, "contexts", "meta", entry.Name(), "meta.json"),
|
||||
name,
|
||||
)
|
||||
if host != "" {
|
||||
return host
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func dockerCurrentContextName(configDir string) string {
|
||||
body, err := os.ReadFile(filepath.Join(configDir, "config.json"))
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
var parsed struct {
|
||||
CurrentContext string `json:"currentContext"`
|
||||
}
|
||||
if err := json.Unmarshal(body, &parsed); err != nil {
|
||||
return ""
|
||||
}
|
||||
return strings.TrimSpace(parsed.CurrentContext)
|
||||
}
|
||||
|
||||
func dockerContextHost(metaPath, wantName string) string {
|
||||
body, err := os.ReadFile(metaPath)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
var parsed struct {
|
||||
Name string `json:"Name"`
|
||||
Endpoints map[string]struct {
|
||||
Host string `json:"Host"`
|
||||
} `json:"Endpoints"`
|
||||
}
|
||||
if err := json.Unmarshal(body, &parsed); err != nil {
|
||||
return ""
|
||||
}
|
||||
if parsed.Name != wantName {
|
||||
return ""
|
||||
}
|
||||
if parsed.Endpoints == nil {
|
||||
return ""
|
||||
}
|
||||
return strings.TrimSpace(parsed.Endpoints["docker"].Host)
|
||||
}
|
||||
Reference in New Issue
Block a user