dep.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package bundle
  2. import (
  3. "os"
  4. "github.com/langgenius/dify-plugin-daemon/internal/core/bundle_packager"
  5. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/bundle_entities"
  6. "github.com/langgenius/dify-plugin-daemon/internal/utils/log"
  7. )
  8. func loadBundlePackager(bundlePath string) (bundle_packager.BundlePackager, error) {
  9. // state file, check if it's a file or a directory
  10. stateFile, err := os.Stat(bundlePath)
  11. if err != nil {
  12. return nil, err
  13. }
  14. if stateFile.IsDir() {
  15. return bundle_packager.NewLocalBundlePackager(bundlePath)
  16. }
  17. return bundle_packager.NewZipBundlePackager(bundlePath)
  18. }
  19. func AddGithubDependency(bundlePath string, pattern bundle_entities.GithubRepoPattern) {
  20. packager, err := loadBundlePackager(bundlePath)
  21. if err != nil {
  22. log.Error("Failed to load bundle packager: %v", err)
  23. return
  24. }
  25. packager.AppendGithubDependency(pattern)
  26. if err := packager.Save(); err != nil {
  27. log.Error("Failed to save bundle packager: %v", err)
  28. return
  29. }
  30. log.Info("Successfully added github dependency")
  31. }
  32. func AddMarketplaceDependency(bundlePath string, pattern bundle_entities.MarketplacePattern) {
  33. packager, err := loadBundlePackager(bundlePath)
  34. if err != nil {
  35. log.Error("Failed to load bundle packager: %v", err)
  36. return
  37. }
  38. packager.AppendMarketplaceDependency(pattern)
  39. if err := packager.Save(); err != nil {
  40. log.Error("Failed to save bundle packager: %v", err)
  41. return
  42. }
  43. log.Info("Successfully added marketplace dependency")
  44. }
  45. func AddPackageDependency(bundlePath string, path string) {
  46. packager, err := loadBundlePackager(bundlePath)
  47. if err != nil {
  48. log.Error("Failed to load bundle packager: %v", err)
  49. return
  50. }
  51. if err := packager.AppendPackageDependency(path); err != nil {
  52. log.Error("Failed to append package dependency: %v", err)
  53. return
  54. }
  55. log.Info("Successfully added package dependency")
  56. }
  57. func RegenerateBundle(bundlePath string) {
  58. bundle, err := generateNewBundle()
  59. if err != nil {
  60. log.Error("Failed to generate new bundle: %v", err)
  61. return
  62. }
  63. packager, err := loadBundlePackager(bundlePath)
  64. if err != nil {
  65. log.Error("Failed to load bundle packager: %v", err)
  66. return
  67. }
  68. packager.Regenerate(*bundle)
  69. if err := packager.Save(); err != nil {
  70. log.Error("Failed to save bundle packager: %v", err)
  71. return
  72. }
  73. log.Info("Successfully regenerated bundle")
  74. }
  75. func RemoveDependency(bundlePath string, index int) {
  76. packager, err := loadBundlePackager(bundlePath)
  77. if err != nil {
  78. log.Error("Failed to load bundle packager: %v", err)
  79. return
  80. }
  81. if err := packager.Remove(index); err != nil {
  82. log.Error("Failed to remove dependency: %v", err)
  83. return
  84. }
  85. log.Info("Successfully removed dependency")
  86. }
  87. func PackageBundle(bundlePath string, outputPath string) {
  88. packager, err := loadBundlePackager(bundlePath)
  89. if err != nil {
  90. log.Error("Failed to load bundle packager: %v", err)
  91. return
  92. }
  93. zipFile, err := packager.Export()
  94. if err != nil {
  95. log.Error("Failed to export bundle: %v", err)
  96. return
  97. }
  98. if err := os.WriteFile(outputPath, zipFile, 0644); err != nil {
  99. log.Error("Failed to write zip file: %v", err)
  100. return
  101. }
  102. log.Info("Successfully packaged bundle")
  103. }
  104. func ListDependencies(bundlePath string) {
  105. packager, err := loadBundlePackager(bundlePath)
  106. if err != nil {
  107. log.Error("Failed to load bundle packager: %v", err)
  108. return
  109. }
  110. dependencies, err := packager.ListDependencies()
  111. if err != nil {
  112. log.Error("Failed to list dependencies: %v", err)
  113. return
  114. }
  115. if len(dependencies) == 0 {
  116. log.Info("No dependencies found")
  117. return
  118. }
  119. for i, dependency := range dependencies {
  120. log.Info("========== Dependency %d ==========", i)
  121. if dependency.Type == bundle_entities.DEPENDENCY_TYPE_GITHUB {
  122. githubDependency, ok := dependency.Value.(bundle_entities.GithubDependency)
  123. if !ok {
  124. log.Error("Failed to assert github pattern")
  125. continue
  126. }
  127. log.Info("Dependency Type: Github, Pattern: %s", githubDependency.RepoPattern)
  128. log.Info("Github Repo: %s", githubDependency.RepoPattern.Repo())
  129. log.Info("Release: %s", githubDependency.RepoPattern.Release())
  130. log.Info("Asset: %s", githubDependency.RepoPattern.Asset())
  131. } else if dependency.Type == bundle_entities.DEPENDENCY_TYPE_MARKETPLACE {
  132. marketplaceDependency, ok := dependency.Value.(bundle_entities.MarketplaceDependency)
  133. if !ok {
  134. log.Error("Failed to assert marketplace pattern")
  135. continue
  136. }
  137. log.Info("Dependency Type: Marketplace, Pattern: %s", marketplaceDependency.MarketplacePattern)
  138. log.Info("Organization: %s", marketplaceDependency.MarketplacePattern.Organization())
  139. log.Info("Plugin: %s", marketplaceDependency.MarketplacePattern.Plugin())
  140. log.Info("Version: %s", marketplaceDependency.MarketplacePattern.Version())
  141. } else if dependency.Type == bundle_entities.DEPENDENCY_TYPE_PACKAGE {
  142. packageDependency, ok := dependency.Value.(bundle_entities.PackageDependency)
  143. if !ok {
  144. log.Error("Failed to assert package dependency")
  145. continue
  146. }
  147. log.Info("Dependency Type: Package, Path: %s", packageDependency.Path)
  148. }
  149. }
  150. }