pack.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. )
  11. type Agent struct{}
  12. func (a *Agent) Build(opts *docker.BuildOpts, buildConfig *types.BuildConfig) error {
  13. //create a context object
  14. context := context.Background()
  15. //initialize a pack client
  16. client, err := pack.NewClient(pack.WithLogger(newPackLogger()))
  17. if err != nil {
  18. return err
  19. }
  20. absPath, err := filepath.Abs(opts.BuildContext)
  21. if err != nil {
  22. return err
  23. }
  24. buildOpts := pack.BuildOptions{
  25. RelativeBaseDir: filepath.Dir(absPath),
  26. Image: fmt.Sprintf("%s:%s", opts.ImageRepo, opts.Tag),
  27. Builder: "paketobuildpacks/builder:full",
  28. AppPath: opts.BuildContext,
  29. TrustBuilder: true,
  30. Env: opts.Env,
  31. }
  32. if buildConfig != nil {
  33. buildOpts.Builder = buildConfig.Builder
  34. if len(buildConfig.Buildpacks) > 0 {
  35. buildOpts.Buildpacks = buildConfig.Buildpacks
  36. }
  37. // FIXME: use all the config vars
  38. }
  39. if strings.HasPrefix(buildOpts.Builder, "heroku") {
  40. buildOpts.Buildpacks = append(buildOpts.Buildpacks, "heroku/procfile")
  41. }
  42. return client.Build(context, buildOpts)
  43. }