fix: context handling
All checks were successful
Release Secrets Manager Action / build (push) Successful in 1m10s

This commit is contained in:
Marcel S. Henselin 2026-05-13 13:04:55 +02:00
parent c302a35868
commit dbae38d884

65
main.go
View file

@ -1,14 +1,15 @@
package main
import (
"bufio"
"context"
"fmt"
"log"
"os"
"strings"
"secretsmanager/config"
"secretsmanager/secretsmanager"
"sort"
"strings"
"github.com/caarlos0/env/v11"
"github.com/joho/godotenv"
@ -38,37 +39,65 @@ func main() {
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)
}
dataSorted, err := sortMap(data)
if err != nil {
log.Fatalf("Error sorting secrets: %s", err)
}
err = exportToPipeline(dataSorted)
if err != nil {
log.Fatalf("error exporting secret to pipeline: %s", err)
}
}
func exportToPipeline(key string, value interface{}) error {
func sortMap(data map[string]interface{}) (map[string]interface{}, error) {
keys := make([]string, len(data))
for k := range data {
keys = append(keys, k)
}
sort.Strings(keys)
result := make(map[string]interface{})
for _, k := range keys {
result[k] = data[k]
}
return result, nil
}
func exportToPipeline(data map[string]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)
f, err := os.OpenFile(outputFile, os.O_APPEND|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)
w := bufio.NewWriter(f)
for key, value := range data {
if key == "" || value == nil {
continue
}
var outputString string
outputString = fmt.Sprintf("%s=%v\n", key, value)
if s, ok := value.(string); ok {
if strings.Contains(s, "\n") {
delimiter := "EOF"
outputString = fmt.Sprintf("%s=<<%s\n%s\n%s\n", key, delimiter, value, delimiter)
}
}
if _, err := w.WriteString(outputString); err != nil {
return fmt.Errorf("failed writing to GITHUB_OUTPUT: %w", err)
}
}
if _, err := f.WriteString(outputString); err != nil {
return fmt.Errorf("failed writing to GITHUB_OUTPUT: %w", err)
err = w.Flush()
if err != nil {
return err
}
return nil
}