fix: генерить task_tag (UUID) при создании задачи; защита feat/' при пустом tag
All checks were successful
CI / test (push) Successful in 46s
CI / build-and-package (amd64, linux) (push) Successful in 44s
CI / build-and-package (amd64, windows) (push) Successful in 41s

This commit is contained in:
Hermes
2026-08-16 23:07:30 +05:00
parent 35d9a74ef1
commit c8cd425b29
4 changed files with 75 additions and 6 deletions

View File

@@ -53,5 +53,10 @@ func (w *Worker) git(ctx context.Context, dir string, args ...string) (string, e
// featureBranchName — имя ветки задачи: feat/<taskTag>.
func featureBranchName(taskTag string) string {
return "feat/" + taskTag
}
tag := strings.TrimSpace(taskTag)
if tag == "" {
// защита от старых задач с пустым task_tag: не даём сломать git (feat/ невалидна)
return "feat/main" // коллизия с базовой "main" не страшна: ветка feature-своя есть под этим именем
}
return "feat/" + tag
}

View File

@@ -415,6 +415,23 @@ func TestWorkerPromptRendered(t *testing.T) {
}
}
func TestFeatureBranchName(t *testing.T) {
cases := []struct {
tag string
want string
}{
{"", "feat/main"}, // пустой tag (старая задача) — не "feat/"
{" ", "feat/main"}, // только пробелы
{"3f2a1b", "feat/3f2a1b"}, // нормальный UUID
{" abc ", "feat/abc"}, // тримится
}
for _, c := range cases {
if got := featureBranchName(c.tag); got != c.want {
t.Errorf("featureBranchName(%q) = %q, want %q", c.tag, got, c.want)
}
}
}
func TestValidateRepoName(t *testing.T) {
valid := []string{"calc", "proj-a", "my.repo", "node_2", "kamelion/ratatoskr-go", "a/b/c"}
for _, r := range valid {
@@ -568,4 +585,4 @@ func TestWorkerSemaphore(t *testing.T) {
if len(success) != 2 {
t.Errorf("после освобождения слота success = %d, want 2", len(success))
}
}
}