Skip to content

Commit 3baab48

Browse files
author
maks2134
committed
Address PR feedback: handle optional env files when present
- Process optional env files if they exist on disk (instead of skipping all) - Improve error message to mention "required env_file" for clarity - Add test coverage for optional env files that exist - Fix linting issues Signed-off-by: Maks Kozlov <[email protected]> Signed-off-by: maks2134 <[email protected]>
1 parent f1e4da7 commit 3baab48

File tree

4 files changed

+23
-9
lines changed

4 files changed

+23
-9
lines changed

pkg/compose/publish.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,9 @@ func processFile(ctx context.Context, file string, project *types.Project, extFi
252252
for name, service := range base.Services {
253253
for i, envFile := range service.EnvFiles {
254254
if !envFile.Required {
255-
continue
255+
if _, err := os.Stat(envFile.Path); os.IsNotExist(err) {
256+
continue
257+
}
256258
}
257259
hash := fmt.Sprintf("%x.env", sha256.Sum256([]byte(envFile.Path)))
258260
envFiles[envFile.Path] = hash
@@ -356,7 +358,7 @@ func (s *composeService) checkEnvironmentVariables(project *types.Project, optio
356358
for _, service := range project.Services {
357359
for _, envFile := range service.EnvFiles {
358360
if envFile.Required {
359-
errorList[service.Name] = append(errorList[service.Name], fmt.Sprintf("service %q has env_file declared.", service.Name))
361+
errorList[service.Name] = append(errorList[service.Name], fmt.Sprintf("service %q has required env_file declared.", service.Name))
360362
break
361363
}
362364
}
@@ -444,8 +446,11 @@ func (s *composeService) checkForSensitiveData(project *types.Project) ([]secret
444446
for _, service := range project.Services {
445447
// Check env files
446448
for _, envFile := range service.EnvFiles {
449+
// Skip optional env files that don't exist
447450
if !envFile.Required {
448-
continue
451+
if _, err := os.Stat(envFile.Path); os.IsNotExist(err) {
452+
continue
453+
}
449454
}
450455
findings, err := scan.ScanFile(envFile.Path)
451456
if err != nil {

pkg/compose/publish_test.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,21 @@ func Test_createLayers_withRequiredFalse(t *testing.T) {
121121
})
122122
assert.NilError(t, err)
123123

124-
assert.Equal(t, len(layers), 2)
124+
assert.Equal(t, len(layers), 3)
125125

126126
assert.Equal(t, layers[0].Annotations["com.docker.compose.file"], "compose-required-false.yaml")
127127

128128
assert.Equal(t, layers[1].MediaType, "application/vnd.docker.compose.envfile")
129+
assert.Equal(t, layers[2].MediaType, "application/vnd.docker.compose.envfile")
129130

130-
envFileHash := layers[1].Annotations["com.docker.compose.envfile"]
131-
assert.Assert(t, len(envFileHash) > 0)
132-
assert.Assert(t, envFileHash != "missing.env")
131+
envFileHashes := []string{
132+
layers[1].Annotations["com.docker.compose.envfile"],
133+
layers[2].Annotations["com.docker.compose.envfile"],
134+
}
135+
assert.Assert(t, envFileHashes[0] != "")
136+
assert.Assert(t, envFileHashes[1] != "")
137+
assert.Assert(t, envFileHashes[0] != "missing.env")
138+
assert.Assert(t, envFileHashes[1] != "missing.env")
133139
}
134140

135141
func Test_checkEnvironmentVariables_withRequiredFalse(t *testing.T) {
@@ -143,7 +149,7 @@ func Test_checkEnvironmentVariables_withRequiredFalse(t *testing.T) {
143149
Required: false,
144150
},
145151
{
146-
Path: "existing.env",
152+
Path: "existing.env",
147153
Required: true,
148154
},
149155
},
@@ -164,6 +170,6 @@ func Test_checkEnvironmentVariables_withRequiredFalse(t *testing.T) {
164170

165171
err := service.checkEnvironmentVariables(project, api.PublishOptions{})
166172
assert.Assert(t, err != nil)
167-
assert.Assert(t, strings.Contains(err.Error(), `service "test" has env_file declared.`))
173+
assert.Assert(t, strings.Contains(err.Error(), `service "test" has required env_file declared.`))
168174
assert.Assert(t, !strings.Contains(err.Error(), `service "test2"`))
169175
}

pkg/compose/testdata/publish/compose-required-false.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ services:
55
env_file:
66
- path: missing.env
77
required: false
8+
- path: optional.env
9+
required: false
810
- path: existing.env
911
required: true
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
OPTIONAL_VAR=value

0 commit comments

Comments
 (0)