src/main.go

changeset 3
9273d04a4d89
parent 2
edeb8e8e02b6
child 4
e24fc79b7980
--- a/src/main.go	Mon Dec 15 19:18:04 2025 +0100
+++ b/src/main.go	Tue Dec 16 20:12:54 2025 +0100
@@ -2,8 +2,8 @@
 
 import (
 	"bytes"
+	"encoding/json"
 	"encoding/xml"
-	"errors"
 	"fmt"
 	"log"
 	"os"
@@ -31,6 +31,7 @@
 	Path      string `xml:"path"`
 	BuildEnvs string `xml:"buildenvs"`
 	Build     []struct {
+		Name        string `xml:"name,attr"`
 		IsPlatform  string `xml:"isplatform,attr"`
 		NotPlatform string `xml:"not,attr"`
 		NotList     []string
@@ -45,6 +46,18 @@
 	} `xml:"build"`
 }
 
+type Result struct {
+	Build     string `json:"build"`
+	Name      string `json:"name"`
+	Configure string `json:"configure"`
+	Compile   string `json:"compile"`
+	Check     string `json:"check"`
+}
+
+type Results struct {
+	Results []Result
+}
+
 func main() {
 	data, err := os.ReadFile("testconfig.xml")
 	if err != nil {
@@ -98,9 +111,7 @@
 			log.Fatal(err)
 		}
 
-		if err = exec_buildenvs(config, &repo, tmp); err != nil {
-			log.Fatal(err)
-		}
+		exec_buildenvs(config, &repo, tmp)
 	}
 }
 
@@ -121,6 +132,10 @@
 		log.Print("remove build.tar.gz failed")
 		return err
 	}
+	if err := os.RemoveAll(path.Join(tmp_dir, "result")); err != nil {
+		log.Print("remove result failed")
+		return err
+	}
 
 	err := os.Mkdir(buildPath, 0755)
 	if err != nil {
@@ -200,20 +215,22 @@
 	return true
 }
 
-func exec_buildenvs(config *Config, repo *Repository, tmp_dir string) error {
+func exec_buildenvs(config *Config, repo *Repository, tmp_dir string) int {
 	if len(repo.BuildEnvs) == 0 {
 		log.Print("repo %s has no buildenvs", repo.Path)
-		return nil
+		return 0
 	}
+	success := 0
 	buildenvs := strings.Split(repo.BuildEnvs, ",")
 	for _, buildenv := range buildenvs {
 		env, ok := config.BuildEnvMap[buildenv]
 		if !ok {
-			return errors.New("unknown build env: " + buildenv)
+			log.Print("unknown build env ", buildenv)
+			continue
 		}
 		if !host_is_available(env.Host) {
 			log.Print("skip unavailable host ", env.Host)
-			return nil
+			continue
 		}
 
 		// steps:
@@ -242,8 +259,36 @@
 		if err != nil {
 			log.Print("cannot execute build.sh on buildenv host ", env.Host)
 			log.Print("stderr: ", errb.String())
+			continue
 		}
+
+		// download result
+		cmd.Stdout = nil
+		cmd.Stderr = nil
+		cmd = exec.Command("scp", "-r", env.Host+":"+build_dir+"/result", tmp_dir)
+		log.Print("scp: ", cmd.Args)
+		if err := cmd.Run(); err != nil {
+			log.Print("cannot get result from buildenv")
+			continue
+		}
+
+		// parse result
+		resultData, err := os.ReadFile(path.Join(tmp_dir, "result/result.json"))
+		if err != nil {
+			log.Print("cannot read result from buildenv")
+			continue
+		}
+
+		var results []Result
+		if err := json.Unmarshal(resultData, &results); err != nil {
+			log.Print("cannot parse result.json")
+			continue
+		}
+
+		log.Print(results)
+
+		success++
 	}
 
-	return nil
+	return success
 }

mercurial