/go/libraries/doltcore/env/actions/dolt_ci/workflow_manager.go: wip, trying to get workflow storage working

This commit is contained in:
coffeegoddd
2024-11-11 10:59:19 -08:00
parent 49c6aa4a9e
commit 0703ca4ee0
2 changed files with 62 additions and 9 deletions
+1
View File
@@ -21,4 +21,5 @@ import (
var Commands = cli.NewHiddenSubCommandHandler("ci", "Commands for working with Dolt continuous integration configuration.", []cli.Command{
InitCmd{},
DestroyCmd{},
ImportCmd{},
})
@@ -74,6 +74,11 @@ func (d *doltWorkflowManager) selectAllFromWorkflowEventsTableByWorkflowNameQuer
func (d *doltWorkflowManager) selectAllFromWorkflowEventsTableByWorkflowNameWhereEventTypeIsPullRequestQuery(workflowName string) string {
return fmt.Sprintf("select * from %s where `%s` = '%s' and `%s` is %d;", doltdb.WorkflowEventsTableName, doltdb.WorkflowEventsWorkflowNameFkColName, workflowName, doltdb.WorkflowEventsEventTypeColName, WorkflowEventTypePullRequest)
}
func (d *doltWorkflowManager) selectAllFromWorkflowEventsTableByWorkflowNameWhereEventTypeIsPushQuery(workflowName string) string {
return fmt.Sprintf("select * from %s where `%s` = '%s' and `%s` is %d;", doltdb.WorkflowEventsTableName, doltdb.WorkflowEventsWorkflowNameFkColName, workflowName, doltdb.WorkflowEventsEventTypeColName, WorkflowEventTypePush)
}
func (d *doltWorkflowManager) selectAllFromWorkflowJobsTableByWorkflowNameQuery(workflowName string) string {
return fmt.Sprintf("select * from %s where `%s` = '%s';", doltdb.WorkflowJobsTableName, doltdb.WorkflowJobsWorkflowNameFkColName, workflowName)
}
@@ -660,7 +665,6 @@ func (d *doltWorkflowManager) listWorkflowEventTriggerActivitiesByEventTriggerId
func (d *doltWorkflowManager) listWorkflowEventTriggersByEventId(ctx *sql.Context, eventID WorkflowEventId) ([]*WorkflowEventTrigger, error) {
query := d.selectAllFromWorkflowEventTriggersTableByWorkflowEventIdQuery(string(eventID))
return d.retrieveWorkflowEventTriggers(ctx, query)
}
func (d *doltWorkflowManager) listWorkflowEventTriggersByEventIdWhereEventTriggerTypeIsBranches(ctx *sql.Context, eventID WorkflowEventId) ([]*WorkflowEventTrigger, error) {
@@ -678,6 +682,11 @@ func (d *doltWorkflowManager) listWorkflowEventsByWorkflowName(ctx *sql.Context,
return d.retrieveWorkflowEvents(ctx, query)
}
func (d *doltWorkflowManager) listWorkflowEventsByWorkflowNameWhereEventTypeIsPush(ctx *sql.Context, workflowName WorkflowName) ([]*WorkflowEvent, error) {
query := d.selectAllFromWorkflowEventsTableByWorkflowNameWhereEventTypeIsPushQuery(string(workflowName))
return d.retrieveWorkflowEvents(ctx, query)
}
func (d *doltWorkflowManager) listWorkflowEventsByWorkflowNameWhereEventTypeIsPullRequest(ctx *sql.Context, workflowName WorkflowName) ([]*WorkflowEvent, error) {
query := d.selectAllFromWorkflowEventsTableByWorkflowNameWhereEventTypeIsPullRequestQuery(string(workflowName))
return d.retrieveWorkflowEvents(ctx, query)
@@ -925,13 +934,48 @@ func (d *doltWorkflowManager) updateExistingWorkflow(ctx *sql.Context, config *W
}
} else {
// todo: create a map of config branches
// todo: list all trigger branches for this workflow push event
// todo: iterate all branches
// todo: for each branch, check config map
// todo: if not in config map, delete branch in db
// todo: if is in config map, delete from config map
// todo: after loop, if any branches are left in the config map
// todo: create those trigger branches
configBranches := make(map[string]string)
for _, branch := range config.On.Push.Branches {
configBranches[branch] = branch
}
// select * events of type push
pushEvents, err := d.listWorkflowEventsByWorkflowNameWhereEventTypeIsPush(ctx, WorkflowName(config.Name))
if err != nil {
return err
}
for _, event := range pushEvents {
triggers, err := d.listWorkflowEventTriggersByEventIdWhereEventTriggerTypeIsBranches(ctx, *event.Id)
if err != nil {
return err
}
for _, trigger := range triggers {
branches, err := d.listWorkflowEventTriggerBranchesByEventTriggerId(ctx, *trigger.Id)
if err != nil {
return err
}
for _, branch := range branches {
_, ok := configBranches[branch.Branch]
if !ok {
err = d.deleteWorkflowEventTriggerBranch(ctx, *branch.Id)
if err != nil {
return err
}
} else {
delete(configBranches, branch.Branch)
}
}
// todo: is this right?
for branch := range configBranches {
_, err = d.writeWorkflowEventTriggerBranchesRow(ctx, *trigger.Id, branch)
if err != nil {
return err
}
}
}
}
}
}
@@ -1005,7 +1049,10 @@ func (d *doltWorkflowManager) updateExistingWorkflow(ctx *sql.Context, config *W
}
if config.On.WorkflowDispatch != nil {
// todo: create a workflow dispatch event, no triggers
_, err := d.writeWorkflowEventRow(ctx, WorkflowName(config.Name), WorkflowEventTypeWorkflowDispatch)
if err != nil {
return err
}
}
// todo: create a map of config jobs
@@ -1040,6 +1087,11 @@ func (d *doltWorkflowManager) deletePullRequestWorkflowEvents(ctx *sql.Context,
return d.sqlWriteQuery(ctx, query)
}
func (d *doltWorkflowManager) deleteWorkflowEventTriggerBranch(ctx *sql.Context, branchID WorkflowEventTriggerBranchId) error {
query := d.deleteFromWorkflowEventTriggerBranchesTableByEventTriggerBranchIdQuery(string(branchID))
return d.sqlWriteQuery(ctx, query)
}
func (d *doltWorkflowManager) deleteWorkflowEventTrigger(ctx *sql.Context, triggerID WorkflowEventTriggerId) error {
query := d.deleteFromWorkflowEventTriggersTableByWorkflowEventTriggerIdQuery(string(triggerID))
return d.sqlWriteQuery(ctx, query)