Add server-side workflows with YAML files, task freeze and lead tools

This commit is contained in:
Ian Gulliver
2026-10-15 21:17:58 -07:00
parent 2f02f5ac3c
commit 2ce10a6c65
19 changed files with 1293 additions and 199 deletions
+15 -7
View File
@@ -16,14 +16,22 @@ import (
"g.fc.run/misc/byre/internal/todo"
)
func (m *Manager) CreateTask(ctx context.Context, project api.Project, title, createdBy, base, actor string) (api.Task, error) {
return m.createTask(ctx, project, api.Task{Title: title, CreatedBy: createdBy}, base, actor)
func (m *Manager) CreateTask(ctx context.Context, project api.Project, title, createdBy, base, actor, workflowName string) (api.Task, error) {
frozen, err := m.freeze(ctx, workflowName)
if err != nil {
return api.Task{}, err
}
return m.createTask(ctx, project, api.Task{Title: title, CreatedBy: createdBy}, frozen, base, actor)
}
func (m *Manager) StartTodo(ctx context.Context, project api.Project, creator api.User, title, model, actor string) (api.Task, error) {
func (m *Manager) StartTodo(ctx context.Context, project api.Project, creator api.User, title, model, actor, workflowName string) (api.Task, error) {
if creator.GitName == "" || creator.GitEmail == "" {
return api.Task{}, ErrNoGitIdentity
}
frozen, err := m.freeze(ctx, workflowName)
if err != nil {
return api.Task{}, err
}
src, found, err := git.ReadFile(project.RepoPath, project.DefaultBranch, todo.File)
if err != nil {
@@ -47,7 +55,7 @@ func (m *Manager) StartTodo(ctx context.Context, project api.Project, creator ap
}
}
task, err := m.createTask(ctx, project, api.Task{Title: item.Title, CreatedBy: creator.Login, TodoItem: &item.Title}, project.DefaultBranch, actor)
task, err := m.createTask(ctx, project, api.Task{Title: item.Title, CreatedBy: creator.Login, TodoItem: &item.Title}, frozen, project.DefaultBranch, actor)
if err != nil {
return api.Task{}, err
}
@@ -67,7 +75,7 @@ func todoPrompt(item api.TodoItem) string {
todo.File, todo.Markdown(item))
}
func (m *Manager) createTask(ctx context.Context, project api.Project, t api.Task, base, actor string) (api.Task, error) {
func (m *Manager) createTask(ctx context.Context, project api.Project, t api.Task, frozen *store.FrozenWorkflow, base, actor string) (api.Task, error) {
t.Id = store.NewID()
t.ProjectId = project.Id
if t.MergeTitle == "" {
@@ -84,7 +92,7 @@ func (m *Manager) createTask(ctx context.Context, project api.Project, t api.Tas
return api.Task{}, err
}
err = m.store.CreateTask(ctx, t, actor)
err = m.store.CreateTask(ctx, t, frozen, actor)
if err != nil {
return api.Task{}, err
}
@@ -164,7 +172,7 @@ func (m *Manager) createTaskFromAgent(ctx context.Context, l *live, raw json.Raw
model = sess.Model
}
task, err := m.CreateTask(ctx, project, args.Title, creator.Login, base, creator.Login)
task, err := m.CreateTask(ctx, project, args.Title, creator.Login, base, creator.Login, "")
if err != nil {
return "", err
}