181 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
| /*
 | |
| Copyright 2018 Google LLC
 | |
| 
 | |
| 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 config
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 	"fmt"
 | |
| 	"strconv"
 | |
| 	"strings"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| // CacheOptions are base image cache options that are set by command line arguments
 | |
| type CacheOptions struct {
 | |
| 	CacheDir string
 | |
| 	CacheTTL time.Duration
 | |
| }
 | |
| 
 | |
| // RegistryOptions are all the options related to the registries, set by command line arguments.
 | |
| type RegistryOptions struct {
 | |
| 	RegistryMaps                 multiKeyMultiValueArg
 | |
| 	RegistryMirrors              multiArg
 | |
| 	InsecureRegistries           multiArg
 | |
| 	SkipTLSVerifyRegistries      multiArg
 | |
| 	RegistriesCertificates       keyValueArg
 | |
| 	RegistriesClientCertificates keyValueArg
 | |
| 	SkipDefaultRegistryFallback  bool
 | |
| 	Insecure                     bool
 | |
| 	SkipTLSVerify                bool
 | |
| 	InsecurePull                 bool
 | |
| 	SkipTLSVerifyPull            bool
 | |
| 	PushIgnoreImmutableTagErrors bool
 | |
| 	PushRetry                    int
 | |
| 	ImageDownloadRetry           int
 | |
| }
 | |
| 
 | |
| // KanikoOptions are options that are set by command line arguments
 | |
| type KanikoOptions struct {
 | |
| 	RegistryOptions
 | |
| 	CacheOptions
 | |
| 	Destinations             multiArg
 | |
| 	BuildArgs                multiArg
 | |
| 	Labels                   multiArg
 | |
| 	Git                      KanikoGitOptions
 | |
| 	IgnorePaths              multiArg
 | |
| 	DockerfilePath           string
 | |
| 	SrcContext               string
 | |
| 	SnapshotMode             string
 | |
| 	SnapshotModeDeprecated   string
 | |
| 	CustomPlatform           string
 | |
| 	CustomPlatformDeprecated string
 | |
| 	Bucket                   string
 | |
| 	TarPath                  string
 | |
| 	TarPathDeprecated        string
 | |
| 	KanikoDir                string
 | |
| 	Target                   string
 | |
| 	CacheRepo                string
 | |
| 	DigestFile               string
 | |
| 	ImageNameDigestFile      string
 | |
| 	ImageNameTagDigestFile   string
 | |
| 	OCILayoutPath            string
 | |
| 	Compression              Compression
 | |
| 	CompressionLevel         int
 | |
| 	ImageFSExtractRetry      int
 | |
| 	SingleSnapshot           bool
 | |
| 	Reproducible             bool
 | |
| 	NoPush                   bool
 | |
| 	NoPushCache              bool
 | |
| 	Cache                    bool
 | |
| 	Cleanup                  bool
 | |
| 	CompressedCaching        bool
 | |
| 	IgnoreVarRun             bool
 | |
| 	SkipUnusedStages         bool
 | |
| 	RunV2                    bool
 | |
| 	CacheCopyLayers          bool
 | |
| 	CacheRunLayers           bool
 | |
| 	ForceBuildMetadata       bool
 | |
| 	InitialFSUnpacked        bool
 | |
| 	SkipPushPermissionCheck  bool
 | |
| 	PreserveContext          bool
 | |
| }
 | |
| 
 | |
| type KanikoGitOptions struct {
 | |
| 	Branch            string
 | |
| 	SingleBranch      bool
 | |
| 	RecurseSubmodules bool
 | |
| 	InsecureSkipTLS   bool
 | |
| }
 | |
| 
 | |
| var ErrInvalidGitFlag = errors.New("invalid git flag, must be in the key=value format")
 | |
| 
 | |
| func (k *KanikoGitOptions) Type() string {
 | |
| 	return "gitoptions"
 | |
| }
 | |
| 
 | |
| func (k *KanikoGitOptions) String() string {
 | |
| 	return fmt.Sprintf("branch=%s,single-branch=%t,recurse-submodules=%t", k.Branch, k.SingleBranch, k.RecurseSubmodules)
 | |
| }
 | |
| 
 | |
| func (k *KanikoGitOptions) Set(s string) error {
 | |
| 	var parts = strings.SplitN(s, "=", 2)
 | |
| 	if len(parts) != 2 {
 | |
| 		return fmt.Errorf("%w: %s", ErrInvalidGitFlag, s)
 | |
| 	}
 | |
| 	switch parts[0] {
 | |
| 	case "branch":
 | |
| 		k.Branch = parts[1]
 | |
| 	case "single-branch":
 | |
| 		v, err := strconv.ParseBool(parts[1])
 | |
| 		if err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 		k.SingleBranch = v
 | |
| 	case "recurse-submodules":
 | |
| 		v, err := strconv.ParseBool(parts[1])
 | |
| 		if err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 		k.RecurseSubmodules = v
 | |
| 	case "insecure-skip-tls":
 | |
| 		v, err := strconv.ParseBool(parts[1])
 | |
| 		if err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 		k.InsecureSkipTLS = v
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // Compression is an enumeration of the supported compression algorithms
 | |
| type Compression string
 | |
| 
 | |
| // The collection of known MediaType values.
 | |
| const (
 | |
| 	GZip Compression = "gzip"
 | |
| 	ZStd Compression = "zstd"
 | |
| )
 | |
| 
 | |
| func (c *Compression) String() string {
 | |
| 	return string(*c)
 | |
| }
 | |
| 
 | |
| func (c *Compression) Set(v string) error {
 | |
| 	switch v {
 | |
| 	case "gzip", "zstd":
 | |
| 		*c = Compression(v)
 | |
| 		return nil
 | |
| 	default:
 | |
| 		return errors.New(`must be either "gzip" or "zstd"`)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (c *Compression) Type() string {
 | |
| 	return "compression"
 | |
| }
 | |
| 
 | |
| // WarmerOptions are options that are set by command line arguments to the cache warmer.
 | |
| type WarmerOptions struct {
 | |
| 	CacheOptions
 | |
| 	RegistryOptions
 | |
| 	CustomPlatform string
 | |
| 	Images         multiArg
 | |
| 	Force          bool
 | |
| 	DockerfilePath string
 | |
| 	BuildArgs      multiArg
 | |
| }
 |