package config import ( "gerrit.wikimedia.org/r/blubber/build" ) // BuilderConfig contains configuration for the definition of an arbitrary // build command and the files required to successfully execute the command. // type BuilderConfig struct { Command []string `json:"command"` Requirements []string `json:"requirements"` } // Merge takes another BuilderConfig and merges its fields into this one's, // overwriting the builder command. // func (bc *BuilderConfig) Merge(bc2 BuilderConfig) { if bc2.Command != nil { bc.Command = bc2.Command } if bc2.Requirements != nil { bc.Requirements = bc2.Requirements } } // InstructionsForPhase injects instructions into the build related to // builder commands and required files. // // PhasePreInstall // // Creates directories for requirements files, copies in requirements files, // and runs the builder command. // func (bc BuilderConfig) InstructionsForPhase(phase build.Phase) []build.Instruction { if len(bc.Command) == 0 { return []build.Instruction{} } switch phase { case build.PhasePreInstall: syncs := build.SyncFiles(bc.Requirements, ".") run := build.Run{Command: bc.Command[0]} if len(bc.Command) > 1 { run.Arguments = bc.Command[1:] } return append(syncs, run) } return []build.Instruction{} }