Sat, 20 Dec 2025 23:10:56 +0100
add sqlite
| 0 | 1 | package main |
| 2 | ||
| 3 | import ( | |
| 4 | "bytes" | |
| 10 | 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 | 7 | "encoding/xml" |
|
8
2e9b3f85c949
prepare for windows build environments
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
6
diff
changeset
|
8 | "errors" |
| 0 | 9 | "fmt" |
| 10 | "log" | |
| 11 | "os" | |
| 12 | "os/exec" | |
| 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 | 16 | "text/template" |
| 10 | 17 | |
| 18 | _ "modernc.org/sqlite" | |
| 0 | 19 | ) |
| 20 | ||
| 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 | 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 | 55 | } |
| 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 | 85 | func main() { |
| 86 | data, err := os.ReadFile("testconfig.xml") | |
| 87 | if err != nil { | |
| 88 | log.Fatal(err) | |
| 89 | } | |
| 90 | ||
| 10 | 91 | db, err := sql.Open("sqlite", "uwbuild.db") |
| 92 | if err != nil { | |
| 93 | log.Fatal(err) | |
| 94 | } | |
| 95 | defer db.Close() | |
| 96 | ||
| 97 | err = prepare_db(db) | |
| 98 | if err != nil { | |
| 99 | log.Fatal(err) | |
| 100 | } | |
| 101 | ||
| 0 | 102 | config := &Config{} |
| 103 | if err := xml.Unmarshal(data, &config); err != nil { | |
| 104 | log.Fatal(err) | |
| 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 | 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 | 118 | templateStr, err := os.ReadFile("build.template") |
| 119 | if err != nil { | |
| 120 | log.Fatal(err) | |
| 121 | } | |
| 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 | 138 | if err != nil { |
| 139 | log.Fatal(err) | |
| 140 | } | |
| 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 | 147 | err = os.Mkdir("tmp", 0755) |
| 148 | if err != nil && !os.IsExist(err) { | |
| 149 | log.Fatal(err) | |
| 150 | } | |
| 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 | 154 | |
| 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 | 169 | log.Fatal(err) |
| 170 | } | |
| 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 | 180 | |
| 10 | 181 | func prepare_db(db *sql.DB) error { |
| 182 | _, err := db.Exec(` | |
| 183 | create table Repository ( | |
| 184 | id integer primary key autoincrement, | |
| 185 | path text not null, | |
| 186 | name text not null | |
| 187 | ); | |
| 188 | create table RepoCommit ( | |
| 189 | id integer primary key autoincrement, | |
| 190 | repository_id integer not null, | |
| 191 | node text, | |
| 192 | node_short text, | |
| 193 | author text, | |
| 194 | description text, | |
| 195 | date text | |
| 196 | );`) | |
| 197 | return err | |
| 198 | } | |
| 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 | 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 | 341 | } |
| 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 | 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 | 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 | 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 | 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 | } |