src/db.go

Sun, 21 Dec 2025 11:44:19 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 21 Dec 2025 11:44:19 +0100
changeset 11
52487a30448e
permissions
-rw-r--r--

store build result in the database

11
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 package main
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 import (
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 "database/sql"
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 "log"
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 "path"
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 _ "modernc.org/sqlite"
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 )
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 func db_init() *sql.DB {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 db, err := sql.Open("sqlite", "uwbuild.db")
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 if err != nil {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 log.Fatal(err)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 err = db_prepare(db)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 if err != nil {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 log.Fatal(err)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 return db
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 func db_prepare(db *sql.DB) error {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 _, err := db.Exec("select id from Repository")
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 if err == nil {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28 return nil
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 _, err = db.Exec(`
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 create table Repository (
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 id integer primary key autoincrement,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 path text not null unique,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35 name text not null
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 );
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 create table CommitInfo (
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 id integer primary key autoincrement,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 repository_id integer not null references Repository(id),
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 node text,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 node_short text,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 author text,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 description text,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 date text
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 );
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 create table BuildEnv (
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 id integer primary key autoincrement,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 name text not null unique,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 host text,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 os text
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 );
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 create table BuildEnvResult (
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53 id integer primary key autoincrement,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 buildenv_id integer not null references BuildEnv(id),
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 commit_id integer not null references CommitInfo(id)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 );
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 create table BuildResult (
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58 id integer primary key autoincrement,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59 buildenvresult_id integer not null references BuildEnvResult(id),
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 name text,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 isplatform text,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 notplatform text,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 config text,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 configure_cmd text,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65 compile_cmd text,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 check_cmd text,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 configure_result integer,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 compile_result integer,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 check_result integer
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70 );
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 `)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73 return err
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 func db_load_config(db *sql.DB, config *Config) {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77 for _, repo := range config.Repository {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 _, err := db.Exec(`
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 insert into Repository(path, name)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 values (?, ?)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 on conflict(path) do nothing`, repo.Path, path.Base(repo.Path))
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 if err != nil {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 log.Fatal(err)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 for _, buildenv := range config.BuildEnv {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88 _, err := db.Exec(`
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 insert into BuildEnv(name, host, os)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90 values (?, ?, ?)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91 on conflict(name) do update set
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
92 host = ?2, os = ?3;`, buildenv.Name, buildenv.Host, buildenv.OS)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93 if err != nil {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94 log.Fatal(err)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
97 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99 func db_store_results(db *sql.DB, repo *Repository, commit *Commit, result []BuildEnvResult) error {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
100 r, err := db.Exec(`
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101 insert into CommitInfo(repository_id, node, node_short, author, description, date)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 values ((select id from repository where path = ?), ?, ?, ?, ?, ?)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103 `, repo.Path, commit.Node, commit.NodeShort, commit.Author, commit.Desc, commit.Date)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 if err != nil {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 log.Fatal(err)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107 repo_id, err := r.LastInsertId()
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108 if err != nil {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109 log.Fatal(err)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112 for _, res := range result {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113 r, err := db.Exec(`
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 insert into BuildEnvResult(buildenv_id, commit_id)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115 values ((select id from BuildEnv where name = ?), ?)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 `, res.Env.Name, repo_id)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117 if err != nil {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118 return err
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 buildenvresult_id, err := r.LastInsertId()
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 for _, build := range res.Results {
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 _, err = db.Exec(`
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124 insert into BuildResult(buildenvresult_id, name, isplatform, notplatform, config,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125 configure_cmd, compile_cmd, check_cmd, configure_result, compile_result, check_result)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126 values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127 `, buildenvresult_id, build.Build.Name, build.Build.IsPlatform, build.Build.NotPlatform, "",
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128 build.Build.Configure, build.Build.Compile, build.Build.Check,
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
129 build.Configure, build.Compile, build.Check)
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
130 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
131
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132 }
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
133
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134 return nil
52487a30448e store build result in the database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
135 }

mercurial