pack.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package pack
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "path/filepath"
  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: "paketobuildpacks/builder:full",
  29. AppPath: opts.BuildContext,
  30. TrustBuilder: true,
  31. Env: opts.Env,
  32. // Builder: "paketobuildpacks/builder:tiny",
  33. // DefaultProcessType: "some-custom-command from Procfile",
  34. // Buildpacks: []string{"gcr.io/paketo-buildpacks/procfile"},
  35. }
  36. if buildConfig != nil {
  37. var buildpacks buildpacks.BuildpackInfo
  38. err = json.Unmarshal(buildConfig.Buildpacks, &buildpacks)
  39. if err == nil {
  40. var packs []string
  41. for i := range buildpacks.Packs {
  42. packs = append(packs, fmt.Sprintf("%s@%s", buildpacks.Packs[i].ID, buildpacks.Packs[i].Version))
  43. }
  44. if len(packs) > 0 {
  45. buildOpts.Builder = "paketobuildpacks/builder:tiny"
  46. buildOpts.Buildpacks = packs
  47. }
  48. }
  49. }
  50. return client.Build(context, buildOpts)
  51. }