github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/pkg/project/v02/project.go (about)

     1  package v02
     2  
     3  import (
     4  	"github.com/BurntSushi/toml"
     5  	"github.com/buildpacks/lifecycle/api"
     6  
     7  	"github.com/buildpacks/pack/pkg/project/types"
     8  )
     9  
    10  type Buildpacks struct {
    11  	Include []string            `toml:"include"`
    12  	Exclude []string            `toml:"exclude"`
    13  	Group   []types.Buildpack   `toml:"group"`
    14  	Env     Env                 `toml:"env"`
    15  	Build   Build               `toml:"build"`
    16  	Builder string              `toml:"builder"`
    17  	Pre     types.GroupAddition `toml:"pre"`
    18  	Post    types.GroupAddition `toml:"post"`
    19  }
    20  
    21  type Build struct {
    22  	Env []types.EnvVar `toml:"env"`
    23  }
    24  
    25  // Deprecated: use `[[io.buildpacks.build.env]]` instead. see https://github.com/buildpacks/pack/pull/1479
    26  type Env struct {
    27  	Build []types.EnvVar `toml:"build"`
    28  }
    29  
    30  type Project struct {
    31  	Name          string                 `toml:"name"`
    32  	Licenses      []types.License        `toml:"licenses"`
    33  	Metadata      map[string]interface{} `toml:"metadata"`
    34  	SchemaVersion string                 `toml:"schema-version"`
    35  }
    36  
    37  type IO struct {
    38  	Buildpacks Buildpacks `toml:"buildpacks"`
    39  }
    40  
    41  type Descriptor struct {
    42  	Project Project `toml:"_"`
    43  	IO      IO      `toml:"io"`
    44  }
    45  
    46  func NewDescriptor(projectTomlContents string) (types.Descriptor, toml.MetaData, error) {
    47  	versionedDescriptor := &Descriptor{}
    48  	tomlMetaData, err := toml.Decode(projectTomlContents, &versionedDescriptor)
    49  	if err != nil {
    50  		return types.Descriptor{}, tomlMetaData, err
    51  	}
    52  
    53  	// backward compatibility for incorrect key
    54  	env := versionedDescriptor.IO.Buildpacks.Build.Env
    55  	if env == nil {
    56  		env = versionedDescriptor.IO.Buildpacks.Env.Build
    57  	}
    58  
    59  	return types.Descriptor{
    60  		Project: types.Project{
    61  			Name:     versionedDescriptor.Project.Name,
    62  			Licenses: versionedDescriptor.Project.Licenses,
    63  		},
    64  		Build: types.Build{
    65  			Include:    versionedDescriptor.IO.Buildpacks.Include,
    66  			Exclude:    versionedDescriptor.IO.Buildpacks.Exclude,
    67  			Buildpacks: versionedDescriptor.IO.Buildpacks.Group,
    68  			Env:        env,
    69  			Builder:    versionedDescriptor.IO.Buildpacks.Builder,
    70  			Pre:        versionedDescriptor.IO.Buildpacks.Pre,
    71  			Post:       versionedDescriptor.IO.Buildpacks.Post,
    72  		},
    73  		Metadata:      versionedDescriptor.Project.Metadata,
    74  		SchemaVersion: api.MustParse("0.2"),
    75  	}, tomlMetaData, nil
    76  }