From 36c555ea61240892ee4d230117c5bccaff4bcbfc Mon Sep 17 00:00:00 2001 From: Ivan Nikiforov Date: Wed, 16 Oct 2024 13:45:23 +0200 Subject: [PATCH] fix: too long string written to cpe git.commitMessage (#5147) * fix too long CPE string written to git/commitMessage * Add debug log * Fix debug log * Truncate long git commit message title * Add tests for truncateString * Fix test * Fix tests * Fix tests --------- Co-authored-by: Ivan Nikiforov --- cmd/artifactPrepareVersion.go | 17 ++++++++++++++++- cmd/artifactPrepareVersion_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/cmd/artifactPrepareVersion.go b/cmd/artifactPrepareVersion.go index 173a693da..4c7f77320 100644 --- a/cmd/artifactPrepareVersion.go +++ b/cmd/artifactPrepareVersion.go @@ -237,7 +237,13 @@ func runArtifactPrepareVersion(config *artifactPrepareVersionOptions, telemetryD commonPipelineEnvironment.git.commitID = gitCommitID // this commitID changes and is not necessarily the HEAD commitID commonPipelineEnvironment.artifactVersion = newVersion commonPipelineEnvironment.originalArtifactVersion = version - commonPipelineEnvironment.git.commitMessage = gitCommitMessage + + gitCommitMessages := strings.Split(gitCommitMessage, "\n") + commitMessage := truncateString(gitCommitMessages[0], 50) // Github recommends to keep commit message title less than 50 chars + + commonPipelineEnvironment.git.commitMessage = commitMessage + + log.Entry().Debug("CPE git commitMessage:", commitMessage) // we may replace GetVersion() above with GetCoordinates() at some point ... coordinates, err := artifact.GetCoordinates() @@ -254,6 +260,15 @@ func runArtifactPrepareVersion(config *artifactPrepareVersionOptions, telemetryD return nil } +func truncateString(str string, maxLength int) string { + chars := []rune(str) + + if len(chars) > maxLength { + return string(chars[:maxLength]) + "..." + } + return str +} + func openGit() (gitRepository, error) { workdir, _ := os.Getwd() return gitUtils.PlainOpen(workdir) diff --git a/cmd/artifactPrepareVersion_test.go b/cmd/artifactPrepareVersion_test.go index 9d42f44dd..919986582 100644 --- a/cmd/artifactPrepareVersion_test.go +++ b/cmd/artifactPrepareVersion_test.go @@ -887,3 +887,33 @@ func TestPropagateVersion(t *testing.T) { assert.Contains(t, fmt.Sprint(err), "failed to retrieve artifact") }) } + +func TestTruncateString(t *testing.T) { + t.Run("input string longer than maxLength - truncate", func(t *testing.T) { + inputStr := "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor" + expected := "Lorem ipsum dolor sit amet, consectetur adipiscing..." + + outputStr := truncateString(inputStr, 50) + assert.Equal(t, outputStr, expected) + }) + + t.Run("input string shorter than maxLength - return as is", func(t *testing.T) { + inputStr := "Lorem ipsum dolor sit amet" + outputStr := truncateString(inputStr, 50) + + assert.Equal(t, outputStr, inputStr) + }) + + t.Run("input string contains unicode chars", func(t *testing.T) { + inputStr := "パイパーは素晴らしい図書館です" + expected := "パイパーは..." + + outputStr := truncateString(inputStr, 5) + assert.Equal(t, outputStr, expected) + }) + + t.Run("input string is empty", func(t *testing.T) { + outputStr := truncateString("", 5) + assert.Equal(t, outputStr, "") + }) +}