pack.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package pack
  2. import (
  3. "context"
  4. "fmt"
  5. "path/filepath"
  6. "strings"
  7. "github.com/buildpacks/pack"
  8. "github.com/porter-dev/porter/api/types"
  9. "github.com/porter-dev/porter/cli/cmd/docker"
  10. "github.com/porter-dev/porter/internal/integrations/buildpacks"
  11. )
  12. type Agent struct{}
  13. func (a *Agent) Build(opts *docker.BuildOpts, buildConfig *types.BuildConfig) error {
  14. //create a context object
  15. context := context.Background()
  16. //initialize a pack client
  17. client, err := pack.NewClient()
  18. if err != nil {
  19. return err
  20. }
  21. absPath, err := filepath.Abs(opts.BuildContext)
  22. if err != nil {
  23. return err
  24. }
  25. buildOpts := pack.BuildOptions{
  26. RelativeBaseDir: filepath.Dir(absPath),
  27. Image: fmt.Sprintf("%s:%s", opts.ImageRepo, opts.Tag),
  28. Builder: buildpacks.DefaultBuilder,
  29. AppPath: opts.BuildContext,
  30. TrustBuilder: true,
  31. Env: opts.Env,
  32. }
  33. if buildConfig != nil {
  34. buildOpts.Builder = buildConfig.Builder
  35. if len(buildConfig.Buildpacks) > 0 {
  36. buildOpts.Buildpacks = buildConfig.Buildpacks
  37. }
  38. // FIXME: use all the config vars
  39. }
  40. if strings.HasPrefix(buildOpts.Builder, "paketo") {
  41. buildOpts.Buildpacks = append(buildOpts.Buildpacks, "porterhub/paketo-build-plan:latest")
  42. }
  43. return client.Build(context, buildOpts)
  44. }