github.com/wunderio/silta-cli@v0.0.0-20240508100559-3017e4ab3a20/internal/common/ciReleaseEnvironmentname.go (about) 1 package common 2 3 import ( 4 "crypto/sha256" 5 "fmt" 6 "strings" 7 ) 8 9 func SiltaEnvironmentName(branchname string, releaseSuffix string) string { 10 // Lowercase without special characters. 11 siltaEnvironmentName := strings.ToLower(branchname) 12 13 suffix := "" 14 if len(releaseSuffix+siltaEnvironmentName) > 39 { 15 suffix = releaseSuffix 16 17 if len(suffix) > 12 { 18 sha256_hash := fmt.Sprintf("%x", sha256.Sum256([]byte(suffix))) 19 suffix = fmt.Sprintf("%s-%s", suffix[0:7], sha256_hash[0:4]) 20 } 21 22 // Maximum length of a release name + release suffix. -1 is for separating '-' char before suffix 23 rn_max_length := 40 - len(suffix) - 1 24 25 // Length of a shortened rn_max_length to allow for an appended hash 26 rn_cut_length := rn_max_length - 5 27 28 // # If name is too long, truncate it and append a hash 29 if len(siltaEnvironmentName) >= rn_max_length { 30 sha256_hash := fmt.Sprintf("%x", sha256.Sum256([]byte(siltaEnvironmentName))) 31 siltaEnvironmentName = fmt.Sprintf("%s-%s", siltaEnvironmentName[0:rn_cut_length], sha256_hash[0:4]) 32 } 33 } 34 35 if len(releaseSuffix) > 0 { 36 if len(suffix) > 0 { 37 // Using suffix variable for release name 38 siltaEnvironmentName = fmt.Sprintf("%s-%s", siltaEnvironmentName, suffix) 39 } else { 40 // Using parameter for release name 41 siltaEnvironmentName = fmt.Sprintf("%s-%s", siltaEnvironmentName, releaseSuffix) 42 } 43 } 44 45 return siltaEnvironmentName 46 }