src/main.go

Tue, 16 Dec 2025 21:16:32 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Tue, 16 Dec 2025 21:16:32 +0100
changeset 4
e24fc79b7980
parent 3
9273d04a4d89
child 5
08333803df48
permissions
-rw-r--r--

get latest commit infos

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"
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
5 "encoding/json"
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 "encoding/xml"
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 "fmt"
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 "log"
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 "os"
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 "os/exec"
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 "path"
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
12 "strconv"
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
13 "strings"
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 "text/template"
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 )
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 type Config struct {
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
18 XMLName xml.Name `xml:"config"`
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
19 BuildEnv []BuildEnv `xml:"buildenv"`
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
20 BuildEnvMap map[string]BuildEnv
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
21
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
22 Repository []Repository `xml:"repository"`
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
23 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
24
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
25 type BuildEnv struct {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
26 Name string `xml:"name,attr"`
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
27 Host string `xml:"host"`
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
28 User string `xml:"user"`
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
29 }
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
31 type Build struct {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
32 Name string `xml:"name,attr"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
33 IsPlatform string `xml:"isplatform,attr"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
34 NotPlatform string `xml:"not,attr"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
35 NotList []string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
36 Test []string `xml:"test"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
37 Var []struct {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
38 Name string `xml:"name,attr"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
39 Value string `xml:",chardata"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
40 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
41 Configure string `xml:"configure"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
42 Compile string `xml:"compile"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
43 Check string `xml:"check"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
44 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
45
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
46 type Repository struct {
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
47 Path string `xml:"path"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
48 BuildEnvs string `xml:"buildenvs"`
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
49 Build []Build `xml:"build"`
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
52 type Result struct {
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
53 Build *Build
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
54 Id string `json:"build"`
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
55 Name string `json:"name"`
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
56 Configure string `json:"configure"`
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
57 Compile string `json:"compile"`
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
58 Check string `json:"check"`
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
59 }
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
60
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
61 type BuildEnvResult struct {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
62 Env *BuildEnv
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
63 Results []Result
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 Commit struct {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
67 Rev string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
68 NodeShort string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
69 Node string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
70 Desc string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
71 Author string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
72 Date string
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
73 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
74
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
75 type CommitResult struct {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
76 Commit *Commit
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
77 Results []BuildEnvResult
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
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 func main() {
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 data, err := os.ReadFile("testconfig.xml")
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 if err != nil {
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 log.Fatal(err)
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 config := &Config{}
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 if err := xml.Unmarshal(data, &config); 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 }
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
90 config.BuildEnvMap = make(map[string]BuildEnv)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
91 for _, env := range config.BuildEnv {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
92 config.BuildEnvMap[env.Name] = env
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
93 }
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94
2
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
95 for ri := range config.Repository {
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
96 for bi := range config.Repository[ri].Build {
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
97 build := &config.Repository[ri].Build[bi]
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
98 build.NotList = strings.Split(build.NotPlatform, ",")
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
99 }
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
100 }
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
101
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 templateStr, err := os.ReadFile("build.template")
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103 if 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 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106
2
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
107 funcs := template.FuncMap{
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
108 "add": func(i int, n int) int {
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
109 return i + n
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
110 },
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
111 "sub": func(i int, n int) int {
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
112 return i - n
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
113 },
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
114 }
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 tpl, err := template.New("").Funcs(funcs).Parse(string(templateStr))
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117 if err != nil {
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118 log.Fatal(err)
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 err = os.Mkdir("tmp", 0755)
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 if err != nil && !os.IsExist(err) {
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 log.Fatal(err)
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
126 tmp := "tmp"
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128 for _, repo := range config.Repository {
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
129 if err = create_repo_archive(&repo, tpl, tmp); err != nil {
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
130 log.Fatal(err)
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
131 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
133 results := exec_buildenvs(config, &repo, tmp)
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
134
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
135 err = save_result(&repo, results, tmp)
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
136 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
137 }
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
138
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
139 func create_repo_archive(repo *Repository, tpl *template.Template, tmp_dir string) error {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
140 // 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
141 // and build scripts
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
142 buildPath := path.Join(tmp_dir, "build")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
143
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
144 if err := os.RemoveAll(buildPath); err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
145 log.Print("remove build dir failed: ", err)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
146 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
147 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
148 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
149 log.Print("remove build.tar failed")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
150 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
151 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
152 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
153 log.Print("remove build.tar.gz failed")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
154 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
155 }
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
156 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
157 log.Print("remove result failed")
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
158 return err
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
159 }
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
160
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
161 err := os.Mkdir(buildPath, 0755)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
162 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
163 log.Print("mkdir build dir failed: ", err)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
164 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
165 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
166
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
167 // 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
168 cmd := exec.Command("hg", "pull")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
169 var outb, errb bytes.Buffer
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
170 cmd.Dir = repo.Path
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
171 cmd.Stdout = &outb
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
172 cmd.Stderr = &errb
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
173 err = cmd.Run()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
174 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
175 log.Print("hg: ", errb.String())
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
176 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
177 }
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 outb.Reset()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
180 errb.Reset()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
181 cmd = exec.Command("hg", "update")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
182 cmd.Dir = repo.Path
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
183 cmd.Stdout = &outb
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
184 cmd.Stderr = &errb
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
185 err = cmd.Run()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
186 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
187 log.Print("hg: ", errb.String())
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
188 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
189 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
190
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
191 // 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
192 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
193 err = cmd.Run()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
194 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
195 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
196 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
197 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
198
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
199 // create build script
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
200 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
201 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
202 log.Print("cannot create build.sh")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
203 return err
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 defer file.Close()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
206
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
207 err = tpl.Execute(file, repo)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
208 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
209 log.Print("cannot execute build.sh template")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
210 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
211 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
212 file.Chmod(0755)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
213
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
214 // create tarball
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
215 cmd = exec.Command("tar", "cvf", "../build.tar", "src", "build.sh")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
216 cmd.Dir = buildPath
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
217 if err := cmd.Run(); err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
218 log.Print("tar error")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
219 return err
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
220 }
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 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
223 if err := cmd.Run(); err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
224 log.Print("gzip error")
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 return nil
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
229 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
230
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
231 func host_is_available(host string) bool {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
232 cmd := exec.Command("ping", "-c", "1", host)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
233 if err := cmd.Run(); err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
234 return false
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
235 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
236 return true
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
237 }
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
238
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
239 func get_build(builds []Build, id string) *Build {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
240 i, err := strconv.Atoi(id)
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
241 if err != nil {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
242 return nil
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
243 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
244 if i < 0 || i >= len(builds) {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
245 return nil
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
246 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
247 return &builds[i]
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
248 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
249
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
250 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
251 var buildResults []BuildEnvResult
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
252
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
253 if len(repo.BuildEnvs) == 0 {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
254 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
255 return buildResults
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
256 }
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
257
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
258 buildenvs := strings.Split(repo.BuildEnvs, ",")
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
259 for _, buildenv := range buildenvs {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
260 env, ok := config.BuildEnvMap[buildenv]
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
261 if !ok {
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
262 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
263 continue
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
264 }
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
265 if !host_is_available(env.Host) {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
266 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
267 continue
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
268 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
269
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
270 // steps:
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
271 // upload build.tar.gz
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
272 // extract build.tar.gz on the buildenv host and run build.sh
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
273
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
274 // upload using scp
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
275 cmd := exec.Command("scp", path.Join(tmp_dir, "build.tar.gz"), env.Host+":")
2
edeb8e8e02b6 implement build script
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1
diff changeset
276 log.Print("scp: ", cmd.Args)
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
277 if err := cmd.Run(); err != nil {
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
278 log.Print("cannot copy build env to ", env.Host)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
279 continue
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
280 }
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
281
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
282 // run build.sh
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
283 build_dir := "build"
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
284 remote_command := fmt.Sprintf("sh -c 'rm -Rf %s; mkdir -p %s; gzip -dc build.tar.gz | tar xf - -C %s ; (cd %s; ./build.sh)'", build_dir, build_dir, build_dir, build_dir)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
285 log.Printf("host: %s: command: %s", env.Host, remote_command)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
286
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
287 var outb, errb bytes.Buffer
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
288 cmd = exec.Command("ssh", "-t", env.Host, remote_command)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
289 cmd.Stdout = &outb
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
290 cmd.Stderr = &errb
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
291 err := cmd.Run()
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
292 log.Printf("host: %s: stdout: %s", env.Host, outb.String())
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
293 if err != nil {
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
294 log.Print("cannot execute build.sh on buildenv host ", env.Host)
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
295 log.Print("stderr: ", errb.String())
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
296 continue
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
297 }
3
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
298
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
299 // download result
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
300 cmd.Stdout = nil
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
301 cmd.Stderr = nil
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
302 cmd = exec.Command("scp", "-r", env.Host+":"+build_dir+"/result", tmp_dir)
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
303 log.Print("scp: ", cmd.Args)
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
304 if err := cmd.Run(); err != nil {
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
305 log.Print("cannot get result from buildenv")
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
306 continue
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
307 }
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
308
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
309 // parse result
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
310 resultData, err := os.ReadFile(path.Join(tmp_dir, "result/result.json"))
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
311 if err != nil {
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
312 log.Print("cannot read result from buildenv")
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
313 continue
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
314 }
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
315
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
316 var results []Result
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
317 if err := json.Unmarshal(resultData, &results); err != nil {
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
318 log.Print("cannot parse result.json")
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
319 continue
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
320 }
9273d04a4d89 download result from buildenv and parse result.json
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
321
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
322 // store the actual Build pointer in the result
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
323 for i := range results {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
324 results[i].Build = get_build(repo.Build, results[i].Id)
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
325 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
326 log.Print("buildenv finished ", env.Name)
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
327
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
328 envResult := BuildEnvResult{Env: &env, Results: results}
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
329 buildResults = append(buildResults, envResult)
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
330 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
331
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
332 return buildResults
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
333 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
334
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
335 func get_commit_info(tmp_dir string) *Commit {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
336 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
337
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
338 commit := &Commit{}
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
339
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
340 cmd := exec.Command("hg", "log", "-r", ".", "-T", "{rev}\\t{node|short}\\t{node}\\t{date|isodate}")
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
341 cmd.Dir = path.Join(tmp_dir, "build/src")
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
342 cmd.Stdout = &outb
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
343 cmd.Stderr = &errb
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
344 if err := cmd.Run(); err != nil {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
345 log.Print(outb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
346 log.Print(errb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
347 return nil
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
348 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
349
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
350 info := strings.Split(outb.String(), "\t")
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
351 if len(info) != 4 {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
352 log.Print(outb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
353 log.Print(errb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
354 return nil
1
05a8e80e577e add buildenv remote build.sh execution
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
355 }
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
356
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
357 commit.Rev = info[0]
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
358 commit.NodeShort = info[1]
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
359 commit.Node = info[2]
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
360 commit.Date = info[3]
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
361
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
362 outb.Reset()
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
363 errb.Reset()
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
364
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
365 cmd = exec.Command("hg", "log", "-r", ".", "-T", "{author}")
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
366 cmd.Dir = path.Join(tmp_dir, "build/src")
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
367 cmd.Stdout = &outb
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
368 cmd.Stderr = &errb
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
369 if err := cmd.Run(); err != nil {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
370 log.Print(outb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
371 log.Print(errb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
372 return nil
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
373 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
374 commit.Author = outb.String()
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
375
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
376 cmd = exec.Command("hg", "log", "-r", ".", "-T", "{desc}")
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
377 cmd.Dir = path.Join(tmp_dir, "build/src")
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
378 cmd.Stdout = &outb
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
379 cmd.Stderr = &errb
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
380 if err := cmd.Run(); err != nil {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
381 log.Print(outb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
382 log.Print(errb.String())
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
383 return nil
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
384 }
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
385 commit.Desc = outb.String()
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
386
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
387 return commit
0
75d2ad4c7dee init repo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
388 }
4
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
389
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
390 func save_result(repo *Repository, result []BuildEnvResult, tmp_dir string) error {
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
391 //out_dir := "out/"
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
392
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
393 // get commit infos
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
394 get_commit_info(tmp_dir)
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
395
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
396 return nil
e24fc79b7980 get latest commit infos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
397 }

mercurial