packager.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package packager
  2. import (
  3. "archive/zip"
  4. "bytes"
  5. "path/filepath"
  6. "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_packager/decoder"
  7. )
  8. type Packager struct {
  9. decoder decoder.PluginDecoder
  10. manifest string // manifest file path
  11. }
  12. func NewPackager(decoder decoder.PluginDecoder) *Packager {
  13. return &Packager{
  14. decoder: decoder,
  15. manifest: "manifest.yaml",
  16. }
  17. }
  18. func (p *Packager) Pack() ([]byte, error) {
  19. err := p.Validate()
  20. if err != nil {
  21. return nil, err
  22. }
  23. zip_buffer := new(bytes.Buffer)
  24. zip_writer := zip.NewWriter(zip_buffer)
  25. err = p.decoder.Walk(func(filename, dir string) error {
  26. full_path := filepath.Join(dir, filename)
  27. file, err := p.decoder.ReadFile(full_path)
  28. if err != nil {
  29. return err
  30. }
  31. zip_file, err := zip_writer.Create(full_path)
  32. if err != nil {
  33. return err
  34. }
  35. _, err = zip_file.Write(file)
  36. if err != nil {
  37. return err
  38. }
  39. return nil
  40. })
  41. if err != nil {
  42. return nil, err
  43. }
  44. err = zip_writer.Close()
  45. if err != nil {
  46. return nil, err
  47. }
  48. return zip_buffer.Bytes(), nil
  49. }