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
54 lines
1.2 KiB
Go
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))
|
|
})
|