summaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
authorTyler Cipriani <tcipriani@wikimedia.org>2017-09-08 10:37:06 -0600
committerTyler Cipriani <tcipriani@wikimedia.org>2017-09-11 11:33:14 -0600
commit4e5c728eec5a8d7a3f4297de6b5c1503bdffd5d0 (patch)
tree23f8a6583cdbc1acce04cd55360542dbb9ad2a22 /docker
parentb25e7c6b661cf614502289922671c18d70864c6e (diff)
downloadblubber-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.go27
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
}