Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions gitclone/output.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,22 @@ func (e *OutputExporter) gitOutputs(gitRef string, isPR bool) []gitOutput {
return outputs
}

func trimEnv(logger log.Logger, envKey string, envValue string, maxEnvLength int) string {
if len(envValue) <= maxEnvLength {
return envValue
}

if maxEnvLength <= len(trimEnding) {
logger.Warnf("Maximum env length size (%d) is too small to fit anything, setting %s to '%s'", maxEnvLength, envKey, trimEnding)
return trimEnding
}

tv := envValue[:maxEnvLength-len(trimEnding)] + trimEnding
logger.Printf("Value %s is bigger than maximum env variable size, trimming", envKey)

return tv
}

func (e *OutputExporter) printLogAndExportEnv(command *v1command.Model, env string, maxEnvLength int) error {
runner.PausePerformanceMonitoring()
defer runner.ResumePerformanceMonitoring()
Expand All @@ -120,10 +136,8 @@ func (e *OutputExporter) printLogAndExportEnv(command *v1command.Model, env stri
return fmt.Errorf("command failed: %s", err)
}

if (env == "GIT_CLONE_COMMIT_MESSAGE_SUBJECT" || env == "GIT_CLONE_COMMIT_MESSAGE_BODY") && len(l) > maxEnvLength {
tv := l[:maxEnvLength-len(trimEnding)] + trimEnding
e.logger.Printf("Value %s is bigger than maximum env variable size, trimming", env)
l = tv
if env == "GIT_CLONE_COMMIT_MESSAGE_SUBJECT" || env == "GIT_CLONE_COMMIT_MESSAGE_BODY" {
l = trimEnv(e.logger, env, l, maxEnvLength)
}

e.logger.Printf("=> %s\n value: %s", env, l)
Expand Down
40 changes: 40 additions & 0 deletions gitclone/output_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,43 @@ func Test_gitOutputs(t *testing.T) {
})
}
}

func Test_trimEnv(t *testing.T) {
logger := log.NewLogger()
tests := []struct {
name string
envKey string
envValue string
maxEnvLength int
want string
}{
{
name: "long value, trimmed",
envKey: "TEST_ENV",
envValue: "Short value",
maxEnvLength: 20,
want: "Short value",
},
{
name: "long value, trimmed",
envKey: "TEST_ENV",
envValue: "Somewhat long value that exceeds the limit",
maxEnvLength: 6,
want: "Som...",
},
{
name: "max env length smaller than trimEnding length",
envKey: "TEST_ENV",
envValue: "Somewhat long value that exceeds the limit",
maxEnvLength: 0,
want: "...",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := trimEnv(logger, tt.envKey, tt.envValue, tt.maxEnvLength); got != tt.want {
t.Errorf("trimEnv() = %v, want %v", got, tt.want)
}
})
}
}