2019-04-26 15:56:15 -07: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 13:08:54 -05:00
"log"
"os"
2019-04-26 15:56:15 -07:00
"github.com/google/ko/pkg/commands/options"
"github.com/spf13/cobra"
)
// addResolve augments our CLI surface with resolve.
func addResolve ( topLevel * cobra . Command ) {
2020-02-19 09:30:01 -08:00
po := & options . PublishOptions { }
2019-04-26 15:56:15 -07:00
fo := & options . FilenameOptions { }
2019-06-27 16:55:47 -04:00
so := & options . SelectorOptions { }
2019-07-10 01:11:20 -04:00
sto := & options . StrictOptions { }
2019-09-11 10:07:02 -07:00
bo := & options . BuildOptions { }
2019-04-26 15:56:15 -07: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 10:07:02 -07:00
builder , err := makeBuilder ( bo )
2019-04-30 13:08:54 -05:00
if err != nil {
log . Fatalf ( "error creating builder: %v" , err )
}
2020-02-19 09:30:01 -08:00
publisher , err := makePublisher ( po )
2019-04-30 13:08:54 -05:00
if err != nil {
log . Fatalf ( "error creating publisher: %v" , err )
}
2020-02-19 09:30:01 -08:00
defer publisher . Close ( )
2019-11-10 01:23:09 +08:00
ctx := createCancellableContext ( )
2020-02-11 10:44:25 -08:00
if err := resolveFilesToWriter ( ctx , builder , publisher , fo , so , sto , os . Stdout ) ; err != nil {
log . Fatal ( err )
}
2019-04-26 15:56:15 -07:00
} ,
}
2020-02-19 09:30:01 -08:00
options . AddPublishArg ( resolve , po )
2019-04-26 15:56:15 -07:00
options . AddFileArg ( resolve , fo )
2019-06-27 16:55:47 -04:00
options . AddSelectorArg ( resolve , so )
2019-07-10 01:11:20 -04:00
options . AddStrictArg ( resolve , sto )
2019-09-11 10:07:02 -07:00
options . AddBuildOptions ( resolve , bo )
2019-04-26 15:56:15 -07:00
topLevel . AddCommand ( resolve )
}