package lifecycle import ( "errors" "fmt" "os" "github.com/kunchenguid/no-mistakes/internal/db" "github.com/kunchenguid/no-mistakes/internal/paths" ) // ActiveRuns returns all pending/running pipeline runs from the local state DB. func ActiveRuns(p *paths.Paths) ([]*db.Run, error) { if p == nil { return nil, nil } dbPath := p.DB() if _, err := os.Stat(dbPath); err != nil { if errors.Is(err, os.ErrNotExist) { return nil, nil } return nil, fmt.Errorf("stat database: %w", err) } database, err := db.Open(dbPath) if err != nil { return nil, err } defer database.Close() return database.GetActiveRuns() } func RunList(runs []*db.Run) string { if len(runs) == 0 { return "" } out := "active pipeline runs:\n" for _, run := range runs { out += fmt.Sprintf(" %s %s %s %s\n", run.ID, run.Status, run.Branch, ShortSHA(run.HeadSHA)) } return out } func ShortSHA(sha string) string { if len(sha) <= 8 { return sha } return sha[:8] }