diff --git a/README.md b/README.md index 8adb054..e4dc7bf 100644 --- a/README.md +++ b/README.md @@ -110,10 +110,10 @@ the image hierarchy ## Building and running To build the binary, run the following command from the project root: ``` -go build -i -o cake +go build -i -o cake ./cmd/cake/main.go ``` -It will produce a binary compiled for the current OS/platform. Use `build.sh` to build for both linux/amd64 and darwin/amd64. +It will produce a binary compiled for the current OS/platform. Use `build.sh` to build for linux/amd64, darwin/amd64, and windows. To get a list of available options run: ``` diff --git a/build.sh b/build.sh index 2793e88..09b72ba 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,7 @@ #!/bin/bash set -e -platforms=("linux/amd64" "darwin/amd64") + +platforms=("linux/amd64" "darwin/amd64" "windows") dist_dir="dist" for platform in "${platforms[@]}" @@ -8,10 +9,13 @@ do platform_split=(${platform//\// }) GOOS=${platform_split[0]} GOARCH=${platform_split[1]} - output_name="cake-${GOOS}-${GOARCH}" + output_name="cake" if [[ ${GOOS} = "windows" ]]; then - output_name+='.exe' + output_name+="-${GOOS}.exe" + else + output_name+="-${GOOS}-${GOARCH}" fi + echo "Building for ${platform}: ${output_name}" - GOOS=${GOOS} GOARCH=${GOARCH} go build -o $dist_dir/"${output_name}" + GOOS=${GOOS} GOARCH=${GOARCH} go build -o "${output_name}" ./cmd/cake/main.go done diff --git a/main.go b/cmd/cake/main.go similarity index 68% rename from main.go rename to cmd/cake/main.go index 3b39330..e8c94b6 100644 --- a/main.go +++ b/cmd/cake/main.go @@ -5,6 +5,8 @@ import ( "fmt" "log" "os" + + "github.com/mesosphere/cake-builder/pkg/cake" ) func main() { @@ -23,8 +25,8 @@ func main() { dockerPassword := flag.String("password", "", "Password to authenticate with Docker registry") flag.Parse() - var config BuildConfig - err = config.loadConfigFromFile(currentDir + "/cake.yaml") + var config cake.BuildConfig + err = config.LoadConfigFromFile(currentDir + "/cake.yaml") if err != nil { log.Fatal(err) } @@ -33,7 +35,7 @@ func main() { config.ReleaseTag = *releaseTag config.OutputFile = *outputFile - authConfig := AuthConfig{ + authConfig := cake.AuthConfig{ DockerRegistryUrl: *registryUrl, Username: *dockerUser, Password: *dockerPassword, @@ -44,49 +46,49 @@ func main() { log.Println(config.Images) log.Println(fmt.Sprintf("[build] dry run: %t, release tag: %s, output file: %s", *dryRun, *releaseTag, *outputFile)) - images, err := transformConfigToImages(config) + images, err := cake.TransformConfigToImages(config) if err != nil { log.Fatal(err) } - buildGraph, err := createImageBuildGraph(images) + buildGraph, err := cake.CreateImageBuildGraph(images) if err != nil { log.Fatal(err) } - walkBuildGraph(buildGraph, func(image *Image) { - err = image.renderDockerfileFromTemplate(config) + cake.WalkBuildGraph(buildGraph, func(image *cake.Image) { + err = image.RenderDockerfileFromTemplate(config) if err != nil { log.Fatal(err) } - err = image.calculateChecksum() + err = image.CalculateChecksum() if err != nil { log.Fatal(err) } }) - dockerClient := NewExternalDockerClient(config.AuthConfig) + dockerClient := cake.NewExternalDockerClient(config.AuthConfig) if !*dryRun { - walkBuildGraph(buildGraph, func(image *Image) { - exists, err := imageExists(dockerClient, image, config) + cake.WalkBuildGraph(buildGraph, func(image *cake.Image) { + exists, err := cake.ImageExists(dockerClient, image, config) if err != nil { log.Fatal(err) } if !exists { - err = buildImage(dockerClient, image, config) + err = cake.BuildImage(dockerClient, image, config) if err != nil { log.Fatal(err) } - err = pushImage(dockerClient, image, config) + err = cake.PushImage(dockerClient, image, config) if err != nil { log.Fatal(err) } } }) - err = generateReport(buildGraph, config) + err = cake.GenerateReport(buildGraph, config) if err != nil { log.Fatal(err) } diff --git a/go.mod b/go.mod index 994dd21..ad0dfc6 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/mesosphere/data-services-tooling/cake-builder +module github.com/mesosphere/cake-builder go 1.13 @@ -6,7 +6,7 @@ require ( github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect github.com/Microsoft/go-winio v0.4.14 // indirect github.com/cbroglie/mustache v1.0.1 - github.com/containerd/containerd v1.3.2 // indirect + github.com/containerd/containerd v1.3.3 // indirect github.com/docker/docker v1.4.2-0.20200203170920-46ec8731fbce github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.4.0 // indirect @@ -14,8 +14,6 @@ require ( github.com/jhoonb/archivex v0.0.0-20180718040744-0488e4ce1681 github.com/morikuni/aec v1.0.0 // indirect github.com/opencontainers/image-spec v1.0.1 // indirect - golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect - google.golang.org/grpc v1.27.0 // indirect + google.golang.org/grpc v1.28.0 // indirect gopkg.in/yaml.v2 v2.2.8 - gotest.tools v2.2.0+incompatible // indirect ) diff --git a/go.sum b/go.sum index 37e93b9..f0a6a23 100644 --- a/go.sum +++ b/go.sum @@ -10,22 +10,25 @@ github.com/cbroglie/mustache v1.0.1 h1:ivMg8MguXq/rrz2eu3tw6g3b16+PQhoTn6EZAhst2 github.com/cbroglie/mustache v1.0.1/go.mod h1:R/RUa+SobQ14qkP4jtx5Vke5sDytONDQXNLPY/PO69g= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/containerd/containerd v1.3.2 h1:ForxmXkA6tPIvffbrDAcPUIB32QgXkt2XFj+F0UxetA= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/containerd/containerd v1.3.3 h1:LoIzb5y9x5l8VKAlyrbusNPXqBY0+kviRloxFUMFwKc= +github.com/containerd/containerd v1.3.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/docker/distribution v0.0.0-20171011171712-7484e51bf6af h1:ujR+JcSHkOZMctuIgvi+a/VHpTn0nSy0W7eV5p34xjg= github.com/docker/distribution v0.0.0-20171011171712-7484e51bf6af/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v1.4.2-0.20200203170920-46ec8731fbce h1:KXS1Jg+ddGcWA8e1N7cupxaHHZhit5rB9tfDU+mfjyY= github.com/docker/docker v1.4.2-0.20200203170920-46ec8731fbce/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.13.1 h1:IkZjBSIc8hBjLpqeAbeE5mca5mNgeatLHBy3GO78BWo= +github.com/docker/docker v1.13.1/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU5CAUmr9zpesgbU6SWc8/B4mflAE4= github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -48,13 +51,13 @@ github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2 github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.0.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= @@ -72,9 +75,7 @@ github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlS github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= -github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= @@ -92,10 +93,8 @@ github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM52 github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -121,7 +120,6 @@ github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zM github.com/pelletier/go-toml v1.1.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= @@ -145,7 +143,6 @@ github.com/spf13/viper v1.0.2/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7Sr github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/timakin/bodyclose v0.0.0-20190721030226-87058b9bfcec/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/ultraware/funlen v0.0.1/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= @@ -182,10 +179,7 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b h1:ag/x1USPSsqHud38I9BAC88qdNLDHHtQ4mlgQIZPPNA= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20170915040203-e531a2a1c15f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -205,11 +199,11 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2El google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -220,8 +214,6 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= diff --git a/config.go b/pkg/cake/config.go similarity index 94% rename from config.go rename to pkg/cake/config.go index 4a5741b..8e6f1da 100644 --- a/config.go +++ b/pkg/cake/config.go @@ -1,4 +1,4 @@ -package main +package cake import ( "encoding/json" @@ -51,7 +51,7 @@ func (config BuildConfig) validate() error { return nil } -func (config *BuildConfig) loadConfigFromFile(fileName string) error { +func (config *BuildConfig) LoadConfigFromFile(fileName string) error { configFile, err := ioutil.ReadFile(fileName) if err != nil { return fmt.Errorf("error reading config file: %v", err) diff --git a/docker_client.go b/pkg/cake/docker_client.go similarity index 95% rename from docker_client.go rename to pkg/cake/docker_client.go index 3e94e8b..fb6ad99 100644 --- a/docker_client.go +++ b/pkg/cake/docker_client.go @@ -1,4 +1,4 @@ -package main +package cake import ( "context" @@ -61,7 +61,7 @@ func NewExternalDockerClient(authConfig AuthConfig) *ExternalDockerClient { return &dockerClient } -func imageExists(dockerClient DockerClient, image *Image, config BuildConfig) (bool, error) { +func ImageExists(dockerClient DockerClient, image *Image, config BuildConfig) (bool, error) { tags, err := dockerClient.Tags(config.AuthConfig.DockerRegistryUrl, image.getFullName()) if err != nil { @@ -78,7 +78,7 @@ func imageExists(dockerClient DockerClient, image *Image, config BuildConfig) (b return false, nil } -func buildImage(dockerClient DockerClient, image *Image, config BuildConfig) error { +func BuildImage(dockerClient DockerClient, image *Image, config BuildConfig) error { imageConfig := image.ImageConfig tmpDir := os.TempDir() @@ -132,7 +132,7 @@ func buildImage(dockerClient DockerClient, image *Image, config BuildConfig) err return nil } -func pushImage(dockerClient DockerClient, image *Image, config BuildConfig) error { +func PushImage(dockerClient DockerClient, image *Image, config BuildConfig) error { base64Auth, err := base64Auth(config) if err != nil { return err diff --git a/docker_client_test.go b/pkg/cake/docker_client_test.go similarity index 96% rename from docker_client_test.go rename to pkg/cake/docker_client_test.go index a096a8e..8aa3406 100644 --- a/docker_client_test.go +++ b/pkg/cake/docker_client_test.go @@ -1,4 +1,4 @@ -package main +package cake import ( "context" @@ -53,7 +53,7 @@ func TestImageExists(t *testing.T) { ReleaseTag: testTag, } - exists, err := imageExists(client, &image, config) + exists, err := ImageExists(client, &image, config) if err != nil { t.Error(err) } @@ -63,7 +63,7 @@ func TestImageExists(t *testing.T) { } config.ReleaseTag = "nonexistent" - exists, err = imageExists(client, &image, config) + exists, err = ImageExists(client, &image, config) if err != nil { t.Error(err) } @@ -112,7 +112,7 @@ func TestImageBuild(t *testing.T) { sort.Strings(expectedTags) dockerClient := new(MockDockerClient) - err = buildImage(dockerClient, &image, buildConfig) + err = BuildImage(dockerClient, &image, buildConfig) if err != nil { t.Error(err) } @@ -185,7 +185,7 @@ func TestPushImage(t *testing.T) { sort.Strings(expectedTags) dockerClient := new(MockDockerClient) - err = pushImage(dockerClient, &image, buildConfig) + err = PushImage(dockerClient, &image, buildConfig) if err != nil { t.Error(err) } diff --git a/image_tree.go b/pkg/cake/image_tree.go similarity index 95% rename from image_tree.go rename to pkg/cake/image_tree.go index 197ade0..ddff0be 100644 --- a/image_tree.go +++ b/pkg/cake/image_tree.go @@ -1,4 +1,4 @@ -package main +package cake import ( "errors" @@ -68,7 +68,7 @@ func getTagSuffixStr(image Image) string { // Transforms list of config items into independent Tree nodes. // Checks for duplicate IDs and multiple parents (images with no parent defined) -func transformConfigToImages(config BuildConfig) (images map[string]*Image, err error) { +func TransformConfigToImages(config BuildConfig) (images map[string]*Image, err error) { imageMap := make(map[string]*Image) var baseImage *Image for _, imageConfig := range config.Images { @@ -94,7 +94,7 @@ func transformConfigToImages(config BuildConfig) (images map[string]*Image, err } // Constructs a tree/DAG of images and performs cycle detection check and orphaned images check -func createImageBuildGraph(images map[string]*Image) (image *Image, err error) { +func CreateImageBuildGraph(images map[string]*Image) (image *Image, err error) { // using sorted slice of image ids to maintain consistent building of the target graph // which can not be achieved by iterating over the map due to random iteration order var ids []string @@ -153,7 +153,7 @@ func createImageBuildGraph(images map[string]*Image) (image *Image, err error) { return root, nil } -func walkBuildGraph(graph *Image, apply func(image *Image)) { +func WalkBuildGraph(graph *Image, apply func(image *Image)) { queue := []*Image{graph} for { if len(queue) == 0 { diff --git a/image_tree_test.go b/pkg/cake/image_tree_test.go similarity index 95% rename from image_tree_test.go rename to pkg/cake/image_tree_test.go index a852495..23a0339 100644 --- a/image_tree_test.go +++ b/pkg/cake/image_tree_test.go @@ -1,4 +1,4 @@ -package main +package cake import ( "fmt" @@ -149,7 +149,7 @@ func TestTransformConfigToImages(t *testing.T) { }, } - images, err := transformConfigToImages(buildConfig) + images, err := TransformConfigToImages(buildConfig) if err != nil { t.Errorf("Unexpected error: %v", err) } @@ -190,7 +190,7 @@ func TestMultipleBaseImagesDetection(t *testing.T) { }, } - images, err := transformConfigToImages(buildConfig) + images, err := TransformConfigToImages(buildConfig) if err == nil { t.Errorf("Expected error but received images: %s", images) } @@ -223,7 +223,7 @@ func TestMissingImageIdDetection(t *testing.T) { }, } - images, err := transformConfigToImages(buildConfig) + images, err := TransformConfigToImages(buildConfig) if err == nil { t.Errorf("Expected error but received images: %s", images) } @@ -254,7 +254,7 @@ func TestCreateBuildGraph(t *testing.T) { "child-02": {ImageConfig: ImageConfig{Id: "child-02", Parent: "child-0"}}, } - parent, err := createImageBuildGraph(sourceImages) + parent, err := CreateImageBuildGraph(sourceImages) if err != nil { t.Errorf("Unexpected error: %v", err) } @@ -293,7 +293,7 @@ func TestImageIdNotFound(t *testing.T) { "child-0": {ImageConfig: ImageConfig{Id: "child-0", Parent: "unknown"}}, } - root, err := createImageBuildGraph(sourceImages) + root, err := CreateImageBuildGraph(sourceImages) if err == nil { t.Errorf("Expected error but received %s", root) } @@ -311,7 +311,7 @@ func TestOrphanedImageDetection(t *testing.T) { "child-1": {ImageConfig: ImageConfig{Id: "child-1", Parent: "child-0"}}, } - root, err := createImageBuildGraph(sourceImages) + root, err := CreateImageBuildGraph(sourceImages) if err == nil { t.Errorf("Expected error but received %s", root) } @@ -328,7 +328,7 @@ func TestNoBaseImage(t *testing.T) { "child-1": {ImageConfig: ImageConfig{Id: "child-1", Parent: "child-0"}}, } - root, err := createImageBuildGraph(sourceImages) + root, err := CreateImageBuildGraph(sourceImages) if err == nil { t.Errorf("Expected error but received %s", root) } @@ -350,14 +350,14 @@ func TestWalkBuildGraph(t *testing.T) { expected := []string{"root", "child-1", "child-0", "child-11", "child-10"} - root, err := createImageBuildGraph(sourceImages) + root, err := CreateImageBuildGraph(sourceImages) if err != nil { t.Errorf("Unexpected error: %v", err) } var visited []string - walkBuildGraph(root, func(image *Image) { + WalkBuildGraph(root, func(image *Image) { visited = append(visited, image.ImageConfig.Id) }) diff --git a/report.go b/pkg/cake/report.go similarity index 87% rename from report.go rename to pkg/cake/report.go index 620fdaa..0da130a 100644 --- a/report.go +++ b/pkg/cake/report.go @@ -1,4 +1,4 @@ -package main +package cake import ( "encoding/json" @@ -16,10 +16,10 @@ type ImageBuildSummary struct { PublishedTags []string } -func generateReport(image *Image, config BuildConfig) error { +func GenerateReport(image *Image, config BuildConfig) error { var summaries []ImageBuildSummary - walkBuildGraph(image, func(image *Image) { + WalkBuildGraph(image, func(image *Image) { summary := ImageBuildSummary{ Id: image.ImageConfig.Id, StableTag: fmt.Sprintf("%s:%s", image.getFullName(), image.getStableTag(config)), diff --git a/utils.go b/pkg/cake/utils.go similarity index 96% rename from utils.go rename to pkg/cake/utils.go index cc889ee..0da3a68 100644 --- a/utils.go +++ b/pkg/cake/utils.go @@ -1,4 +1,4 @@ -package main +package cake import ( "crypto/sha256" @@ -17,7 +17,7 @@ import ( const GeneratedDockerFileNamePrefix = "Dockerfile.generated" -func (image *Image) renderDockerfileFromTemplate(config BuildConfig) error { +func (image *Image) RenderDockerfileFromTemplate(config BuildConfig) error { directory := filepath.Dir(image.ImageConfig.Template) templateProperties := image.ImageConfig.Properties @@ -51,7 +51,7 @@ func (image *Image) renderDockerfileFromTemplate(config BuildConfig) error { return nil } -func (image *Image) calculateChecksum() error { +func (image *Image) CalculateChecksum() error { directory := filepath.Dir(image.Dockerfile) files, err := listFiles(directory) if err != nil { diff --git a/utils_test.go b/pkg/cake/utils_test.go similarity index 97% rename from utils_test.go rename to pkg/cake/utils_test.go index 9a8e0f7..72b72cd 100644 --- a/utils_test.go +++ b/pkg/cake/utils_test.go @@ -1,4 +1,4 @@ -package main +package cake import ( "crypto/sha256" @@ -57,7 +57,7 @@ RUN echo "%s" > /version.txt }, } - err = image.renderDockerfileFromTemplate(BuildConfig{}) + err = image.RenderDockerfileFromTemplate(BuildConfig{}) if err != nil { t.Errorf("Unexpected error while rendering Dockerfile from template: %v", err) } @@ -109,7 +109,7 @@ ENV PROPERTY {{property}} }, } - err = image.renderDockerfileFromTemplate(BuildConfig{}) + err = image.RenderDockerfileFromTemplate(BuildConfig{}) if err == nil { t.Errorf("Expected error while rendering Dockerfile from template with missing variables") } @@ -270,7 +270,7 @@ log4j.appender.console=org.apache.log4j.ConsoleAppender }, } - err = image.calculateChecksum() + err = image.CalculateChecksum() if err != nil { t.Errorf("Unexpected error while calculating checksum: %v", err) } @@ -331,7 +331,7 @@ COMMAND echo "Hello world" }, } - err = image.calculateChecksum() + err = image.CalculateChecksum() if err != nil { t.Errorf("Unexpected error while calculating checksum: %v", err) }