package main import ( "fmt" "log" "os" "strings" "secretsmanager/config" "secretsmanager/secretsmanager" "github.com/caarlos0/env/v11" "github.com/joho/godotenv" ) func main() { err := godotenv.Load() if err != nil { log.Println(".env file not found, using regular environment variables") } var cfg config.Config err = env.Parse(&cfg) if err != nil { log.Fatalf("Error parsing environment variables %s", err) } cfg = config.ValidateConfig(cfg) s, err := secretsmanager.New(cfg) if err != nil { log.Fatalf("Error initializing secrets manager client: %s", err) } data, err := s.GetSecrets(cfg) if err != nil { log.Fatalf("Error retrieving secrets: %s", err) } for key, value := range data { err = exportToPipeline(key, value) if err != nil { log.Fatalf("error exporting secret to pipeline: %s", err) } } } func exportToPipeline(key string, value interface{}) error { outputFile := os.Getenv("GITHUB_OUTPUT") if outputFile == "" { return fmt.Errorf("env var GITHUB_OUTPUT not found (are we running in a pipeline?)") } f, err := os.OpenFile(outputFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { return fmt.Errorf("error opening GITHUB_OUTPUT: %w", err) } defer f.Close() var outputString string if s, ok := value.(string); ok { outputString = fmt.Sprintf("%s=%s\n", key, value) if strings.Contains(s, "\n") { delimiter := "EOF" outputString = fmt.Sprintf("%s=<<%s\n%s\n%s\n", key, delimiter, value, delimiter) } } if _, err := f.WriteString(outputString); err != nil { return fmt.Errorf("failed writing to GITHUB_OUTPUT: %w", err) } return nil }