Monorepo for Tangled tangled.org
at sl/uvpzuszrulvq 102 lines 1.9 kB view raw
1package db 2 3import ( 4 "fmt" 5 "time" 6 7 "tangled.org/core/appview/models" 8) 9 10// AddSiteDeploy records a site deploy attempt. 11func AddSiteDeploy(e Execer, deploy *models.SiteDeploy) error { 12 result, err := e.Exec(` 13 insert into site_deploys ( 14 repo_at, 15 branch, 16 dir, 17 commit_sha, 18 status, 19 trigger, 20 error 21 ) values (?, ?, ?, ?, ?, ?, ?) 22 `, 23 deploy.RepoAt, 24 deploy.Branch, 25 deploy.Dir, 26 deploy.CommitSHA, 27 string(deploy.Status), 28 string(deploy.Trigger), 29 deploy.Error, 30 ) 31 if err != nil { 32 return fmt.Errorf("failed to insert site deploy: %w", err) 33 } 34 35 id, err := result.LastInsertId() 36 if err != nil { 37 return fmt.Errorf("failed to get site deploy id: %w", err) 38 } 39 40 deploy.Id = id 41 return nil 42} 43 44// GetSiteDeploys returns recent deploy records for a repository, newest first. 45func GetSiteDeploys(e Execer, repoAt string, limit int) ([]models.SiteDeploy, error) { 46 if limit <= 0 { 47 limit = 20 48 } 49 50 rows, err := e.Query(` 51 select 52 id, 53 repo_at, 54 branch, 55 dir, 56 commit_sha, 57 status, 58 trigger, 59 error, 60 created_at 61 from site_deploys 62 where repo_at = ? 63 order by created_at desc 64 limit ? 65 `, repoAt, limit) 66 if err != nil { 67 return nil, fmt.Errorf("failed to query site deploys: %w", err) 68 } 69 defer rows.Close() 70 71 var deploys []models.SiteDeploy 72 for rows.Next() { 73 var d models.SiteDeploy 74 var createdAt string 75 76 if err := rows.Scan( 77 &d.Id, 78 &d.RepoAt, 79 &d.Branch, 80 &d.Dir, 81 &d.CommitSHA, 82 &d.Status, 83 &d.Trigger, 84 &d.Error, 85 &createdAt, 86 ); err != nil { 87 return nil, fmt.Errorf("failed to scan site deploy: %w", err) 88 } 89 90 if t, err := time.Parse(time.RFC3339, createdAt); err == nil { 91 d.CreatedAt = t 92 } 93 94 deploys = append(deploys, d) 95 } 96 97 if err := rows.Err(); err != nil { 98 return nil, fmt.Errorf("failed to iterate site deploys: %w", err) 99 } 100 101 return deploys, nil 102}