Files
silo-server/internal/taskmanager/tasks/check_plugin_updates.go
T

64 lines
1.8 KiB
Go

package tasks
import (
"context"
"encoding/json"
"fmt"
"github.com/Silo-Server/silo-server/internal/plugins"
"github.com/Silo-Server/silo-server/internal/taskmanager"
)
type PluginUpdateChecker interface {
Check(ctx context.Context, opts plugins.AutoUpdateOptions) (plugins.AutoUpdateSummary, error)
}
type CheckPluginUpdatesTask struct {
checker PluginUpdateChecker
}
func NewCheckPluginUpdatesTask(checker PluginUpdateChecker) *CheckPluginUpdatesTask {
return &CheckPluginUpdatesTask{checker: checker}
}
func (t *CheckPluginUpdatesTask) Key() string { return "check_plugin_updates" }
func (t *CheckPluginUpdatesTask) Name() string { return "Check Plugin Updates" }
func (t *CheckPluginUpdatesTask) Description() string {
return "Fetches plugin repositories and applies or records available plugin updates"
}
func (t *CheckPluginUpdatesTask) Category() taskmanager.TaskCategory {
return taskmanager.TaskCategorySystem
}
func (t *CheckPluginUpdatesTask) IsHidden() bool { return false }
func (t *CheckPluginUpdatesTask) DefaultTriggers() []taskmanager.TriggerConfig {
return []taskmanager.TriggerConfig{
{Type: taskmanager.TriggerTypeInterval, IntervalMs: 24 * 60 * 60 * 1000},
}
}
func (t *CheckPluginUpdatesTask) Execute(ctx context.Context, progress taskmanager.ProgressReporter) error {
progress.Report(0, "Checking plugin repositories")
summary, err := t.checker.Check(ctx, plugins.AutoUpdateOptions{
SeedDefaultRepository: true,
AutoInstallDefaults: false,
})
if err != nil {
return fmt.Errorf("check plugin updates: %w", err)
}
resultData, err := json.Marshal(summary)
if err == nil {
progress.SetResultData(resultData)
}
progress.Report(100, fmt.Sprintf(
"Checked %d catalog entries, applied %d updates, recorded %d available updates",
summary.CatalogEntries,
summary.UpdatesApplied,
summary.UpdatesAvailable,
))
return nil
}