Skip to content

Commit

Permalink
create-builder gets stack info from builder.toml instead of config.toml
Browse files Browse the repository at this point in the history
[buildpacks/roadmap#47]

Signed-off-by: Andrew Meyer <[email protected]>
  • Loading branch information
ameyer-pivotal committed Feb 4, 2019
1 parent 20f2aa3 commit 88f701b
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 159 deletions.
7 changes: 6 additions & 1 deletion acceptance/testdata/mock_buildpacks/builder.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,9 @@ uri = "third"

[[groups.buildpacks]]
id = "mock.bp.third"
version = "0.0.3-mock"
version = "0.0.3-mock"

[stack]
id = "com.example.stack"
build-image = "packs/build:v3alpha2"
run-image = "packs/run:v3alpha2"
63 changes: 25 additions & 38 deletions builder_factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,23 @@ import (
type BuilderTOML struct {
Buildpacks []Buildpack `toml:"buildpacks"`
Groups []lifecycle.BuildpackGroup `toml:"groups"`
Stack Stack
}

type Stack struct {
ID string `toml:"id"`
BuildImage string `toml:"build-image"`
RunImage string `toml:"run-image"`
RunImageMirrors []string `toml:"run-image-mirrors,omitempty"`
}

type BuilderConfig struct {
Buildpacks []Buildpack
Groups []lifecycle.BuildpackGroup
Repo image.Image
BuilderDir string //original location of builder.toml, used for interpreting relative paths in buildpack URIs
StackID string
Buildpacks []Buildpack
Groups []lifecycle.BuildpackGroup
Repo image.Image
BuilderDir string // original location of builder.toml, used for interpreting relative paths in buildpack URIs
RunImage string
RunImageMirrors []string
}

type BuilderFactory struct {
Expand All @@ -46,20 +55,23 @@ type BuilderFactory struct {
type CreateBuilderFlags struct {
RepoName string
BuilderTomlPath string
StackID string
Publish bool
NoPull bool
}

func (f *BuilderFactory) BuilderConfigFromFlags(flags CreateBuilderFlags) (BuilderConfig, error) {
baseImage, err := f.buildImageName(flags.StackID)
builderConfig := BuilderConfig{}
builderConfig.BuilderDir = filepath.Dir(flags.BuilderTomlPath)

builderTOML := &BuilderTOML{}
_, err := toml.DecodeFile(flags.BuilderTomlPath, &builderTOML)
if err != nil {
return BuilderConfig{}, err
return BuilderConfig{}, fmt.Errorf(`failed to decode builder config from file %s: %s`, flags.BuilderTomlPath, err)
}

builderConfig := BuilderConfig{}
builderConfig.StackID = flags.StackID
builderConfig.BuilderDir = filepath.Dir(flags.BuilderTomlPath)
baseImage := builderTOML.Stack.BuildImage
builderConfig.RunImage = builderTOML.Stack.RunImage
builderConfig.RunImageMirrors = builderTOML.Stack.RunImageMirrors
if flags.Publish {
builderConfig.Repo, err = f.ImageFactory.NewRemote(baseImage)
} else {
Expand All @@ -70,11 +82,6 @@ func (f *BuilderFactory) BuilderConfigFromFlags(flags CreateBuilderFlags) (Build
}
builderConfig.Repo.Rename(flags.RepoName)

builderTOML := &BuilderTOML{}
_, err = toml.DecodeFile(flags.BuilderTomlPath, &builderTOML)
if err != nil {
return BuilderConfig{}, fmt.Errorf(`failed to decode builder config from file %s: %s`, flags.BuilderTomlPath, err)
}
builderConfig.Groups = builderTOML.Groups

for _, b := range builderTOML.Buildpacks {
Expand All @@ -96,7 +103,7 @@ func (f *BuilderFactory) resolveBuildpackURI(builderDir string, b Buildpack) (Bu
return Buildpack{}, err
}
switch asurl.Scheme {
case "", // This is the only way to support relative filepaths
case "", // This is the only way to support relative filepaths
"file": // URIs with file:// protocol force the use of absolute paths. Host=localhost may be implied with file:///

path := asurl.Path
Expand Down Expand Up @@ -166,22 +173,6 @@ func (f *BuilderFactory) resolveBuildpackURI(builderDir string, b Buildpack) (Bu
}, nil
}

func (f *BuilderFactory) buildImageName(stackID string) (string, error) {
stack, err := f.Config.GetStack(stackID)
if err != nil {
return "", err
}
return stack.BuildImage, nil
}

func (f *BuilderFactory) runImageNames(stackID string) ([]string, error) {
stack, err := f.Config.GetStack(stackID)
if err != nil {
return nil, err
}
return stack.RunImages, nil
}

func (f *BuilderFactory) Create(config BuilderConfig) error {
tmpDir, err := ioutil.TempDir("", "create-builder")
if err != nil {
Expand Down Expand Up @@ -213,12 +204,8 @@ func (f *BuilderFactory) Create(config BuilderConfig) error {
return fmt.Errorf(`failed append latest link layer to image: %s`, err)
}

runImages, err := f.runImageNames(config.StackID)
if err != nil {
return fmt.Errorf(`failed to get run images: %s`, err)
}
jsonBytes, err := json.Marshal(&BuilderImageMetadata{
RunImage: BuilderRunImageMetadata{Image: runImages[0], Mirrors: runImages[1:]},
RunImage: BuilderRunImageMetadata{Image: config.RunImage, Mirrors: config.RunImageMirrors},
})
if err != nil {
return fmt.Errorf(`failed marshal builder image metadata: %s`, err)
Expand Down
Loading

0 comments on commit 88f701b

Please sign in to comment.