Sun, 21 Dec 2025 13:28:01 +0100
fix build template
|
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 | } |