Skip to content

Commit 918dbe8

Browse files
loader: read from file if ConfigFile.Content is empty (#315)
Fixes #314. Signed-off-by: Andy Walker <[email protected]>
1 parent 517cf49 commit 918dbe8

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

loader/loader.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,13 @@ func Load(configDetails types.ConfigDetails, options ...func(*Options)) (*types.
167167
for i, file := range configDetails.ConfigFiles {
168168
configDict := file.Config
169169
if configDict == nil {
170+
if len(file.Content) == 0 {
171+
content, err := os.ReadFile(file.Filename)
172+
if err != nil {
173+
return nil, err
174+
}
175+
file.Content = content
176+
}
170177
dict, err := parseConfig(file.Content, opts)
171178
if err != nil {
172179
return nil, err

loader/loader_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"bytes"
2121
"fmt"
2222
"os"
23+
"path/filepath"
2324
"sort"
2425
"strings"
2526
"testing"
@@ -270,6 +271,32 @@ func TestLoad(t *testing.T) {
270271
assert.Check(t, is.DeepEqual(sampleConfig.Volumes, actual.Volumes))
271272
}
272273

274+
func TestLoadFromFile(t *testing.T) {
275+
workingDir, err := os.Getwd()
276+
if err != nil {
277+
t.Fatalf("os.Getwd(): %s", err)
278+
}
279+
tmpdir := t.TempDir()
280+
tmpPath := filepath.Join(tmpdir, "Docker-compose.yaml")
281+
if err := os.WriteFile(tmpPath, []byte(sampleYAML), 0444); err != nil {
282+
t.Fatalf("failed to write temporary file: %s", err)
283+
}
284+
actual, err := Load(types.ConfigDetails{
285+
WorkingDir: workingDir,
286+
ConfigFiles: []types.ConfigFile{{
287+
Filename: tmpPath,
288+
}},
289+
Environment: nil,
290+
}, func(options *Options) {
291+
options.SkipNormalization = true
292+
options.SkipConsistencyCheck = true
293+
})
294+
assert.NilError(t, err)
295+
assert.Check(t, is.DeepEqual(serviceSort(sampleConfig.Services), serviceSort(actual.Services)))
296+
assert.Check(t, is.DeepEqual(sampleConfig.Networks, actual.Networks))
297+
assert.Check(t, is.DeepEqual(sampleConfig.Volumes, actual.Volumes))
298+
}
299+
273300
func TestLoadExtensions(t *testing.T) {
274301
actual, err := loadYAML(`
275302
services:

0 commit comments

Comments
 (0)