Monorepo for Tangled
tangled.org
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}