packager.go 989 B

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