diff options
author | Tyler Cipriani <tcipriani@wikimedia.org> | 2017-09-08 10:37:06 -0600 |
---|---|---|
committer | Tyler Cipriani <tcipriani@wikimedia.org> | 2017-09-11 11:33:14 -0600 |
commit | 4e5c728eec5a8d7a3f4297de6b5c1503bdffd5d0 (patch) | |
tree | 23f8a6583cdbc1acce04cd55360542dbb9ad2a22 /docker | |
parent | b25e7c6b661cf614502289922671c18d70864c6e (diff) | |
download | blubber-4e5c728eec5a8d7a3f4297de6b5c1503bdffd5d0.tar.gz |
Recursive variant expansion
Summary:
Problem running blubber cfg.yml test with this config:
```
base: nodejs-slim
variants:
build:
base: nodejs-devel
development:
includes: [build]
entrypoint: [npm, start]
test:
includes: [development]
entrypoint: [npm, test]
```
yields a Dockerfile with `FROM nodejs-slim`; however, I expected that
the base would be `nodejs-devel` since `test` inherits from
`development` which inherits from `build`.
In order for this to work as expected we have to recursively expand
variants as in this patch.
Reviewers: dduvall, #release-engineering-team
Reviewed By: dduvall, #release-engineering-team
Tags: #release-engineering-team
Differential Revision: https://phabricator.wikimedia.org/D773
Diffstat (limited to 'docker')
-rw-r--r-- | docker/compiler.go | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/docker/compiler.go b/docker/compiler.go index c9ca0fb..d7043a0 100644 --- a/docker/compiler.go +++ b/docker/compiler.go @@ -2,6 +2,7 @@ package docker import ( "bytes" + "log" "strings" "phabricator.wikimedia.org/source/blubber.git/build" @@ -13,23 +14,25 @@ func Compile(cfg *config.Config, variant string) *bytes.Buffer { vcfg, err := config.ExpandVariant(cfg, variant) - if err == nil { - // omit the main stage name unless multi-stage is required below - mainStage := "" + if err != nil { + log.Fatal(err) + } - // write multi-stage sections for each variant dependency - for _, stage := range vcfg.VariantDependencies() { - dependency, err := config.ExpandVariant(cfg, stage) + // omit the main stage name unless multi-stage is required below + mainStage := "" - if err == nil { - CompileStage(buffer, stage, dependency) - mainStage = variant - } - } + // write multi-stage sections for each variant dependency + for _, stage := range vcfg.VariantDependencies() { + dependency, err := config.ExpandVariant(cfg, stage) - CompileStage(buffer, mainStage, vcfg) + if err == nil { + CompileStage(buffer, stage, dependency) + mainStage = variant + } } + CompileStage(buffer, mainStage, vcfg) + return buffer } |