pack.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. if buildConfig != nil {
  51. buildOpts.Builder = buildConfig.Builder
  52. if len(buildConfig.Buildpacks) > 0 {
  53. buildOpts.Buildpacks = buildConfig.Buildpacks
  54. }
  55. // FIXME: use all the config vars
  56. }
  57. return client.Build(context, buildOpts)
  58. }