36 lines
962 B
Go
36 lines
962 B
Go
|
package internal
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"regexp"
|
||
|
"runtime"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
var assetsPath string
|
||
|
|
||
|
func init() {
|
||
|
_, thisFile, _, ok := runtime.Caller(0)
|
||
|
if !ok {
|
||
|
panic("Could not determine the path of the BinPathFinder")
|
||
|
}
|
||
|
assetsPath = filepath.Join(filepath.Dir(thisFile), "..", "assets", "bin")
|
||
|
}
|
||
|
|
||
|
// BinPathFinder checks the an environment variable, derived from the symbolic name,
|
||
|
// and falls back to a default assets location when this variable is not set
|
||
|
func BinPathFinder(symbolicName string) (binPath string) {
|
||
|
punctuationPattern := regexp.MustCompile("[^A-Z0-9]+")
|
||
|
sanitizedName := punctuationPattern.ReplaceAllString(strings.ToUpper(symbolicName), "_")
|
||
|
leadingNumberPattern := regexp.MustCompile("^[0-9]+")
|
||
|
sanitizedName = leadingNumberPattern.ReplaceAllString(sanitizedName, "")
|
||
|
envVar := "TEST_ASSET_" + sanitizedName
|
||
|
|
||
|
if val, ok := os.LookupEnv(envVar); ok {
|
||
|
return val
|
||
|
}
|
||
|
|
||
|
return filepath.Join(assetsPath, symbolicName)
|
||
|
}
|