// Copyright 2018 Google LLC All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package commands import ( "fmt" "log" "github.com/google/ko/pkg/commands/options" "github.com/spf13/cobra" ) // addPublish augments our CLI surface with publish. func addPublish(topLevel *cobra.Command) { lo := &options.LocalOptions{} no := &options.NameOptions{} ta := &options.TagsOptions{} bo := &options.BuildOptions{} publish := &cobra.Command{ Use: "publish IMPORTPATH...", Short: "Build and publish container images from the given importpaths.", Long: `This sub-command builds the provided import paths into Go binaries, containerizes them, and publishes them.`, Example: ` # Build and publish import path references to a Docker # Registry as: # ${KO_DOCKER_REPO}/- # When KO_DOCKER_REPO is ko.local, it is the same as if # --local and --preserve-import-paths were passed. ko publish github.com/foo/bar/cmd/baz github.com/foo/bar/cmd/blah # Build and publish a relative import path as: # ${KO_DOCKER_REPO}/- # When KO_DOCKER_REPO is ko.local, it is the same as if # --local and --preserve-import-paths were passed. ko publish ./cmd/blah # Build and publish a relative import path as: # ${KO_DOCKER_REPO}/ # When KO_DOCKER_REPO is ko.local, it is the same as if # --local was passed. ko publish --preserve-import-paths ./cmd/blah # Build and publish import path references to a Docker # daemon as: # ko.local/ # This always preserves import paths. ko publish --local github.com/foo/bar/cmd/baz github.com/foo/bar/cmd/blah`, Args: cobra.MinimumNArgs(1), Run: func(_ *cobra.Command, args []string) { builder, err := makeBuilder(bo) if err != nil { log.Fatalf("error creating builder: %v", err) } publisher, err := makePublisher(no, lo, ta) if err != nil { log.Fatalf("error creating publisher: %v", err) } images, err := publishImages(args, publisher, builder) if err != nil { log.Fatalf("failed to publish images: %v", err) } for _, img := range images { fmt.Println(img) } }, } options.AddLocalArg(publish, lo) options.AddNamingArgs(publish, no) options.AddTagsArg(publish, ta) options.AddBuildOptions(publish, bo) topLevel.AddCommand(publish) }