Refactoring the builder into pkg. Moving builder to indra docker folder.

This commit is contained in:
Colin Lyons
2022-12-28 15:36:28 +00:00
parent a8512c6c36
commit 8c4313a1ea
3 changed files with 68 additions and 103 deletions

50
docker/indra/build.go Normal file
View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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,
}
}