2019-04-27 00:56:15 +02:00
// 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 (
2019-04-30 20:08:54 +02:00
"log"
"os"
2019-04-27 00:56:15 +02:00
"github.com/google/ko/pkg/commands/options"
"github.com/spf13/cobra"
)
// addResolve augments our CLI surface with resolve.
func addResolve ( topLevel * cobra . Command ) {
lo := & options . LocalOptions { }
no := & options . NameOptions { }
fo := & options . FilenameOptions { }
ta := & options . TagsOptions { }
2019-06-27 22:55:47 +02:00
so := & options . SelectorOptions { }
2019-07-10 07:11:20 +02:00
sto := & options . StrictOptions { }
2019-09-11 19:07:02 +02:00
bo := & options . BuildOptions { }
2019-04-27 00:56:15 +02:00
resolve := & cobra . Command {
Use : "resolve -f FILENAME" ,
Short : "Print the input files with image references resolved to built/pushed image digests." ,
Long : ` This sub-command finds import path references within the provided files, builds them into Go binaries, containerizes them, publishes them, and prints the resulting yaml. ` ,
Example : `
# Build and publish import path references to a Docker
# Registry as :
# $ { KO_DOCKER_REPO } / < package name > - < hash of import path >
# When KO_DOCKER_REPO is ko . local , it is the same as if
# -- local and -- preserve - import - paths were passed .
ko resolve - f config /
# Build and publish import path references to a Docker
# Registry preserving import path names as :
# $ { KO_DOCKER_REPO } / < import path >
# When KO_DOCKER_REPO is ko . local , it is the same as if
# -- local was passed .
ko resolve -- preserve - import - paths - f config /
# Build and publish import path references to a Docker
# daemon as :
# ko . local / < import path >
# This always preserves import paths .
ko resolve -- local - f config / ` ,
Args : cobra . NoArgs ,
Run : func ( cmd * cobra . Command , args [ ] string ) {
2019-09-11 19:07:02 +02:00
builder , err := makeBuilder ( bo )
2019-04-30 20:08:54 +02:00
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 )
}
2019-07-10 07:11:20 +02:00
resolveFilesToWriter ( builder , publisher , fo , so , sto , os . Stdout )
2019-04-27 00:56:15 +02:00
} ,
}
options . AddLocalArg ( resolve , lo )
options . AddNamingArgs ( resolve , no )
options . AddFileArg ( resolve , fo )
options . AddTagsArg ( resolve , ta )
2019-06-27 22:55:47 +02:00
options . AddSelectorArg ( resolve , so )
2019-07-10 07:11:20 +02:00
options . AddStrictArg ( resolve , sto )
2019-09-11 19:07:02 +02:00
options . AddBuildOptions ( resolve , bo )
2019-04-27 00:56:15 +02:00
topLevel . AddCommand ( resolve )
}