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  }