Something went wrong. Try again.
Monorepo for Tangled tangled.org
Something went wrong. Try again.
Go
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124package db
import ( "context" "time")
type ScheduledRepo struct { RepoDid string Branch string SHA string}
type WorkflowSchedule struct { RepoDid string Workflow string Expression string Timezone string Branch string SHA string}
func (d *DB) ReplaceWorkflowSchedules(ctx context.Context, repo ScheduledRepo, schedules []WorkflowSchedule, refreshedAt time.Time) error { tx, err := d.BeginTx(ctx, nil) if err != nil { return err } defer tx.Rollback()
if _, err := tx.ExecContext(ctx, ` insert into scheduled_repos (repo_did, branch, sha, refreshed_at) values (?, ?, ?, ?) on conflict(repo_did) do update set branch = excluded.branch, sha = excluded.sha, refreshed_at = excluded.refreshed_at `, repo.RepoDid, repo.Branch, repo.SHA, refreshedAt.Unix()); err != nil { return err } if _, err := tx.ExecContext(ctx, `delete from workflow_schedules where repo_did = ?`, repo.RepoDid); err != nil { return err } for _, schedule := range schedules { timezone := schedule.Timezone if timezone == "" { timezone = "UTC" } if _, err := tx.ExecContext(ctx, ` insert or ignore into workflow_schedules (repo_did, workflow, expression, timezone) values (?, ?, ?, ?) `, repo.RepoDid, schedule.Workflow, schedule.Expression, timezone); err != nil { return err } } return tx.Commit()}
func (d *DB) WorkflowSchedules(ctx context.Context) ([]WorkflowSchedule, error) { rows, err := d.QueryContext(ctx, ` select ws.repo_did, ws.workflow, ws.expression, ws.timezone, coalesce(sr.branch, ''), coalesce(sr.sha, '') from workflow_schedules ws join scheduled_repos sr on sr.repo_did = ws.repo_did where coalesce(sr.branch, '') <> '' and coalesce(sr.sha, '') <> '' order by ws.repo_did, ws.workflow, ws.expression, ws.timezone `) if err != nil { return nil, err } defer rows.Close()
var schedules []WorkflowSchedule for rows.Next() { var schedule WorkflowSchedule if err := rows.Scan( &schedule.RepoDid, &schedule.Workflow, &schedule.Expression, &schedule.Timezone, &schedule.Branch, &schedule.SHA, ); err != nil { return nil, err } schedules = append(schedules, schedule) } return schedules, rows.Err()}
func (d *DB) UnindexedScheduleRepos(ctx context.Context) ([]Repo, error) { rows, err := d.QueryContext(ctx, ` select knot, owner, rkey, coalesce(repo_did, ''), coalesce(name, '') from repos where coalesce(repo_did, '') <> '' and not exists ( select 1 from scheduled_repos where scheduled_repos.repo_did = repos.repo_did and coalesce(scheduled_repos.branch, '') <> '' and coalesce(scheduled_repos.sha, '') <> '' ) order by repos.id `) if err != nil { return nil, err } defer rows.Close()
var repos []Repo for rows.Next() { repo, err := scanRepo(rows) if err != nil { return nil, err } repos = append(repos, *repo) } return repos, rows.Err()}
func (d *DB) RemoveWorkflowSchedules(ctx context.Context, repoDid string) error { _, err := d.ExecContext(ctx, `delete from scheduled_repos where repo_did = ?`, repoDid) return err}