package config
|
|
|
|
import (
|
|
"gerrit.wikimedia.org/r/blubber/build"
|
|
)
|
|
|
|
// CommonConfig holds the configuration fields common to both the root config
|
|
// and each configured variant.
|
|
//
|
|
type CommonConfig struct {
|
|
Base string `json:"base" validate:"omitempty,baseimage"` // name/path to base image
|
|
Apt AptConfig `json:"apt"` // APT related
|
|
Node NodeConfig `json:"node"` // Node related
|
|
Python PythonConfig `json:"python"` // Python related
|
|
Builder BuilderConfig `json:"builder"` // Builder related
|
|
Lives LivesConfig `json:"lives"` // application owner/dir
|
|
Runs RunsConfig `json:"runs"` // runtime environment
|
|
EntryPoint []string `json:"entrypoint"` // entry-point executable
|
|
}
|
|
|
|
// Merge takes another CommonConfig and merges its fields this one's.
|
|
//
|
|
func (cc *CommonConfig) Merge(cc2 CommonConfig) {
|
|
if cc2.Base != "" {
|
|
cc.Base = cc2.Base
|
|
}
|
|
|
|
cc.Apt.Merge(cc2.Apt)
|
|
cc.Node.Merge(cc2.Node)
|
|
cc.Python.Merge(cc2.Python)
|
|
cc.Builder.Merge(cc2.Builder)
|
|
cc.Lives.Merge(cc2.Lives)
|
|
cc.Runs.Merge(cc2.Runs)
|
|
|
|
if cc2.EntryPoint != nil {
|
|
cc.EntryPoint = cc2.EntryPoint
|
|
}
|
|
}
|
|
|
|
// PhaseCompileableConfig returns all fields that implement
|
|
// build.PhaseCompileable in the order that their instructions should be
|
|
// injected.
|
|
//
|
|
func (cc *CommonConfig) PhaseCompileableConfig() []build.PhaseCompileable {
|
|
return []build.PhaseCompileable{cc.Apt, cc.Node, cc.Python, cc.Builder, cc.Lives, cc.Runs}
|
|
}
|
|
|
|
// InstructionsForPhase injects instructions into the given build phase for
|
|
// each member field that supports it.
|
|
//
|
|
func (cc *CommonConfig) InstructionsForPhase(phase build.Phase) []build.Instruction {
|
|
instructions := []build.Instruction{}
|
|
|
|
for _, phaseCompileable := range cc.PhaseCompileableConfig() {
|
|
instructions = append(instructions, phaseCompileable.InstructionsForPhase(phase)...)
|
|
}
|
|
|
|
return instructions
|
|
}
|