Files
wehub-resource-sync 75f3dd141c
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CI and Release / lint-frontend (push) Has been cancelled
CI and Release / dockerfile-scan (push) Has been cancelled
CI and Release / test-frontend (push) Has been cancelled
CI and Release / lint-verification-agent (push) Has been cancelled
CI and Release / test-verification-agent (push) Has been cancelled
CI and Release / e2e-verification-agent (push) Has been cancelled
CI and Release / test-backend (push) Has been cancelled
CI and Release / build-dev-image (push) Has been cancelled
CI and Release / push-dev-image (push) Has been cancelled
CI and Release / build-image (push) Has been cancelled
CI and Release / build-verification-image (push) Has been cancelled
CI and Release / determine-version (push) Has been cancelled
CI and Release / push-image (push) Has been cancelled
CI and Release / push-verification-image (12) (push) Has been cancelled
CI and Release / lint-backend (push) Has been cancelled
CI and Release / push-verification-image (17) (push) Has been cancelled
CI and Release / push-verification-image (18) (push) Has been cancelled
CI and Release / release (push) Has been cancelled
CI and Release / publish-helm-chart (push) Has been cancelled
CI and Release / push-verification-image (13) (push) Has been cancelled
CI and Release / push-verification-image (14) (push) Has been cancelled
CI and Release / push-verification-image (15) (push) Has been cancelled
CI and Release / push-verification-image (16) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:11:07 +08:00

54 lines
1.2 KiB
Go

package tools
import (
"fmt"
"os"
"path/filepath"
"runtime"
"sync"
)
// archAssetsKey returns the assets/tools/<key>/ subdirectory name for the
// current GOOS+GOARCH. Panics on unsupported combinations because the app
// cannot operate without DB client binaries.
func archAssetsKey() string {
if runtime.GOOS == "linux" {
if runtime.GOARCH == "arm64" {
return "arm"
}
return "x64"
}
panic(fmt.Sprintf("unsupported OS/arch for DB client tools: %s/%s",
runtime.GOOS, runtime.GOARCH))
}
// AssetsToolsDir returns the absolute path to assets/tools/<arch-key>/.
// Walks up from cwd looking for the directory. In Docker (cwd=/app) this
// resolves to /app/assets/tools/<arch-key>/.
var AssetsToolsDir = sync.OnceValue(func() string {
key := archAssetsKey()
cwd, err := os.Getwd()
if err != nil {
panic(fmt.Sprintf("could not get cwd: %v", err))
}
candidate := cwd
for {
path := filepath.Join(candidate, "assets", "tools", key)
if info, err := os.Stat(path); err == nil && info.IsDir() {
return path
}
parent := filepath.Dir(candidate)
if parent == candidate {
break
}
candidate = parent
}
panic(fmt.Sprintf("could not locate assets/tools/%s starting from %s", key, cwd))
})