@@ -5,11 +5,11 @@ import (
55 "fmt"
66 "os"
77 "os/exec"
8+ "path/filepath"
89 "regexp"
910 "strings"
1011
1112 "github.com/replicate/cog/pkg/console"
12-
1313 "github.com/replicate/cog/pkg/logger"
1414 "github.com/replicate/cog/pkg/shell"
1515)
@@ -27,26 +27,16 @@ func NewLocalImageBuilder(registry string) *LocalImageBuilder {
2727 return & LocalImageBuilder {registry : registry }
2828}
2929
30- func (b * LocalImageBuilder ) BuildAndPush (dir string , dockerfilePath string , name string , logWriter logger.Logger ) (fullImageTag string , err error ) {
31- tag , err := b .build (dir , dockerfilePath , logWriter )
32- if err != nil {
33- return "" , err
34- }
35- fullImageTag = fmt .Sprintf ("%s/%s:%s" , b .registry , name , tag )
36- if err := b .tag (tag , fullImageTag , logWriter ); err != nil {
37- return "" , err
38- }
39- if b .registry != noRegistry {
40- if err := b .push (fullImageTag , logWriter ); err != nil {
41- return "" , err
42- }
43- }
44- return fullImageTag , nil
45- }
46-
47- func (b * LocalImageBuilder ) build (dir string , dockerfilePath string , logWriter logger.Logger ) (tag string , err error ) {
30+ func (b * LocalImageBuilder ) Build (dir string , dockerfileContents string , name string , logWriter logger.Logger ) (tag string , err error ) {
4831 console .Debugf ("Building in %s" , dir )
4932
33+ // TODO(andreas): pipe dockerfile contents to builder
34+ relDockerfilePath := "Dockerfile"
35+ dockerfilePath := filepath .Join (dir , relDockerfilePath )
36+ if err := os .WriteFile (dockerfilePath , []byte (dockerfileContents ), 0644 ); err != nil {
37+ return "" , fmt .Errorf ("Failed to write Dockerfile" )
38+ }
39+
5040 cmd := exec .Command (
5141 "docker" , "build" , "." ,
5242 "--progress" , "plain" ,
@@ -76,25 +66,41 @@ func (b *LocalImageBuilder) build(dir string, dockerfilePath string, logWriter l
7666
7767 dockerTag := <- tagChan
7868
69+ if err != nil {
70+ return "" , err
71+ }
72+
7973 logWriter .Infof ("Successfully built %s" , dockerTag )
8074
81- return dockerTag , err
75+ tag = dockerTag
76+ if name != "" {
77+ tag = fmt .Sprintf ("%s/%s:%s" , b .registry , name , dockerTag )
78+ if err := b .tag (dockerTag , tag , logWriter ); err != nil {
79+ return "" , err
80+ }
81+ }
82+
83+ return tag , nil
8284}
8385
84- func (b * LocalImageBuilder ) tag (tag string , fullImageTag string , logWriter logger.Logger ) error {
85- console .Debugf ("Tagging %s as %s" , tag , fullImageTag )
86+ func (b * LocalImageBuilder ) tag (dockerTag string , tag string , logWriter logger.Logger ) error {
87+ console .Debugf ("Tagging %s as %s" , dockerTag , tag )
8688
87- cmd := exec .Command ("docker" , "tag" , tag , fullImageTag )
89+ cmd := exec .Command ("docker" , "tag" , dockerTag , tag )
8890 cmd .Env = os .Environ ()
8991 if _ , err := cmd .Output (); err != nil {
9092 ee := err .(* exec.ExitError )
9193 stderr := string (ee .Stderr )
92- return fmt .Errorf ("Failed to tag %s as %s, got error: %s" , tag , fullImageTag , stderr )
94+ return fmt .Errorf ("Failed to tag %s as %s, got error: %s" , dockerTag , tag , stderr )
9395 }
9496 return nil
9597}
9698
97- func (b * LocalImageBuilder ) push (tag string , logWriter logger.Logger ) error {
99+ func (b * LocalImageBuilder ) Push (tag string , logWriter logger.Logger ) error {
100+ if b .registry == noRegistry {
101+ return nil
102+ }
103+
98104 logWriter .Infof ("Pushing %s to registry" , tag )
99105
100106 args := []string {"push" , tag }
0 commit comments