Sun, 14 Dec 2025 16:51:29 +0100
init repo
| .hgignore | file | annotate | diff | comparison | revisions | |
| build.template | file | annotate | diff | comparison | revisions | |
| src/go.mod | file | annotate | diff | comparison | revisions | |
| src/main.go | file | annotate | diff | comparison | revisions | |
| testconfig.xml | file | annotate | diff | comparison | revisions |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Sun Dec 14 16:51:29 2025 +0100 @@ -0,0 +1,3 @@ +^.idea/ +^tmp/ +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/build.template Sun Dec 14 16:51:29 2025 +0100 @@ -0,0 +1,5 @@ +#!/bin/sh + +echo {{ .Path }} +echo TODO +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/go.mod Sun Dec 14 16:51:29 2025 +0100 @@ -0,0 +1,3 @@ +module uwbuild + +go 1.25
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main.go Sun Dec 14 16:51:29 2025 +0100 @@ -0,0 +1,149 @@ +package main + +import ( + "bytes" + "encoding/xml" + "fmt" + "log" + "os" + "os/exec" + "path" + "text/template" +) + +type Config struct { + XMLName xml.Name `xml:"config"` + BuildEnv []struct { + Name string `xml:"name,attr"` + Host string `xml:"host"` + User string `xml:"user"` + } `xml:"buildenv"` + + Repository []struct { + Path string `xml:"path"` + BuildEnvs string `xml:"buildenvs"` + Build []struct { + IsPlatform string `xml:"isplatform,attr"` + NotPlatform string `xml:"not,attr"` + Test []string `xml:"test"` + Var []struct { + Name string `xml:"name,attr"` + Value string `xml:",chardata"` + } + Configure string `xml:"configure"` + Compile string `xml:"compile"` + Check string `xml:"check"` + } `xml:"build"` + } `xml:"repository"` +} + +func main() { + data, err := os.ReadFile("testconfig.xml") + if err != nil { + log.Fatal(err) + } + + config := &Config{} + if err := xml.Unmarshal(data, &config); err != nil { + log.Fatal(err) + } + + templateStr, err := os.ReadFile("build.template") + if err != nil { + log.Fatal(err) + } + + tpl, err := template.New("").Parse(string(templateStr)) + if err != nil { + log.Fatal(err) + } + + err = os.Mkdir("tmp", 0755) + if err != nil && !os.IsExist(err) { + log.Fatal(err) + } + + tmpDir := "tmp" + + for _, repo := range config.Repository { + // create a build directory, that contains the repository source + // and build scripts + buildPath := path.Join(tmpDir, "build") + + if err = os.RemoveAll(buildPath); err != nil { + log.Fatal(err) + } + if err = os.RemoveAll(path.Join(tmpDir, "build.tar")); err != nil { + log.Fatal(err) + } + if err = os.RemoveAll(path.Join(tmpDir, "build.tar.gz")); err != nil { + log.Fatal(err) + } + + err = os.Mkdir(buildPath, 0755) + if err != nil { + log.Fatal(err) + } + + // update repository and copy it to the build directory + cmd := exec.Command("hg", "pull") + var outb, errb bytes.Buffer + cmd.Dir = repo.Path + cmd.Stdout = &outb + cmd.Stderr = &errb + err = cmd.Run() + if err != nil { + log.Print("hg: ", errb.String()) + log.Fatal(err) + } + + outb.Reset() + errb.Reset() + cmd = exec.Command("hg", "update") + cmd.Dir = repo.Path + cmd.Stdout = &outb + cmd.Stderr = &errb + err = cmd.Run() + if err != nil { + log.Print("hg: ", errb.String()) + log.Fatal(err) + } + + // copy repository to the tmp build directory + cmd = exec.Command("cp", "-r", repo.Path, path.Join(buildPath, "src")) + err = cmd.Run() + if err != nil { + log.Fatal(err) + } + + // create build script + file, err := os.Create(path.Join(buildPath, "build.sh")) + if err != nil { + log.Fatal(err) + } + + err = tpl.Execute(file, repo) + + if err != nil { + log.Fatal(err) + } + file.Close() + + // create tarball + cmd = exec.Command("tar", "cvf", "../build.tar", "src", "build.sh") + cmd.Dir = buildPath + if err := cmd.Run(); err != nil { + log.Print("tar error") + log.Fatal(err) + } + + fmt.Println(path.Join(buildPath, "build.tar")) + cmd = exec.Command("gzip", path.Join(tmpDir, "build.tar")) + if err := cmd.Run(); err != nil { + log.Print("gzip error") + log.Fatal(err) + } + + // TODO: upload build.tar.gz to buildenvs and execute the build.sh script remotely + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testconfig.xml Sun Dec 14 16:51:29 2025 +0100 @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<config> + <buildenv name="x1"> + <host>x1</host> + </buildenv> + + <repository> + <path>../ucx</path> + <buildon>linux</buildon> + <build isplatform="linux"> + <test>true</test> + <test>which make</test> + <var name="CFLAGS">-m64</var> + <var name="LDFLAGS">-m64></var> + <configure>./configure --debug</configure> + <compile>make</compile> + <test>build/test/ucxtest</test> + </build> + </repository> +</config>