|
@@ -2,18 +2,15 @@
|
|
package buildme
|
|
package buildme
|
|
|
|
|
|
import (
|
|
import (
|
|
- "context"
|
|
|
|
|
|
+ "archive/tar"
|
|
"errors"
|
|
"errors"
|
|
- "fmt"
|
|
|
|
- "io"
|
|
|
|
|
|
+ "io/ioutil"
|
|
"os"
|
|
"os"
|
|
"os/exec"
|
|
"os/exec"
|
|
|
|
|
|
- "dev.hexasoftware.com/hxs/prettylog"
|
|
|
|
|
|
+ yaml "gopkg.in/yaml.v2"
|
|
|
|
|
|
- "github.com/docker/docker/api/types"
|
|
|
|
- "github.com/docker/docker/api/types/container"
|
|
|
|
- docker "github.com/docker/docker/client"
|
|
|
|
|
|
+ "dev.hexasoftware.com/hxs/prettylog"
|
|
)
|
|
)
|
|
|
|
|
|
var (
|
|
var (
|
|
@@ -30,6 +27,33 @@ func New() *BuildMe {
|
|
return &BuildMe{}
|
|
return &BuildMe{}
|
|
}*/
|
|
}*/
|
|
|
|
|
|
|
|
+func Prepare(p *Project) {
|
|
|
|
+ var err error
|
|
|
|
+ var thead *tar.Header
|
|
|
|
+
|
|
|
|
+ pr := p.Reader()
|
|
|
|
+ defer pr.Close()
|
|
|
|
+ tr := tar.NewReader(pr)
|
|
|
|
+ for {
|
|
|
|
+ thead, err = tr.Next()
|
|
|
|
+ if err != nil {
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ if thead.FileInfo().Name() == "buildme.yml" {
|
|
|
|
+ break // found
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if thead == nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ data, err := ioutil.ReadAll(tr)
|
|
|
|
+ ydata := map[string]interface{}{}
|
|
|
|
+ yaml.Unmarshal(data, &ydata)
|
|
|
|
+ log.Println("buildme found, Reading instructions")
|
|
|
|
+ log.Println("Sequence:", ydata["SEQ"])
|
|
|
|
+}
|
|
|
|
+
|
|
//Fetch fetches a Tar file from path/url
|
|
//Fetch fetches a Tar file from path/url
|
|
func Fetch(ftype string, fpath string) (*Project, error) {
|
|
func Fetch(ftype string, fpath string) (*Project, error) {
|
|
fetcher, ok := fetchers[ftype]
|
|
fetcher, ok := fetchers[ftype]
|
|
@@ -52,57 +76,11 @@ func Build(ftype string, fpath string) error {
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
defer proj.Close()
|
|
defer proj.Close()
|
|
|
|
+ Prepare(proj)
|
|
|
|
|
|
|
|
+ proj.Docker()
|
|
//addDockerfile(proj)
|
|
//addDockerfile(proj)
|
|
|
|
|
|
- log.Println("New docker environ")
|
|
|
|
- cli, err := docker.NewEnvClient()
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- dockertag := fmt.Sprintf("%s-builder", proj.Name)
|
|
|
|
- log.Println("Building and tagging:", dockertag)
|
|
|
|
- ///////////////
|
|
|
|
- /// DOCKER OPERATION / BUILDER operation
|
|
|
|
- ctx := context.Background()
|
|
|
|
- {
|
|
|
|
- log.Println("Docker image build dockerfile:", proj.Dockerfile)
|
|
|
|
- imageRes, err := cli.ImageBuild(ctx, proj, types.ImageBuildOptions{Tags: []string{dockertag}, Dockerfile: proj.Dockerfile})
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
- defer imageRes.Body.Close()
|
|
|
|
- io.Copy(os.Stdout, imageRes.Body) // Do some treatment somehow
|
|
|
|
- //inf, err := cli.Info(ctx)
|
|
|
|
- //log.Println("Info:", inf, err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- log.Println("Testing running the builder")
|
|
|
|
- containerName := dockertag
|
|
|
|
- containerCfg := &container.Config{AttachStdout: true, Cmd: []string{"/bin/sh", "-c", "echo $CMD"}}
|
|
|
|
- res, err := cli.ContainerCreate(ctx, containerCfg, nil, nil, containerName)
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
- log.Println("Created container ID:", res)
|
|
|
|
-
|
|
|
|
- /*log.Println("Starting container test")
|
|
|
|
- err = cli.ContainerStart(ctx, res.ID, types.ContainerStartOptions{AttachStdout: true})
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }*/
|
|
|
|
-
|
|
|
|
- log.Println("Please execute docker run", containerName, "> dist.tar.gz")
|
|
|
|
- log.Println("Trying to remove container", res)
|
|
|
|
- err = cli.ContainerRemove(ctx, res.ID, types.ContainerRemoveOptions{})
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
//////////////////////
|
|
//////////////////////
|
|
// Docker run builder
|
|
// Docker run builder
|
|
|
|
|