Skip to content

Commit 59f84be

Browse files
authored
feat(worker): multiline job variable to one line environment variable (#6071)
1 parent c7080c4 commit 59f84be

File tree

4 files changed

+31
-8
lines changed

4 files changed

+31
-8
lines changed

engine/worker/internal/types.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ func (wk *CurrentWorker) Environ() []string {
295295
if v == "" {
296296
continue
297297
}
298-
newEnv = append(newEnv, k+"="+v)
298+
newEnv = append(newEnv, k+"="+sdk.OneLineValue(v))
299299
}
300300

301301
//set up environment variables from pipeline build job parameters
@@ -313,19 +313,19 @@ func (wk *CurrentWorker) Environ() []string {
313313
envName := strings.Replace(p.Name, ".", "_", -1)
314314
envName = strings.Replace(envName, "-", "_", -1)
315315
envName = strings.ToUpper(envName)
316-
newEnv = append(newEnv, fmt.Sprintf("%s=%s", envName, p.Value))
316+
newEnv = append(newEnv, fmt.Sprintf("%s=%s", envName, sdk.OneLineValue(p.Value)))
317317
}
318318

319319
for _, p := range wk.currentJob.newVariables {
320320
envName := strings.Replace(p.Name, ".", "_", -1)
321321
envName = strings.Replace(envName, "-", "_", -1)
322322
envName = strings.ToUpper(envName)
323-
newEnv = append(newEnv, fmt.Sprintf("%s=%s", envName, p.Value))
323+
newEnv = append(newEnv, fmt.Sprintf("%s=%s", envName, sdk.OneLineValue(p.Value)))
324324
}
325325

326326
//Set env variables from hooks
327327
for k, v := range wk.currentJob.envFromHooks {
328-
newEnv = append(newEnv, k+"="+v)
328+
newEnv = append(newEnv, k+"="+sdk.OneLineValue(v))
329329
}
330330
return newEnv
331331
}

sdk/blur_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ func TestBlur(t *testing.T) {
1919
`"1234567890`,
2020
"12345",
2121
"123456",
22+
"123\n456",
2223
})
2324
require.NoError(t, err)
2425

@@ -28,6 +29,7 @@ func TestBlur(t *testing.T) {
2829
require.Equal(t, sdk.PasswordPlaceholder, b.String(`&é'"'"'(§è!çà`))
2930
require.Equal(t, sdk.PasswordPlaceholder, b.String(url.QueryEscape("&é'(§è!çà")))
3031
require.Equal(t, sdk.PasswordPlaceholder, b.String(base64.StdEncoding.EncodeToString([]byte("&é'(§è!çà"))))
32+
require.Equal(t, sdk.PasswordPlaceholder, b.String("123\\n456"))
3133

3234
buf, err := json.Marshal(`"1234567890`)
3335
require.NoError(t, err)

sdk/variable.go

+13-4
Original file line numberDiff line numberDiff line change
@@ -232,11 +232,20 @@ func EnvVartoENV(p Parameter) []string {
232232

233233
pName := strings.TrimPrefix(p.Name, "cds.env.")
234234

235+
oneLineValue := OneLineValue(p.Value)
236+
235237
envName := strings.Replace(pName, ".", "_", -1)
236238
envName = strings.Replace(envName, "-", "_", -1)
237-
env = append(env, fmt.Sprintf("CDS_ENV_%s=%s", strings.ToUpper(envName), p.Value)) // CDS_ENV_MYSTRINGVARIABLE
238-
env = append(env, fmt.Sprintf("CDS_ENV_%s=%s", pName, p.Value)) //CDS_ENV_MyStringVariable
239-
env = append(env, fmt.Sprintf("%s=%s", pName, p.Value)) // MyStringVariable
240-
env = append(env, fmt.Sprintf("%s=%s", strings.ToUpper(envName), p.Value)) // MYSTRINGVARIABLE
239+
env = append(env, fmt.Sprintf("CDS_ENV_%s=%s", strings.ToUpper(envName), oneLineValue)) // CDS_ENV_MYSTRINGVARIABLE
240+
env = append(env, fmt.Sprintf("CDS_ENV_%s=%s", pName, oneLineValue)) //CDS_ENV_MyStringVariable
241+
env = append(env, fmt.Sprintf("%s=%s", pName, oneLineValue)) // MyStringVariable
242+
env = append(env, fmt.Sprintf("%s=%s", strings.ToUpper(envName), oneLineValue)) // MYSTRINGVARIABLE
241243
return env
242244
}
245+
246+
func OneLineValue(v string) string {
247+
if strings.Contains(v, "\n") {
248+
return strings.Replace(v, "\n", "\\n", -1)
249+
}
250+
return v
251+
}

sdk/variable_test.go

+12
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@ func Test_EnvVartoENV(t *testing.T) {
4949
"MY_STRING_VARIABLE=value",
5050
},
5151
},
52+
{
53+
args: sdk.Parameter{
54+
Name: "cds.env.MyTextVariable",
55+
Value: "one=one\ntwo=two\nthree=three",
56+
},
57+
want: []string{
58+
"CDS_ENV_MYTEXTVARIABLE=one=one\\ntwo=two\\nthree=three",
59+
"CDS_ENV_MyTextVariable=one=one\\ntwo=two\\nthree=three",
60+
"MyTextVariable=one=one\\ntwo=two\\nthree=three",
61+
"MYTEXTVARIABLE=one=one\\ntwo=two\\nthree=three",
62+
},
63+
},
5264
}
5365
for _, tt := range tests {
5466
t.Run(tt.name, func(t *testing.T) {

0 commit comments

Comments
 (0)