diff --git a/gitclone/output.go b/gitclone/output.go index 0fce5a2..55bfab8 100644 --- a/gitclone/output.go +++ b/gitclone/output.go @@ -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() @@ -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) diff --git a/gitclone/output_test.go b/gitclone/output_test.go index d61734e..99aadc1 100644 --- a/gitclone/output_test.go +++ b/gitclone/output_test.go @@ -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) + } + }) + } +}