penguin/monok8s

k8s image for Mono Gateway Dev Kit

clitools/pkg/cmd/helpers.go

raw ยท 1044 bytes

package cmd

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func LoadEnvFile(path string) error {
	f, err := os.Open(path)
	if err != nil {
		return err
	}
	defer f.Close()

	scanner := bufio.NewScanner(f)
	lineNum := 0

	for scanner.Scan() {
		lineNum++
		line := strings.TrimSpace(scanner.Text())

		if line == "" || strings.HasPrefix(line, "#") {
			continue
		}

		key, val, ok := strings.Cut(line, "=")
		if !ok {
			return fmt.Errorf("line %d: expected KEY=VALUE", lineNum)
		}

		key = strings.TrimSpace(key)
		val = strings.TrimSpace(val)

		if key == "" {
			return fmt.Errorf("line %d: empty variable name", lineNum)
		}

		// Remove matching single or double quotes around the whole value.
		if len(val) >= 2 {
			if (val[0] == '"' && val[len(val)-1] == '"') || (val[0] == '\'' && val[len(val)-1] == '\'') {
				val = val[1 : len(val)-1]
			}
		}

		if err := os.Setenv(key, val); err != nil {
			return fmt.Errorf("line %d: set %q: %w", lineNum, key, err)
		}
	}

	if err := scanner.Err(); err != nil {
		return err
	}

	return nil
}