fix: don't export from within function
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details

Also, don't explode on command function which has "export" in the name!

See coop-cloud/organising#498
This commit is contained in:
decentral1se 2023-10-04 02:29:59 +02:00
parent 970ae0fc4e
commit 379915587c
Signed by: decentral1se
GPG Key ID: 03789458B3D0C410
2 changed files with 50 additions and 7 deletions

View File

@ -8,6 +8,7 @@ import (
"os"
"path"
"path/filepath"
"regexp"
"strings"
"github.com/Autonomic-Cooperative/godotenv"
@ -149,22 +150,32 @@ func ReadAbraShEnvVars(abraSh string) (map[string]string, error) {
}
return envVars, err
}
defer file.Close()
exportRegex, err := regexp.Compile(`^export\s+(\w+=\w+)`)
if err != nil {
return envVars, err
}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
if strings.Contains(line, "export") {
splitVals := strings.Split(line, "export ")
txt := scanner.Text()
if exportRegex.MatchString(txt) {
splitVals := strings.Split(txt, "export ")
envVarDef := splitVals[len(splitVals)-1]
keyVal := strings.Split(envVarDef, "=")
if len(keyVal) != 2 {
return envVars, fmt.Errorf("couldn't parse %s", line)
return envVars, fmt.Errorf("couldn't parse %s", txt)
}
envVars[keyVal[0]] = keyVal[1]
}
}
logrus.Debugf("read %s from %s", envVars, abraSh)
if len(envVars) > 0 {
logrus.Debugf("read %s from %s", envVars, abraSh)
} else {
logrus.Debugf("read 0 env var exports from %s", abraSh)
}
return envVars, nil
}

View File

@ -46,8 +46,6 @@ var ExpectedAppFiles = map[string]config.AppFile{
AppName: ExpectedAppFile,
}
// var expectedServerNames = []string{"evil.corp"}
func TestGetAllFoldersInDirectory(t *testing.T) {
folders, err := config.GetAllFoldersInDirectory(TestFolder)
if err != nil {
@ -87,3 +85,37 @@ func TestReadEnv(t *testing.T) {
)
}
}
func TestReadAbraShEnvVars(t *testing.T) {
if err := catalogue.EnsureCatalogue(); err != nil {
t.Fatal(err)
}
offline := true
r, err := recipe.Get("abra-integration-test-recipe", offline)
if err != nil {
t.Fatal(err)
}
abraShPath := fmt.Sprintf("%s/%s/%s", config.RECIPES_DIR, r.Name, "abra.sh")
abraShEnv, err := config.ReadAbraShEnvVars(abraShPath)
if err != nil {
t.Fatal(err)
}
if len(abraShEnv) == 0 {
t.Error("at least one env var should be exported")
}
if _, ok := abraShEnv["INNER_FOO"]; ok {
t.Error("INNER_FOO should not be exported")
}
if _, ok := abraShEnv["INNER_BAZ"]; ok {
t.Error("INNER_BAZ should not be exported")
}
if _, ok := abraShEnv["OUTER_FOO"]; !ok {
t.Error("OUTER_FOO should be exported")
}
}