| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- package v2beta1
- import (
- "fmt"
- "strings"
- "github.com/mitchellh/mapstructure"
- apiTypes "github.com/porter-dev/porter/api/types"
- "github.com/porter-dev/porter/internal/integrations/preview"
- "github.com/porter-dev/switchboard/pkg/types"
- )
- func (b *Build) GetName() string {
- if b == nil || b.Name == nil {
- return ""
- }
- return *b.Name
- }
- func (b *Build) GetContext() string {
- if b == nil || b.Context == nil || *b.Context == "" {
- return "."
- }
- return *b.Context
- }
- func (b *Build) GetMethod() string {
- if b == nil || b.Method == nil {
- return ""
- }
- return *b.Method
- }
- func (b *Build) GetBuilder() string {
- if b == nil || b.Builder == nil {
- return ""
- }
- return *b.Builder
- }
- func (b *Build) GetBuildpacks() []string {
- if b == nil || b.Buildpacks == nil {
- return []string{}
- }
- var bp []string
- for _, b := range b.Buildpacks {
- if b == nil {
- continue
- }
- bp = append(bp, *b)
- }
- return bp
- }
- func (b *Build) GetDockerfile() string {
- if b == nil || b.Dockerfile == nil {
- return ""
- }
- return *b.Dockerfile
- }
- func (b *Build) GetImage() string {
- if b == nil || b.Image == nil {
- return ""
- }
- return *b.Image
- }
- func (b *Build) GetRawEnv() map[string]string {
- env := make(map[string]string)
- if b == nil || b.Env == nil {
- return env
- }
- for k, v := range b.Env.Raw {
- if k == nil || v == nil {
- continue
- }
- env[*k] = *v
- }
- return env
- }
- func (b *Build) GetEnvGroups() []string {
- var eg []string
- if b == nil || b.Env == nil {
- return eg
- }
- for _, g := range b.Env.ImportFrom {
- if g == nil {
- continue
- }
- ns, name, valid := strings.Cut(*g, "/")
- if !valid || ns == "" || name == "" {
- printWarningMessage(fmt.Sprintf("ignoring invalid env group name: %s", *g))
- continue
- }
- eg = append(eg, *g)
- }
- return eg
- }
- func (b *Build) getV1BuildImage() (*types.Resource, error) {
- config := &preview.BuildDriverConfig{}
- if b.GetMethod() == "pack" {
- config.Build.Method = "pack"
- config.Build.Builder = b.GetBuilder()
- config.Build.Buildpacks = b.GetBuildpacks()
- } else if b.GetMethod() == "docker" {
- config.Build.Method = "docker"
- config.Build.Dockerfile = b.GetDockerfile()
- } else if b.GetMethod() == "registry" {
- config.Build.Method = "registry"
- config.Build.Image = b.GetImage()
- } else {
- return nil, fmt.Errorf("invalid build method: %s", b.GetMethod())
- }
- config.Build.Context = b.GetContext()
- config.Build.Env = b.GetRawEnv()
- for _, eg := range b.GetEnvGroups() {
- ns, name, _ := strings.Cut(eg, "/")
- config.EnvGroups = append(config.EnvGroups, apiTypes.EnvGroupMeta{
- Namespace: ns,
- Name: name,
- })
- }
- rawConfig := make(map[string]any)
- err := mapstructure.Decode(config, &rawConfig)
- if err != nil {
- return nil, err
- }
- return &types.Resource{
- Name: fmt.Sprintf("%s-build-image", b.GetName()),
- Driver: "build-image",
- Source: map[string]any{
- "name": "web",
- },
- Target: map[string]any{
- "app_name": b.GetName(),
- },
- DependsOn: []string{
- "get-env",
- },
- Config: rawConfig,
- }, nil
- }
- func (b *Build) getV1PushImage() (*types.Resource, error) {
- config := &preview.PushDriverConfig{}
- config.Push.Image = fmt.Sprintf("{ .%s-build-image.image }", b.GetName())
- rawConfig := make(map[string]any)
- err := mapstructure.Decode(config, &rawConfig)
- if err != nil {
- return nil, err
- }
- return &types.Resource{
- Name: b.GetName(),
- Driver: "push-image",
- DependsOn: []string{
- "get-env",
- fmt.Sprintf("%s-build-image", b.GetName()),
- },
- Target: map[string]any{
- "app_name": b.GetName(),
- },
- Config: rawConfig,
- }, nil
- }
|