diff --git a/docker/indra/build.go b/docker/indra/build.go new file mode 100644 index 00000000..3c1033fa --- /dev/null +++ b/docker/indra/build.go @@ -0,0 +1,50 @@ +package main + +import ( + "context" + "github.com/Indra-Labs/indra" + "github.com/Indra-Labs/indra/pkg/docker" + log2 "github.com/cybriq/proc/pkg/log" + "github.com/docker/docker/api/types" + "github.com/docker/docker/client" + "os" + "time" +) + +var ( + log = log2.GetLogger(indra.PathBase) + check = log.E.Chk +) + +func main() { + + var err error + var cli *client.Client + + if cli, err = client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()); err != nil { + panic(err) + } + + defer cli.Close() + + // Set a Timeout for 120 seconds + ctx, cancel := context.WithTimeout(context.Background(), time.Second * 120) + + defer cancel() + + var builder = docker.NewBuilder(ctx, cli) + + if err = builder.Build(); check(err) { + os.Exit(1) + } + + if err = builder.Push(types.ImagePushOptions{}); check(err) { + os.Exit(1) + } + + if err = builder.Close(); check(err) { + os.Exit(1) + } + + os.Exit(0) +} diff --git a/docker/sim/main.go b/docker/sim/main.go deleted file mode 100644 index b6fcf588..00000000 --- a/docker/sim/main.go +++ /dev/null @@ -1,97 +0,0 @@ -package main - -import ( - "context" - "github.com/Indra-Labs/indra" - log2 "github.com/cybriq/proc/pkg/log" - "github.com/docker/docker/api/types" - "github.com/docker/docker/client" - "os" - "time" -) - -var ( - log = log2.GetLogger(indra.PathBase) - check = log.E.Chk -) - -func Setup() (err error) { - - return nil -} - -func Run() (err error){ - - return nil -} - -func Teardown() (err error) { - - return nil -} - -func main() { - - var err error - var cli *client.Client - - if cli, err = client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()); err != nil { - panic(err) - } - - defer cli.Close() - - // Set a Timeout for 120 seconds - ctx, cancel := context.WithTimeout(context.Background(), time.Second * 120) - - defer cancel() - - client := Client{ - cli, - ctx, - } - - if err = client.BuildImage(); check(err) { - return - } - - if err = client.PushTags(types.ImagePushOptions{}); check(err) { - return - } - - /*reader, err := cli.ImagePull(ctx, "docker.io/library/alpine", types.ImagePullOptions{}) - if err != nil { - panic(err) - } - io.Copy(os.Stdout, reader) - - resp, err := cli.ContainerCreate(ctx, &container.Config{ - Image: "alpine", - Cmd: []string{"echo", "hello world"}, - }, nil, nil, nil, "") - if err != nil { - panic(err) - } - - if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { - panic(err) - } - - statusCh, errCh := cli.ContainerWait(ctx, resp.ID, container.WaitConditionNotRunning) - select { - case err := <-errCh: - if err != nil { - panic(err) - } - case <-statusCh: - } - - out, err := cli.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true}) - if err != nil { - panic(err) - } - - stdcopy.StdCopy(os.Stdout, os.Stderr, out)*/ - - os.Exit(0) -} diff --git a/docker/sim/client.go b/pkg/docker/builder.go similarity index 88% rename from docker/sim/client.go rename to pkg/docker/builder.go index 86de8e23..db4e50de 100644 --- a/docker/sim/client.go +++ b/pkg/docker/builder.go @@ -1,6 +1,4 @@ - - -package main +package docker import ( "bytes" @@ -8,6 +6,7 @@ import ( "encoding/base64" "encoding/json" "github.com/Indra-Labs/indra" + log2 "github.com/cybriq/proc/pkg/log" "github.com/docker/cli/cli/config/configfile" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" @@ -20,6 +19,11 @@ import ( "os" ) +var ( + log = log2.GetLogger(indra.PathBase) + check = log.E.Chk +) + var ( buildContextFilePath = "/tmp/indra-build.tar" buildOpts = types.ImageBuildOptions{ @@ -35,13 +39,13 @@ var ( } ) -type Client struct { +type Builder struct { *client.Client ctx context.Context } -func (cli *Client) BuildImage() (err error) { +func (cli *Builder) Build() (err error) { log.I.Ln("building", buildOpts.Tags[0], "from", buildOpts.Dockerfile) @@ -84,7 +88,7 @@ func (cli *Client) BuildImage() (err error) { return } -func (cli *Client) PushTags(opts types.ImagePushOptions) (err error) { +func (cli *Builder) Push(opts types.ImagePushOptions) (err error) { log.I.Ln("pushing tagged images to repository...") @@ -132,3 +136,11 @@ func (cli *Client) PushTags(opts types.ImagePushOptions) (err error) { return nil } + +func NewBuilder(ctx context.Context, cli *client.Client) (builder *Builder) { + + return &Builder{ + cli, + ctx, + } +}