12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package packager
- import (
- "archive/zip"
- "bytes"
- "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_packager/decoder"
- )
- type Packager struct {
- decoder decoder.PluginDecoder
- manifest string // manifest file path
- }
- func NewPackager(decoder decoder.PluginDecoder) *Packager {
- return &Packager{
- decoder: decoder,
- manifest: "manifest.yaml",
- }
- }
- func (p *Packager) Pack() ([]byte, error) {
- err := p.Validate()
- if err != nil {
- return nil, err
- }
- zip_buffer := new(bytes.Buffer)
- zip_writer := zip.NewWriter(zip_buffer)
- p.decoder.Walk(func(filename, dir string) error {
- file, err := p.decoder.ReadFile(filename)
- if err != nil {
- return err
- }
- zip_file, err := zip_writer.Create(filename)
- if err != nil {
- return err
- }
- _, err = zip_file.Write(file)
- if err != nil {
- return err
- }
- return nil
- })
- if err != nil {
- return nil, err
- }
- err = zip_writer.Close()
- if err != nil {
- return nil, err
- }
- return zip_buffer.Bytes(), nil
- }
|