src/main.go

Sat, 20 Dec 2025 23:10:56 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 20 Dec 2025 23:10:56 +0100
changeset 10
a4537989ed09
parent 9
eef1439666f7
permissions
-rw-r--r--

add sqlite

0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 package main
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 import (
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 "bytes"
10
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
5 "database/sql"
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
6 "encoding/json"
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 "encoding/xml"
8
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
8 "errors"
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 "fmt"
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 "log"
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 "os"
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 "os/exec"
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 "path"
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
14 "strconv"
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
15 "strings"
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 "text/template"
10
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
17
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
18 _ "modernc.org/sqlite"
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 )
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 type Config struct {
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
22 XMLName xml.Name `xml:"config"`
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
23 BuildEnv []BuildEnv `xml:"buildenv"`
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
24 BuildEnvMap map[string]BuildEnv
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
25
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
26 Repository []Repository `xml:"repository"`
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
27 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
28
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
29 type BuildEnv struct {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
30 Name string `xml:"name,attr"`
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
31 Host string `xml:"host"`
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
32 User string `xml:"user"`
8
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
33 OS string `xml:"os"`
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
34 }
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
36 type Build struct {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
37 Name string `xml:"name,attr"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
38 IsPlatform string `xml:"isplatform,attr"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
39 NotPlatform string `xml:"not,attr"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
40 NotList []string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
41 Test []string `xml:"test"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
42 Var []struct {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
43 Name string `xml:"name,attr"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
44 Value string `xml:",chardata"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
45 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
46 Configure string `xml:"configure"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
47 Compile string `xml:"compile"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
48 Check string `xml:"check"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
49 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
50
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
51 type Repository struct {
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
52 Path string `xml:"path"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
53 BuildEnvs string `xml:"buildenvs"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
54 Build []Build `xml:"build"`
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
57 type Result struct {
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
58 Build *Build
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
59 Id string `json:"build"`
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
60 Name string `json:"name"`
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
61 Configure string `json:"configure"`
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
62 Compile string `json:"compile"`
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
63 Check string `json:"check"`
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
64 }
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
65
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
66 type BuildEnvResult struct {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
67 Env *BuildEnv
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
68 Results []Result
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
69 }
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
70
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
71 type Commit struct {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
72 Rev string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
73 NodeShort string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
74 Node string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
75 Desc string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
76 Author string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
77 Date string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
78 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
79
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
80 type CommitResult struct {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
81 Commit *Commit
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
82 Results []BuildEnvResult
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
83 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
84
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 func main() {
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 data, err := os.ReadFile("testconfig.xml")
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 if err != nil {
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88 log.Fatal(err)
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90
10
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
91 db, err := sql.Open("sqlite", "uwbuild.db")
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
92 if err != nil {
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
93 log.Fatal(err)
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
94 }
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
95 defer db.Close()
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
96
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
97 err = prepare_db(db)
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
98 if err != nil {
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
99 log.Fatal(err)
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
100 }
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
101
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 config := &Config{}
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103 if err := xml.Unmarshal(data, &config); err != nil {
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 log.Fatal(err)
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 }
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
106 config.BuildEnvMap = make(map[string]BuildEnv)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
107 for _, env := range config.BuildEnv {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
108 config.BuildEnvMap[env.Name] = env
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
109 }
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110
2
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
111 for ri := range config.Repository {
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
112 for bi := range config.Repository[ri].Build {
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
113 build := &config.Repository[ri].Build[bi]
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
114 build.NotList = strings.Split(build.NotPlatform, ",")
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
115 }
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
116 }
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
117
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118 templateStr, err := os.ReadFile("build.template")
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 if err != nil {
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 log.Fatal(err)
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122
9
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
123 templateStr2, err := os.ReadFile("build.ps1.template")
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
124 if err != nil {
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
125 log.Fatal(err)
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
126 }
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
127
2
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
128 funcs := template.FuncMap{
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
129 "add": func(i int, n int) int {
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
130 return i + n
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
131 },
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
132 "sub": func(i int, n int) int {
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
133 return i - n
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
134 },
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
135 }
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
136
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
137 tpl, err := template.New("").Funcs(funcs).Parse(string(templateStr))
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
138 if err != nil {
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
139 log.Fatal(err)
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
140 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
141
9
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
142 tpl2, err := template.New("").Funcs(funcs).Parse(string(templateStr2))
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
143 if err != nil {
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
144 log.Fatal(err)
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
145 }
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
146
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
147 err = os.Mkdir("tmp", 0755)
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 if err != nil && !os.IsExist(err) {
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149 log.Fatal(err)
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
152 tmp := "tmp"
5
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
153 out := "out"
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155 for _, repo := range config.Repository {
5
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
156 commit := get_commit_info(repo.Path)
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
157 if commit == nil {
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
158 log.Print("cannot get current commit info for repo ", repo.Path)
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
159 continue
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
160 }
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
161 result_dir := path.Join(out, commit.Node)
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
162 _, err := os.Stat(result_dir)
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
163 if err == nil {
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
164 log.Printf("repository %s commit %s already built", repo.Path, commit.NodeShort)
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
165 continue
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
166 }
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
167
9
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
168 if err := create_repo_archive(&repo, tpl, tpl2, tmp); err != nil {
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
169 log.Fatal(err)
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
172 results := exec_buildenvs(config, &repo, tmp)
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
173
5
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
174 err = save_result(&repo, commit, results, tmp)
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
175 if err != nil {
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
176 log.Print("cannot save results for commit ", commit.NodeShort)
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
177 }
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
178 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
179 }
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
180
10
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
181 func prepare_db(db *sql.DB) error {
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
182 _, err := db.Exec(`
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
183 create table Repository (
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
184 id integer primary key autoincrement,
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
185 path text not null,
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
186 name text not null
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
187 );
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
188 create table RepoCommit (
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
189 id integer primary key autoincrement,
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
190 repository_id integer not null,
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
191 node text,
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
192 node_short text,
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
193 author text,
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
194 description text,
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
195 date text
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
196 );`)
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
197 return err
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
198 }
a4537989ed09 add sqlite
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 9
diff changeset
199
9
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
200 func create_repo_archive(repo *Repository, tpl *template.Template, tpl2 *template.Template, tmp_dir string) error {
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
201 // create a build directory, that contains the repository source
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
202 // and build scripts
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
203 buildPath := path.Join(tmp_dir, "build")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
204
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
205 if err := os.RemoveAll(buildPath); err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
206 log.Print("remove build dir failed: ", err)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
207 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
208 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
209 if err := os.RemoveAll(path.Join(tmp_dir, "build.tar")); err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
210 log.Print("remove build.tar failed")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
211 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
212 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
213 if err := os.RemoveAll(path.Join(tmp_dir, "build.tar.gz")); err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
214 log.Print("remove build.tar.gz failed")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
215 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
216 }
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
217 if err := os.RemoveAll(path.Join(tmp_dir, "result")); err != nil {
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
218 log.Print("remove result failed")
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
219 return err
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
220 }
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
221
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
222 err := os.Mkdir(buildPath, 0755)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
223 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
224 log.Print("mkdir build dir failed: ", err)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
225 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
226 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
227
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
228 // update repository and copy it to the build directory
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
229 cmd := exec.Command("hg", "pull")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
230 var outb, errb bytes.Buffer
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
231 cmd.Dir = repo.Path
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
232 cmd.Stdout = &outb
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
233 cmd.Stderr = &errb
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
234 err = cmd.Run()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
235 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
236 log.Print("hg: ", errb.String())
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
237 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
238 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
239
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
240 outb.Reset()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
241 errb.Reset()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
242 cmd = exec.Command("hg", "update")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
243 cmd.Dir = repo.Path
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
244 cmd.Stdout = &outb
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
245 cmd.Stderr = &errb
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
246 err = cmd.Run()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
247 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
248 log.Print("hg: ", errb.String())
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
249 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
250 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
251
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
252 // copy repository to the tmp_dir build directory
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
253 cmd = exec.Command("cp", "-r", repo.Path, path.Join(buildPath, "src"))
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
254 err = cmd.Run()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
255 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
256 log.Print("cannot copy the repository to the build dir")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
257 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
258 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
259
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
260 // create build script
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
261 file, err := os.Create(path.Join(buildPath, "build.sh"))
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
262 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
263 log.Print("cannot create build.sh")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
264 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
265 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
266 defer file.Close()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
267
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
268 err = tpl.Execute(file, repo)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
269 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
270 log.Print("cannot execute build.sh template")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
271 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
272 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
273 file.Chmod(0755)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
274
9
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
275 file2, err := os.Create(path.Join(buildPath, "build.ps1"))
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
276 if err != nil {
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
277 log.Print("cannot create build.ps1")
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
278 return err
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
279 }
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
280 defer file2.Close()
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
281 err = tpl2.Execute(file2, repo)
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
282 if err != nil {
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
283 log.Print("cannot execute build.ps1 template")
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
284 return err
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
285 }
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
286
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
287 // create tarball
9
eef1439666f7 add powershell build script template
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
288 cmd = exec.Command("tar", "cvf", "../build.tar", "src", "build.sh", "build.ps1")
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
289 cmd.Dir = buildPath
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
290 if err := cmd.Run(); err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
291 log.Print("tar error")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
292 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
293 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
294
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
295 cmd = exec.Command("gzip", path.Join(tmp_dir, "build.tar"))
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
296 if err := cmd.Run(); err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
297 log.Print("gzip error")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
298 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
299 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
300
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
301 return nil
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
302 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
303
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
304 func host_is_available(host string) bool {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
305 cmd := exec.Command("ping", "-c", "1", host)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
306 if err := cmd.Run(); err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
307 return false
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
308 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
309 return true
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
310 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
311
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
312 func get_build(builds []Build, id string) *Build {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
313 i, err := strconv.Atoi(id)
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
314 if err != nil {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
315 return nil
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
316 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
317 if i < 0 || i >= len(builds) {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
318 return nil
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
319 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
320 return &builds[i]
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
321 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
322
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
323 func exec_buildenvs(config *Config, repo *Repository, tmp_dir string) []BuildEnvResult {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
324 var buildResults []BuildEnvResult
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
325
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
326 if len(repo.BuildEnvs) == 0 {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
327 log.Print("repo %s has no buildenvs", repo.Path)
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
328 return buildResults
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
329 }
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
330
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
331 buildenvs := strings.Split(repo.BuildEnvs, ",")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
332 for _, buildenv := range buildenvs {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
333 env, ok := config.BuildEnvMap[buildenv]
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
334 if !ok {
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
335 log.Print("unknown build env ", buildenv)
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
336 continue
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
337 }
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
338 if !host_is_available(env.Host) {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
339 log.Print("skip unavailable host ", env.Host)
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
340 continue
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
341 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
342
8
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
343 // exec posix or windows build script
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
344 var result BuildEnvResult
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
345 var err error
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
346 if env.OS == "windows" {
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
347 result, err = exec_win_buildenv(config, repo, &env, tmp_dir)
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
348 } else {
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
349 result, err = exec_posix_buildenv(config, repo, &env, tmp_dir)
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
350 }
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
351 if err != nil {
8
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
352 log.Print("buildenv exec error: ", err)
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
353 continue
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
354 }
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
355
8
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
356 buildResults = append(buildResults, result)
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
357 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
358
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
359 return buildResults
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
360 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
361
8
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
362 func exec_posix_buildenv(config *Config, repo *Repository, env *BuildEnv, tmp_dir string) (BuildEnvResult, error) {
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
363 result := BuildEnvResult{}
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
364
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
365 // steps:
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
366 // upload build.tar.gz
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
367 // extract build.tar.gz on the buildenv host and run build.sh
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
368
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
369 // upload using scp
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
370 cmd := exec.Command("scp", path.Join(tmp_dir, "build.tar.gz"), env.Host+":")
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
371 log.Print("scp: ", cmd.Args)
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
372 if err := cmd.Run(); err != nil {
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
373 return result, errors.New("cannot copy build env to " + env.Host)
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
374 }
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
375
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
376 // run build.sh
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
377 build_dir := "build"
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
378 remote_command := fmt.Sprintf("sh -c 'rm -Rf %[1]s; mkdir -p %[1]s; gzip -dc build.tar.gz | tar xf - -C %[1]s ; (cd %[1]s; ./build.sh)'", build_dir)
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
379 log.Printf("host: %s: command: %s", env.Host, remote_command)
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
380
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
381 var outb, errb bytes.Buffer
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
382 cmd = exec.Command("ssh", "-t", env.Host, remote_command)
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
383 cmd.Stdout = &outb
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
384 cmd.Stderr = &errb
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
385 err := cmd.Run()
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
386 log.Printf("host: %s: stdout: %s", env.Host, outb.String())
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
387 if err != nil {
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
388 log.Print("stderr: ", errb.String())
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
389 return result, errors.New("cannot execute build.sh on buildenv host " + env.Host)
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
390 }
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
391
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
392 // download result
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
393 cmd.Stdout = nil
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
394 cmd.Stderr = nil
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
395 cmd = exec.Command("scp", "-r", env.Host+":"+build_dir+"/result", tmp_dir)
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
396 log.Print("scp: ", cmd.Args)
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
397 if err := cmd.Run(); err != nil {
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
398 return result, errors.New("cannot get result from buildenv")
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
399 }
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
400
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
401 // parse result
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
402 resultData, err := os.ReadFile(path.Join(tmp_dir, "result/result.json"))
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
403 if err != nil {
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
404 return result, errors.New("cannot read result from buildenv")
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
405 }
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
406
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
407 var results []Result
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
408 if err := json.Unmarshal(resultData, &results); err != nil {
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
409 return result, errors.New("cannot parse result.json")
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
410 }
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
411
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
412 // store the actual Build pointer in the result
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
413 for i := range results {
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
414 results[i].Build = get_build(repo.Build, results[i].Id)
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
415 }
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
416 log.Print("buildenv finished ", env.Name)
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
417
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
418 return BuildEnvResult{Env: env, Results: results}, nil
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
419 }
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
420
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
421 func exec_win_buildenv(config *Config, repo *Repository, env *BuildEnv, tmp_dir string) (BuildEnvResult, error) {
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
422 result := BuildEnvResult{}
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
423 return result, nil
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
424 }
2e9b3f85c949 prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 6
diff changeset
425
5
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
426 func get_commit_info(repo_dir string) *Commit {
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
427 var outb, errb bytes.Buffer
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
428
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
429 commit := &Commit{}
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
430
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
431 cmd := exec.Command("hg", "log", "-r", ".", "-T", "{rev}\\t{node|short}\\t{node}\\t{date|isodate}")
5
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
432 cmd.Dir = repo_dir
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
433 cmd.Stdout = &outb
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
434 cmd.Stderr = &errb
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
435 if err := cmd.Run(); err != nil {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
436 log.Print(outb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
437 log.Print(errb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
438 return nil
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
439 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
440
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
441 info := strings.Split(outb.String(), "\t")
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
442 if len(info) != 4 {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
443 log.Print(outb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
444 log.Print(errb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
445 return nil
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
446 }
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
447
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
448 commit.Rev = info[0]
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
449 commit.NodeShort = info[1]
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
450 commit.Node = info[2]
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
451 commit.Date = info[3]
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
452
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
453 outb.Reset()
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
454 errb.Reset()
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
455
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
456 cmd = exec.Command("hg", "log", "-r", ".", "-T", "{author}")
5
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
457 cmd.Dir = repo_dir
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
458 cmd.Stdout = &outb
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
459 cmd.Stderr = &errb
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
460 if err := cmd.Run(); err != nil {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
461 log.Print(outb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
462 log.Print(errb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
463 return nil
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
464 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
465 commit.Author = outb.String()
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
466
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
467 cmd = exec.Command("hg", "log", "-r", ".", "-T", "{desc}")
5
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
468 cmd.Dir = repo_dir
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
469 cmd.Stdout = &outb
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
470 cmd.Stderr = &errb
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
471 if err := cmd.Run(); err != nil {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
472 log.Print(outb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
473 log.Print(errb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
474 return nil
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
475 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
476 commit.Desc = outb.String()
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
477
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
478 return commit
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
479 }
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
480
5
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
481 func save_result(repo *Repository, commit *Commit, result []BuildEnvResult, tmp_dir string) error {
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
482 out_dir := "out/"
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
483 src := path.Join(tmp_dir, "result")
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
484 dst := path.Join(out_dir, commit.Node)
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
485
5
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
486 // move result
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
487 if err := os.Rename(src, dst); err != nil {
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
488 return err
08333803df48 save build result
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
489 }
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
490
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
491 return nil
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
492 }

mercurial