From e5400379fe5514ba916e7b4efc31b58aaa8c5bce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A5=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=BE=D0=B2?= Date: Wed, 15 Oct 2025 02:32:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B?= =?UTF-8?q?=20=D0=BF=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D0=BE=D0=B2=D1=89=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/builtins/run_every.go | 30 ++++++++++++++++++++++++------ internal/builtins/updater.go | 6 ++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/internal/builtins/run_every.go b/internal/builtins/run_every.go index dbe0dd8..5ea2e55 100644 --- a/internal/builtins/run_every.go +++ b/internal/builtins/run_every.go @@ -180,6 +180,11 @@ func runScheduled(thread *starlark.Thread, fn *starlark.Function, duration strin // Запускаем функцию немедленно при первой регистрации go func() { + defer func() { + if r := recover(); r != nil { + log.Error("Panic in initial plugin function execution").Str("plugin", thread.Name).Str("function", fn.Name()).Any("panic", r).Send() + } + }() newThread := &starlark.Thread{Name: thread.Name} log.Info("Running plugin function immediately on startup").Str("plugin", thread.Name).Str("function", fn.Name()).Send() _, err := starlark.Call(newThread, fn, nil, nil) @@ -189,13 +194,26 @@ func runScheduled(thread *starlark.Thread, fn *starlark.Function, duration strin }() go func() { - for range t.C { - newThread := &starlark.Thread{Name: thread.Name} - log.Info("Calling scheduled function").Str("plugin", thread.Name).Str("function", fn.Name()).Send() - _, err := starlark.Call(newThread, fn, nil, nil) - if err != nil { - log.Warn("Error while executing scheduled function").Str("plugin", thread.Name).Str("function", fn.Name()).Err(err).Send() + defer func() { + if r := recover(); r != nil { + log.Error("Panic in scheduled function goroutine - scheduler stopped!").Str("plugin", thread.Name).Str("function", fn.Name()).Any("panic", r).Send() } + }() + for range t.C { + // Защита от паник внутри каждого вызова + func() { + defer func() { + if r := recover(); r != nil { + log.Error("Panic while executing scheduled function").Str("plugin", thread.Name).Str("function", fn.Name()).Any("panic", r).Send() + } + }() + newThread := &starlark.Thread{Name: thread.Name} + log.Info("Calling scheduled function").Str("plugin", thread.Name).Str("function", fn.Name()).Send() + _, err := starlark.Call(newThread, fn, nil, nil) + if err != nil { + log.Warn("Error while executing scheduled function").Str("plugin", thread.Name).Str("function", fn.Name()).Err(err).Send() + } + }() } }() diff --git a/internal/builtins/updater.go b/internal/builtins/updater.go index 92fdd1b..e4ec824 100644 --- a/internal/builtins/updater.go +++ b/internal/builtins/updater.go @@ -105,6 +105,12 @@ func fixRepoPermissions(path string) error { return err } + // Пропускаем директорию .git и её содержимое + // Git управляет правами самостоятельно, не нужно их трогать + if info.IsDir() && info.Name() == ".git" { + return filepath.SkipDir + } + if info.IsDir() { // Устанавливаем права 2775 для директорий (setgid) return os.Chmod(filePath, 0o2775)