Sequencer is working (minimal parsing)

This commit is contained in:
Krypto Kajun
2025-09-14 06:21:10 -05:00
parent 7dd5b5b692
commit 518758790a
59 changed files with 10539 additions and 471 deletions

View File

@@ -1,9 +1,13 @@
package config
import (
"fmt"
"os"
"regexp"
"strconv"
"strings"
"gopkg.in/yaml.v3"
)
@@ -117,9 +121,12 @@ func Load(filename string) (*Config, error) {
return nil, fmt.Errorf("failed to read config file: %w", err)
}
// Expand environment variables in the raw YAML
expandedData := expandEnvVars(string(data))
// Parse the YAML
var config Config
if err := yaml.Unmarshal(data, &config); err != nil {
if err := yaml.Unmarshal([]byte(expandedData), &config); err != nil {
return nil, fmt.Errorf("failed to parse config file: %w", err)
}
@@ -129,6 +136,33 @@ func Load(filename string) (*Config, error) {
return &config, nil
}
// expandEnvVars expands ${VAR} and $VAR patterns in the given string
func expandEnvVars(s string) string {
// Pattern to match ${VAR} and $VAR
envVarPattern := regexp.MustCompile(`\$\{([^}]+)\}|\$([A-Za-z_][A-Za-z0-9_]*)`)
return envVarPattern.ReplaceAllStringFunc(s, func(match string) string {
var varName string
// Handle ${VAR} format
if strings.HasPrefix(match, "${") && strings.HasSuffix(match, "}") {
varName = match[2 : len(match)-1]
} else if strings.HasPrefix(match, "$") {
// Handle $VAR format
varName = match[1:]
}
// Get environment variable value
if value := os.Getenv(varName); value != "" {
return value
}
// Return empty string if environment variable is not set
// This prevents invalid YAML when variables are missing
return ""
})
}
// OverrideWithEnv overrides configuration with environment variables
func (c *Config) OverrideWithEnv() {
// Override RPC endpoint