Refactoring the builder into pkg. Moving builder to indra docker folder.
This commit is contained in:
50
docker/indra/build.go
Normal file
50
docker/indra/build.go
Normal 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)
|
||||||
|
}
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
|
package docker
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
@@ -8,6 +6,7 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/Indra-Labs/indra"
|
"github.com/Indra-Labs/indra"
|
||||||
|
log2 "github.com/cybriq/proc/pkg/log"
|
||||||
"github.com/docker/cli/cli/config/configfile"
|
"github.com/docker/cli/cli/config/configfile"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
@@ -20,6 +19,11 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
log = log2.GetLogger(indra.PathBase)
|
||||||
|
check = log.E.Chk
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
buildContextFilePath = "/tmp/indra-build.tar"
|
buildContextFilePath = "/tmp/indra-build.tar"
|
||||||
buildOpts = types.ImageBuildOptions{
|
buildOpts = types.ImageBuildOptions{
|
||||||
@@ -35,13 +39,13 @@ var (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
type Client struct {
|
type Builder struct {
|
||||||
*client.Client
|
*client.Client
|
||||||
|
|
||||||
ctx context.Context
|
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)
|
log.I.Ln("building", buildOpts.Tags[0], "from", buildOpts.Dockerfile)
|
||||||
|
|
||||||
@@ -84,7 +88,7 @@ func (cli *Client) BuildImage() (err error) {
|
|||||||
return
|
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...")
|
log.I.Ln("pushing tagged images to repository...")
|
||||||
|
|
||||||
@@ -132,3 +136,11 @@ func (cli *Client) PushTags(opts types.ImagePushOptions) (err error) {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewBuilder(ctx context.Context, cli *client.Client) (builder *Builder) {
|
||||||
|
|
||||||
|
return &Builder{
|
||||||
|
cli,
|
||||||
|
ctx,
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user