github.com/GoogleContainerTools/skaffold@v1.39.18/pkg/skaffold/schema/v1beta15/config.go (about)

     1  /*
     2  Copyright 2019 The Skaffold Authors
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package v1beta15
    18  
    19  import (
    20  	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/util"
    21  )
    22  
    23  // !!! WARNING !!! This config version is already released, please DO NOT MODIFY the structs in this file.
    24  const Version string = "skaffold/v1beta15"
    25  
    26  // NewSkaffoldConfig creates a SkaffoldConfig
    27  func NewSkaffoldConfig() util.VersionedConfig {
    28  	return new(SkaffoldConfig)
    29  }
    30  
    31  // SkaffoldConfig holds the fields parsed from the Skaffold configuration file (skaffold.yaml).
    32  type SkaffoldConfig struct {
    33  	// APIVersion is the version of the configuration.
    34  	APIVersion string `yaml:"apiVersion" yamltags:"required"`
    35  
    36  	// Kind is always `Config`. Defaults to `Config`.
    37  	Kind string `yaml:"kind" yamltags:"required"`
    38  
    39  	// Metadata holds additional information about the config.
    40  	Metadata Metadata `yaml:"metadata,omitempty"`
    41  
    42  	// Pipeline defines the Build/Test/Deploy phases.
    43  	Pipeline `yaml:",inline"`
    44  
    45  	// Profiles *beta* can override be used to `build`, `test` or `deploy` configuration.
    46  	Profiles []Profile `yaml:"profiles,omitempty"`
    47  }
    48  
    49  // Metadata holds an optional name of the project.
    50  type Metadata struct {
    51  	// Name is an identifier for the project.
    52  	Name string `yaml:"name,omitempty"`
    53  }
    54  
    55  // Pipeline describes a Skaffold pipeline.
    56  type Pipeline struct {
    57  	// Build describes how images are built.
    58  	Build BuildConfig `yaml:"build,omitempty"`
    59  
    60  	// Test describes how images are tested.
    61  	Test []*TestCase `yaml:"test,omitempty"`
    62  
    63  	// Deploy describes how images are deployed.
    64  	Deploy DeployConfig `yaml:"deploy,omitempty"`
    65  
    66  	// PortForward describes user defined resources to port-forward.
    67  	PortForward []*PortForwardResource `yaml:"portForward,omitempty"`
    68  }
    69  
    70  func (c *SkaffoldConfig) GetVersion() string {
    71  	return c.APIVersion
    72  }
    73  
    74  // ResourceType describes the Kubernetes resource types used for port forwarding.
    75  type ResourceType string
    76  
    77  // PortForwardResource describes a resource to port forward.
    78  type PortForwardResource struct {
    79  	// Type is the Kubernetes type that should be port forwarded.
    80  	// Acceptable resource types include: `Service`, `Pod` and Controller resource type that has a pod spec: `ReplicaSet`, `ReplicationController`, `Deployment`, `StatefulSet`, `DaemonSet`, `Job`, `CronJob`.
    81  	Type ResourceType `yaml:"resourceType,omitempty"`
    82  
    83  	// Name is the name of the Kubernetes resource to port forward.
    84  	Name string `yaml:"resourceName,omitempty"`
    85  
    86  	// Namespace is the namespace of the resource to port forward.
    87  	Namespace string `yaml:"namespace,omitempty"`
    88  
    89  	// Port is the resource port that will be forwarded.
    90  	Port int `yaml:"port,omitempty"`
    91  
    92  	// LocalPort is the local port to forward to. If the port is unavailable, Skaffold will choose a random open port to forward to. *Optional*.
    93  	LocalPort int `yaml:"localPort,omitempty"`
    94  }
    95  
    96  // BuildConfig contains all the configuration for the build steps.
    97  type BuildConfig struct {
    98  	// Artifacts lists the images you're going to be building.
    99  	Artifacts []*Artifact `yaml:"artifacts,omitempty"`
   100  
   101  	// InsecureRegistries is a list of registries declared by the user to be insecure.
   102  	// These registries will be connected to via HTTP instead of HTTPS.
   103  	InsecureRegistries []string `yaml:"insecureRegistries,omitempty"`
   104  
   105  	// TagPolicy *beta* determines how images are tagged.
   106  	// A few strategies are provided here, although you most likely won't need to care!
   107  	// If not specified, it defaults to `gitCommit: {variant: Tags}`.
   108  	TagPolicy TagPolicy `yaml:"tagPolicy,omitempty"`
   109  
   110  	BuildType `yaml:",inline"`
   111  }
   112  
   113  // TagPolicy contains all the configuration for the tagging step.
   114  type TagPolicy struct {
   115  	// GitTagger *beta* tags images with the git tag or commit of the artifact's workspace.
   116  	GitTagger *GitTagger `yaml:"gitCommit,omitempty" yamltags:"oneOf=tag"`
   117  
   118  	// ShaTagger *beta* tags images with their sha256 digest.
   119  	ShaTagger *ShaTagger `yaml:"sha256,omitempty" yamltags:"oneOf=tag"`
   120  
   121  	// EnvTemplateTagger *beta* tags images with a configurable template string.
   122  	EnvTemplateTagger *EnvTemplateTagger `yaml:"envTemplate,omitempty" yamltags:"oneOf=tag"`
   123  
   124  	// DateTimeTagger *beta* tags images with the build timestamp.
   125  	DateTimeTagger *DateTimeTagger `yaml:"dateTime,omitempty" yamltags:"oneOf=tag"`
   126  }
   127  
   128  // ShaTagger *beta* tags images with their sha256 digest.
   129  type ShaTagger struct{}
   130  
   131  // GitTagger *beta* tags images with the git tag or commit of the artifact's workspace.
   132  type GitTagger struct {
   133  	// Variant determines the behavior of the git tagger. Valid variants are
   134  	// `Tags` (default): use git tags or fall back to abbreviated commit hash.
   135  	// `CommitSha`: use the full git commit sha.
   136  	// `AbbrevCommitSha`: use the abbreviated git commit sha.
   137  	// `TreeSha`: use the full tree hash of the artifact workingdir.
   138  	// `AbbrevTreeSha`: use the abbreviated tree hash of the artifact workingdir.
   139  	Variant string `yaml:"variant,omitempty"`
   140  }
   141  
   142  // EnvTemplateTagger *beta* tags images with a configurable template string.
   143  type EnvTemplateTagger struct {
   144  	// Template used to produce the image name and tag.
   145  	// See golang [text/template](https://golang.org/pkg/text/template/).
   146  	// The template is executed against the current environment,
   147  	// with those variables injected:
   148  	//   IMAGE_NAME   |  Name of the image being built, as supplied in the artifacts section.
   149  	// For example: `{{.RELEASE}}-{{.IMAGE_NAME}}`.
   150  	Template string `yaml:"template,omitempty" yamltags:"required"`
   151  }
   152  
   153  // DateTimeTagger *beta* tags images with the build timestamp.
   154  type DateTimeTagger struct {
   155  	// Format formats the date and time.
   156  	// See [#Time.Format](https://golang.org/pkg/time/#Time.Format).
   157  	// Defaults to `2006-01-02_15-04-05.999_MST`.
   158  	Format string `yaml:"format,omitempty"`
   159  
   160  	// TimeZone sets the timezone for the date and time.
   161  	// See [Time.LoadLocation](https://golang.org/pkg/time/#Time.LoadLocation).
   162  	// Defaults to the local timezone.
   163  	TimeZone string `yaml:"timezone,omitempty"`
   164  }
   165  
   166  // BuildType contains the specific implementation and parameters needed
   167  // for the build step. Only one field should be populated.
   168  type BuildType struct {
   169  	// LocalBuild *beta* describes how to do a build on the local docker daemon
   170  	// and optionally push to a repository.
   171  	LocalBuild *LocalBuild `yaml:"local,omitempty" yamltags:"oneOf=build"`
   172  
   173  	// GoogleCloudBuild *beta* describes how to do a remote build on
   174  	// [Google Cloud Build](https://cloud.google.com/cloud-build/).
   175  	GoogleCloudBuild *GoogleCloudBuild `yaml:"googleCloudBuild,omitempty" yamltags:"oneOf=build"`
   176  
   177  	// Cluster *beta* describes how to do an on-cluster build.
   178  	Cluster *ClusterDetails `yaml:"cluster,omitempty" yamltags:"oneOf=build"`
   179  }
   180  
   181  // LocalBuild *beta* describes how to do a build on the local docker daemon
   182  // and optionally push to a repository.
   183  type LocalBuild struct {
   184  	// Push should images be pushed to a registry.
   185  	// If not specified, images are pushed only if the current Kubernetes context
   186  	// connects to a remote cluster.
   187  	Push *bool `yaml:"push,omitempty"`
   188  
   189  	// UseDockerCLI use `docker` command-line interface instead of Docker Engine APIs.
   190  	UseDockerCLI bool `yaml:"useDockerCLI,omitempty"`
   191  
   192  	// UseBuildkit use BuildKit to build Docker images. If unspecified, uses the Docker default.
   193  	UseBuildkit *bool `yaml:"useBuildkit,omitempty"`
   194  }
   195  
   196  // GoogleCloudBuild *beta* describes how to do a remote build on
   197  // [Google Cloud Build](https://cloud.google.com/cloud-build/docs/).
   198  // Docker and Jib artifacts can be built on Cloud Build. The `projectId` needs
   199  // to be provided and the currently logged in user should be given permissions to trigger
   200  // new builds.
   201  type GoogleCloudBuild struct {
   202  	// ProjectID is the ID of your Cloud Platform Project.
   203  	// If it is not provided, Skaffold will guess it from the image name.
   204  	// For example, given the artifact image name `gcr.io/myproject/image`, Skaffold
   205  	// will use the `myproject` GCP project.
   206  	ProjectID string `yaml:"projectId,omitempty"`
   207  
   208  	// DiskSizeGb is the disk size of the VM that runs the build.
   209  	// See [Cloud Build Reference](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions).
   210  	DiskSizeGb int64 `yaml:"diskSizeGb,omitempty"`
   211  
   212  	// MachineType is the type of the VM that runs the build.
   213  	// See [Cloud Build Reference](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions).
   214  	MachineType string `yaml:"machineType,omitempty"`
   215  
   216  	// Timeout is the amount of time (in seconds) that this build should be allowed to run.
   217  	// See [Cloud Build Reference](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#resource-build).
   218  	Timeout string `yaml:"timeout,omitempty"`
   219  
   220  	// DockerImage is the image that runs a Docker build.
   221  	// See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders).
   222  	// Defaults to `gcr.io/cloud-builders/docker`.
   223  	DockerImage string `yaml:"dockerImage,omitempty"`
   224  
   225  	// KanikoImage is the image that runs a Kaniko build.
   226  	// See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders).
   227  	// Defaults to `gcr.io/kaniko-project/executor`.
   228  	KanikoImage string `yaml:"kanikoImage,omitempty"`
   229  
   230  	// MavenImage is the image that runs a Maven build.
   231  	// See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders).
   232  	// Defaults to `gcr.io/cloud-builders/mvn`.
   233  	MavenImage string `yaml:"mavenImage,omitempty"`
   234  
   235  	// GradleImage is the image that runs a Gradle build.
   236  	// See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders).
   237  	// Defaults to `gcr.io/cloud-builders/gradle`.
   238  	GradleImage string `yaml:"gradleImage,omitempty"`
   239  
   240  	// Concurrency is how many artifacts can be built concurrently. 0 means "no-limit"
   241  	// Defaults to 0.
   242  	Concurrency int `yaml:"concurrency,omitempty"`
   243  }
   244  
   245  // LocalDir configures how Kaniko mounts sources directly via an `emptyDir` volume.
   246  type LocalDir struct {
   247  	// InitImage is the image used to run init container which mounts kaniko context.
   248  	InitImage string `yaml:"initImage,omitempty"`
   249  }
   250  
   251  // KanikoBuildContext contains the different fields available to specify
   252  // a Kaniko build context.
   253  type KanikoBuildContext struct {
   254  	// GCSBucket is the GCS bucket to which sources are uploaded.
   255  	// Kaniko will need access to that bucket to download the sources.
   256  	GCSBucket string `yaml:"gcsBucket,omitempty" yamltags:"oneOf=buildContext"`
   257  
   258  	// LocalDir configures how Kaniko mounts sources directly via an `emptyDir` volume.
   259  	LocalDir *LocalDir `yaml:"localDir,omitempty" yamltags:"oneOf=buildContext"`
   260  }
   261  
   262  // KanikoCache configures Kaniko caching. If a cache is specified, Kaniko will
   263  // use a remote cache which will speed up builds.
   264  type KanikoCache struct {
   265  	// Repo is a remote repository to store cached layers. If none is specified, one will be
   266  	// inferred from the image name. See [Kaniko Caching](https://github.com/GoogleContainerTools/kaniko#caching).
   267  	Repo string `yaml:"repo,omitempty"`
   268  	// HostPath specifies a path on the host that is mounted to each pod as read only cache volume containing base images.
   269  	// If set, must exist on each node and prepopulated with kaniko-warmer.
   270  	HostPath string `yaml:"hostPath,omitempty"`
   271  }
   272  
   273  // ClusterDetails *beta* describes how to do an on-cluster build.
   274  type ClusterDetails struct {
   275  	// HTTPProxy for kaniko pod.
   276  	HTTPProxy string `yaml:"HTTP_PROXY,omitempty"`
   277  
   278  	// HTTPSProxy for kaniko pod.
   279  	HTTPSProxy string `yaml:"HTTPS_PROXY,omitempty"`
   280  
   281  	// PullSecret is the path to the Google Cloud service account secret key file.
   282  	PullSecret string `yaml:"pullSecret,omitempty"`
   283  
   284  	// PullSecretName is the name of the Kubernetes secret for pulling the files
   285  	// from the build context and pushing the final image. If given, the secret needs to
   286  	// contain the Google Cloud service account secret key under the key `kaniko-secret`.
   287  	// Defaults to `kaniko-secret`.
   288  	PullSecretName string `yaml:"pullSecretName,omitempty"`
   289  
   290  	// Namespace is the Kubernetes namespace.
   291  	// Defaults to current namespace in Kubernetes configuration.
   292  	Namespace string `yaml:"namespace,omitempty"`
   293  
   294  	// Timeout is the amount of time (in seconds) that this build is allowed to run.
   295  	// Defaults to 20 minutes (`20m`).
   296  	Timeout string `yaml:"timeout,omitempty"`
   297  
   298  	// DockerConfig describes how to mount the local Docker configuration into a pod.
   299  	DockerConfig *DockerConfig `yaml:"dockerConfig,omitempty"`
   300  
   301  	// Resources define the resource requirements for the kaniko pod.
   302  	Resources *ResourceRequirements `yaml:"resources,omitempty"`
   303  
   304  	// Concurrency is how many artifacts can be built concurrently. 0 means "no-limit"
   305  	// Defaults to 0.
   306  	Concurrency int `yaml:"concurrency,omitempty"`
   307  }
   308  
   309  // DockerConfig contains information about the docker `config.json` to mount.
   310  type DockerConfig struct {
   311  	// Path is the path to the docker `config.json`.
   312  	Path string `yaml:"path,omitempty"`
   313  
   314  	// SecretName is the Kubernetes secret that contains the `config.json` Docker configuration.
   315  	// Note that the expected secret type is not 'kubernetes.io/dockerconfigjson' but 'Opaque'.
   316  	SecretName string `yaml:"secretName,omitempty"`
   317  }
   318  
   319  // ResourceRequirements describes the resource requirements for the kaniko pod.
   320  type ResourceRequirements struct {
   321  	// Requests [resource requests](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container) for the Kaniko pod.
   322  	Requests *ResourceRequirement `yaml:"requests,omitempty"`
   323  
   324  	// Limits [resource limits](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container) for the Kaniko pod.
   325  	Limits *ResourceRequirement `yaml:"limits,omitempty"`
   326  }
   327  
   328  // ResourceRequirement stores the CPU/Memory requirements for the pod.
   329  type ResourceRequirement struct {
   330  	// CPU the number cores to be used.
   331  	// For example: `2`, `2.0` or `200m`.
   332  	CPU string `yaml:"cpu,omitempty"`
   333  
   334  	// Memory the amount of memory to allocate to the pod.
   335  	// For example: `1Gi` or `1000Mi`.
   336  	Memory string `yaml:"memory,omitempty"`
   337  }
   338  
   339  // TestCase is a list of structure tests to run on images that Skaffold builds.
   340  type TestCase struct {
   341  	// ImageName is the artifact on which to run those tests.
   342  	// For example: `gcr.io/k8s-skaffold/example`.
   343  	ImageName string `yaml:"image" yamltags:"required"`
   344  
   345  	// StructureTests lists the [Container Structure Tests](https://github.com/GoogleContainerTools/container-structure-test)
   346  	// to run on that artifact.
   347  	// For example: `["./test/*"]`.
   348  	StructureTests []string `yaml:"structureTests,omitempty"`
   349  }
   350  
   351  // DeployConfig contains all the configuration needed by the deploy steps.
   352  type DeployConfig struct {
   353  	// StatusCheckDeadlineSeconds *beta* is the deadline for deployments to stabilize in seconds.
   354  	StatusCheckDeadlineSeconds int `yaml:"statusCheckDeadlineSeconds,omitempty"`
   355  	DeployType                 `yaml:",inline"`
   356  }
   357  
   358  // DeployType contains the specific implementation and parameters needed
   359  // for the deploy step. Only one field should be populated.
   360  type DeployType struct {
   361  	// HelmDeploy *beta* uses the `helm` CLI to apply the charts to the cluster.
   362  	HelmDeploy *HelmDeploy `yaml:"helm,omitempty" yamltags:"oneOf=deploy"`
   363  
   364  	// KubectlDeploy *beta* uses a client side `kubectl apply` to deploy manifests.
   365  	// You'll need a `kubectl` CLI version installed that's compatible with your cluster.
   366  	KubectlDeploy *KubectlDeploy `yaml:"kubectl,omitempty" yamltags:"oneOf=deploy"`
   367  
   368  	// KustomizeDeploy *beta* uses the `kustomize` CLI to "patch" a deployment for a target environment.
   369  	KustomizeDeploy *KustomizeDeploy `yaml:"kustomize,omitempty" yamltags:"oneOf=deploy"`
   370  }
   371  
   372  // KubectlDeploy *beta* uses a client side `kubectl apply` to deploy manifests.
   373  // You'll need a `kubectl` CLI version installed that's compatible with your cluster.
   374  type KubectlDeploy struct {
   375  	// Manifests lists the Kubernetes yaml or json manifests.
   376  	// Defaults to `["k8s/*.yaml"]`.
   377  	Manifests []string `yaml:"manifests,omitempty"`
   378  
   379  	// RemoteManifests lists Kubernetes manifests in remote clusters.
   380  	RemoteManifests []string `yaml:"remoteManifests,omitempty"`
   381  
   382  	// Flags are additional flags passed to `kubectl`.
   383  	Flags KubectlFlags `yaml:"flags,omitempty"`
   384  }
   385  
   386  // KubectlFlags are additional flags passed on the command
   387  // line to kubectl either on every command (Global), on creations (Apply)
   388  // or deletions (Delete).
   389  type KubectlFlags struct {
   390  	// Global are additional flags passed on every command.
   391  	Global []string `yaml:"global,omitempty"`
   392  
   393  	// Apply are additional flags passed on creations (`kubectl apply`).
   394  	Apply []string `yaml:"apply,omitempty"`
   395  
   396  	// Delete are additional flags passed on deletions (`kubectl delete`).
   397  	Delete []string `yaml:"delete,omitempty"`
   398  }
   399  
   400  // HelmDeploy *beta* uses the `helm` CLI to apply the charts to the cluster.
   401  type HelmDeploy struct {
   402  	// Releases is a list of Helm releases.
   403  	Releases []HelmRelease `yaml:"releases,omitempty" yamltags:"required"`
   404  
   405  	// Flags are additional option flags that are passed on the command
   406  	// line to `helm`.
   407  	Flags HelmDeployFlags `yaml:"flags,omitempty"`
   408  }
   409  
   410  // HelmDeployFlags are additional option flags that are passed on the command
   411  // line to `helm`.
   412  type HelmDeployFlags struct {
   413  	// Global are additional flags passed on every command.
   414  	Global []string `yaml:"global,omitempty"`
   415  
   416  	// Install are additional flags passed to (`helm install`).
   417  	Install []string `yaml:"install,omitempty"`
   418  
   419  	// Upgrade are additional flags passed to (`helm upgrade`).
   420  	Upgrade []string `yaml:"upgrade,omitempty"`
   421  }
   422  
   423  // KustomizeDeploy *beta* uses the `kustomize` CLI to "patch" a deployment for a target environment.
   424  type KustomizeDeploy struct {
   425  	// KustomizePath is the path to Kustomization files.
   426  	// Defaults to `.`.
   427  	KustomizePath string `yaml:"path,omitempty"`
   428  
   429  	// Flags are additional flags passed to `kubectl`.
   430  	Flags KubectlFlags `yaml:"flags,omitempty"`
   431  
   432  	// BuildArgs are additional args passed to `kustomize build`.
   433  	BuildArgs []string `yaml:"buildArgs,omitempty"`
   434  }
   435  
   436  // HelmRelease describes a helm release to be deployed.
   437  type HelmRelease struct {
   438  	// Name is the name of the Helm release.
   439  	Name string `yaml:"name,omitempty" yamltags:"required"`
   440  
   441  	// ChartPath is the path to the Helm chart.
   442  	ChartPath string `yaml:"chartPath,omitempty" yamltags:"required"`
   443  
   444  	// ValuesFiles are the paths to the Helm `values` files.
   445  	ValuesFiles []string `yaml:"valuesFiles,omitempty"`
   446  
   447  	// Values are key-value pairs supplementing the Helm `values` file.
   448  	Values map[string]string `yaml:"values,omitempty,omitempty"`
   449  
   450  	// Namespace is the Kubernetes namespace.
   451  	Namespace string `yaml:"namespace,omitempty"`
   452  
   453  	// Version is the version of the chart.
   454  	Version string `yaml:"version,omitempty"`
   455  
   456  	// SetValues are key-value pairs.
   457  	// If present, Skaffold will send `--set` flag to Helm CLI and append all pairs after the flag.
   458  	SetValues map[string]string `yaml:"setValues,omitempty"`
   459  
   460  	// SetValueTemplates are key-value pairs.
   461  	// If present, Skaffold will try to parse the value part of each key-value pair using
   462  	// environment variables in the system, then send `--set` flag to Helm CLI and append
   463  	// all parsed pairs after the flag.
   464  	SetValueTemplates map[string]string `yaml:"setValueTemplates,omitempty"`
   465  
   466  	// SetFiles are key-value pairs.
   467  	// If present, Skaffold will send `--set-file` flag to Helm CLI and append all pairs after the flag.
   468  	SetFiles map[string]string `yaml:"setFiles,omitempty"`
   469  
   470  	// Wait if `true`, Skaffold will send `--wait` flag to Helm CLI.
   471  	// Defaults to `false`.
   472  	Wait bool `yaml:"wait,omitempty"`
   473  
   474  	// RecreatePods if `true`, Skaffold will send `--recreate-pods` flag to Helm CLI
   475  	// when upgrading a new version of a chart in subsequent dev loop deploy.
   476  	// Defaults to `false`.
   477  	RecreatePods bool `yaml:"recreatePods,omitempty"`
   478  
   479  	// SkipBuildDependencies should build dependencies be skipped.
   480  	SkipBuildDependencies bool `yaml:"skipBuildDependencies,omitempty"`
   481  
   482  	// UseHelmSecrets instructs skaffold to use secrets plugin on deployment.
   483  	UseHelmSecrets bool `yaml:"useHelmSecrets,omitempty"`
   484  
   485  	// Remote specifies whether the chart path is remote, or exists on the host filesystem.
   486  	// `remote: true` implies `skipBuildDependencies: true`.
   487  	Remote bool `yaml:"remote,omitempty"`
   488  
   489  	// Overrides are key-value pairs.
   490  	// If present, Skaffold will build a Helm `values` file that overrides
   491  	// the original and use it to call Helm CLI (`--f` flag).
   492  	Overrides util.HelmOverrides `yaml:"overrides,omitempty"`
   493  
   494  	// Packaged parameters for packaging helm chart (`helm package`).
   495  	Packaged *HelmPackaged `yaml:"packaged,omitempty"`
   496  
   497  	// ImageStrategy adds image configurations to the Helm `values` file.
   498  	ImageStrategy HelmImageStrategy `yaml:"imageStrategy,omitempty"`
   499  }
   500  
   501  // HelmPackaged parameters for packaging helm chart (`helm package`).
   502  type HelmPackaged struct {
   503  	// Version sets the `version` on the chart to this semver version.
   504  	Version string `yaml:"version,omitempty"`
   505  
   506  	// AppVersion sets the `appVersion` on the chart to this version.
   507  	AppVersion string `yaml:"appVersion,omitempty"`
   508  }
   509  
   510  // HelmImageStrategy adds image configurations to the Helm `values` file.
   511  type HelmImageStrategy struct {
   512  	HelmImageConfig `yaml:",inline"`
   513  }
   514  
   515  // HelmImageConfig describes an image configuration.
   516  type HelmImageConfig struct {
   517  	// HelmFQNConfig is the image configuration uses the syntax `IMAGE-NAME=IMAGE-REPOSITORY:IMAGE-TAG`.
   518  	HelmFQNConfig *HelmFQNConfig `yaml:"fqn,omitempty" yamltags:"oneOf=helmImageStrategy"`
   519  
   520  	// HelmConventionConfig is the image configuration uses the syntax `IMAGE-NAME.repository=IMAGE-REPOSITORY, IMAGE-NAME.tag=IMAGE-TAG`.
   521  	HelmConventionConfig *HelmConventionConfig `yaml:"helm,omitempty" yamltags:"oneOf=helmImageStrategy"`
   522  }
   523  
   524  // HelmFQNConfig is the image config to use the FullyQualifiedImageName as param to set.
   525  type HelmFQNConfig struct {
   526  	// Property defines the image config.
   527  	Property string `yaml:"property,omitempty"`
   528  }
   529  
   530  // HelmConventionConfig is the image config in the syntax of image.repository and image.tag.
   531  type HelmConventionConfig struct {
   532  	// ExplicitRegistry separates `image.registry` to the image config syntax. Useful for some charts e.g. `postgresql`.
   533  	ExplicitRegistry bool `yaml:"explicitRegistry,omitempty"`
   534  }
   535  
   536  // Artifact are the items that need to be built, along with the context in which
   537  // they should be built.
   538  type Artifact struct {
   539  	// ImageName is the name of the image to be built.
   540  	// For example: `gcr.io/k8s-skaffold/example`.
   541  	ImageName string `yaml:"image,omitempty" yamltags:"required"`
   542  
   543  	// Workspace is the directory containing the artifact's sources.
   544  	// Defaults to `.`.
   545  	Workspace string `yaml:"context,omitempty"`
   546  
   547  	// Sync *alpha* lists local files synced to pods instead
   548  	// of triggering an image build when modified.
   549  	Sync *Sync `yaml:"sync,omitempty"`
   550  
   551  	// ArtifactType describes how to build an artifact.
   552  	ArtifactType `yaml:",inline"`
   553  }
   554  
   555  // Sync *alpha* specifies what files to sync into the container.
   556  // This is a list of sync rules indicating the intent to sync for source files.
   557  type Sync struct {
   558  	// Manual lists manual sync rules indicating the source and destination.
   559  	Manual []*SyncRule `yaml:"manual,omitempty" yamltags:"oneOf=sync"`
   560  
   561  	// Infer lists file patterns which may be synced into the container.
   562  	// The container destination is inferred by the builder.
   563  	// Currently only available for docker artifacts.
   564  	Infer []string `yaml:"infer,omitempty" yamltags:"oneOf=sync"`
   565  }
   566  
   567  // SyncRule specifies which local files to sync to remote folders.
   568  type SyncRule struct {
   569  	// Src is a glob pattern to match local paths against.
   570  	// Directories should be delimited by `/` on all platforms.
   571  	// For example: `"css/**/*.css"`.
   572  	Src string `yaml:"src,omitempty" yamltags:"required"`
   573  
   574  	// Dest is the destination path in the container where the files should be synced to.
   575  	// For example: `"app/"`
   576  	Dest string `yaml:"dest,omitempty" yamltags:"required"`
   577  
   578  	// Strip specifies the path prefix to remove from the source path when
   579  	// transplanting the files into the destination folder.
   580  	// For example: `"css/"`
   581  	Strip string `yaml:"strip,omitempty"`
   582  }
   583  
   584  // Profile *beta* profiles are used to override any `build`, `test` or `deploy` configuration.
   585  type Profile struct {
   586  	// Name is a unique profile name.
   587  	// For example: `profile-prod`.
   588  	Name string `yaml:"name,omitempty" yamltags:"required"`
   589  
   590  	// Pipeline contains the definitions to replace the default skaffold pipeline.
   591  	Pipeline `yaml:",inline"`
   592  
   593  	// Patches lists patches applied to the configuration.
   594  	// Patches use the JSON patch notation.
   595  	Patches []JSONPatch `yaml:"patches,omitempty"`
   596  
   597  	// Activation criteria by which a profile can be auto-activated.
   598  	// The profile is auto-activated if any one of the activations are triggered.
   599  	// An activation is triggered if all of the criteria (env, kubeContext, command) are triggered.
   600  	Activation []Activation `yaml:"activation,omitempty"`
   601  }
   602  
   603  // JSONPatch patch to be applied by a profile.
   604  type JSONPatch struct {
   605  	// Op is the operation carried by the patch: `add`, `remove`, `replace`, `move`, `copy` or `test`.
   606  	// Defaults to `replace`.
   607  	Op string `yaml:"op,omitempty"`
   608  
   609  	// Path is the position in the yaml where the operation takes place.
   610  	// For example, this targets the `dockerfile` of the first artifact built.
   611  	// For example: `/build/artifacts/0/docker/dockerfile`.
   612  	Path string `yaml:"path,omitempty" yamltags:"required"`
   613  
   614  	// From is the source position in the yaml, used for `copy` or `move` operations.
   615  	From string `yaml:"from,omitempty"`
   616  
   617  	// Value is the value to apply. Can be any portion of yaml.
   618  	Value *util.YamlpatchNode `yaml:"value,omitempty"`
   619  }
   620  
   621  // Activation criteria by which a profile is auto-activated.
   622  type Activation struct {
   623  	// Env is a `key=pattern` pair. The profile is auto-activated if an Environment
   624  	// Variable `key` matches the pattern. If the pattern starts with `!`, activation
   625  	// happens if the remaining pattern is _not_ matched. The pattern matches if the
   626  	// Environment Variable value is exactly `pattern`, or the regex `pattern` is
   627  	// found in it. An empty `pattern` (e.g. `env: "key="`) always only matches if
   628  	// the Environment Variable is undefined or empty.
   629  	// For example: `ENV=production`
   630  	Env string `yaml:"env,omitempty"`
   631  
   632  	// KubeContext is a Kubernetes context for which the profile is auto-activated.
   633  	// For example: `minikube`.
   634  	KubeContext string `yaml:"kubeContext,omitempty"`
   635  
   636  	// Command is a Skaffold command for which the profile is auto-activated.
   637  	// For example: `dev`.
   638  	Command string `yaml:"command,omitempty"`
   639  }
   640  
   641  // ArtifactType describes how to build an artifact.
   642  type ArtifactType struct {
   643  	// DockerArtifact *beta* describes an artifact built from a Dockerfile.
   644  	DockerArtifact *DockerArtifact `yaml:"docker,omitempty" yamltags:"oneOf=artifact"`
   645  
   646  	// BazelArtifact *beta* requires bazel CLI to be installed and the sources to
   647  	// contain [Bazel](https://bazel.build/) configuration files.
   648  	BazelArtifact *BazelArtifact `yaml:"bazel,omitempty" yamltags:"oneOf=artifact"`
   649  
   650  	// JibArtifact *alpha* builds images using the
   651  	// [Jib plugins for Maven or Gradle](https://github.com/GoogleContainerTools/jib/).
   652  	JibArtifact *JibArtifact `yaml:"jib,omitempty" yamltags:"oneOf=artifact"`
   653  
   654  	// KanikoArtifact *alpha* builds images using [kaniko](https://github.com/GoogleContainerTools/kaniko).
   655  	KanikoArtifact *KanikoArtifact `yaml:"kaniko,omitempty" yamltags:"oneOf=artifact"`
   656  
   657  	// CustomArtifact *alpha* builds images using a custom build script written by the user.
   658  	CustomArtifact *CustomArtifact `yaml:"custom,omitempty" yamltags:"oneOf=artifact"`
   659  }
   660  
   661  // CustomArtifact *alpha* describes an artifact built from a custom build script
   662  // written by the user. It can be used to build images with builders that aren't directly integrated with skaffold.
   663  type CustomArtifact struct {
   664  	// BuildCommand is the command executed to build the image.
   665  	BuildCommand string `yaml:"buildCommand,omitempty"`
   666  	// Dependencies are the file dependencies that skaffold should watch for both rebuilding and file syncing for this artifact.
   667  	Dependencies *CustomDependencies `yaml:"dependencies,omitempty"`
   668  }
   669  
   670  // CustomDependencies *alpha* is used to specify dependencies for an artifact built by a custom build script.
   671  // Either `dockerfile` or `paths` should be specified for file watching to work as expected.
   672  type CustomDependencies struct {
   673  	// Dockerfile should be set if the artifact is built from a Dockerfile, from which skaffold can determine dependencies.
   674  	Dockerfile *DockerfileDependency `yaml:"dockerfile,omitempty" yamltags:"oneOf=dependency"`
   675  	// Command represents a custom command that skaffold executes to obtain dependencies. The output of this command *must* be a valid JSON array.
   676  	Command string `yaml:"command,omitempty" yamltags:"oneOf=dependency"`
   677  	// Paths should be set to the file dependencies for this artifact, so that the skaffold file watcher knows when to rebuild and perform file synchronization.
   678  	Paths []string `yaml:"paths,omitempty" yamltags:"oneOf=dependency"`
   679  	// Ignore specifies the paths that should be ignored by skaffold's file watcher. If a file exists in both `paths` and in `ignore`, it will be ignored, and will be excluded from both rebuilds and file synchronization.
   680  	// Will only work in conjunction with `paths`.
   681  	Ignore []string `yaml:"ignore,omitempty"`
   682  }
   683  
   684  // DockerfileDependency *alpha* is used to specify a custom build artifact that is built from a Dockerfile. This allows skaffold to determine dependencies from the Dockerfile.
   685  type DockerfileDependency struct {
   686  	// Path locates the Dockerfile relative to workspace.
   687  	Path string `yaml:"path,omitempty"`
   688  
   689  	// BuildArgs are arguments passed to the docker build.
   690  	// It also accepts environment variables via the go template syntax.
   691  	// For example: `{"key1": "value1", "key2": "value2", "key3": "{{.ENV_VARIABLE}}"}`.
   692  	BuildArgs map[string]*string `yaml:"buildArgs,omitempty"`
   693  }
   694  
   695  // KanikoArtifact *alpha* describes an artifact built from a Dockerfile,
   696  // with kaniko.
   697  type KanikoArtifact struct {
   698  	// AdditionalFlags are additional flags to be passed to Kaniko command line.
   699  	// See [Kaniko Additional Flags](https://github.com/GoogleContainerTools/kaniko#additional-flags).
   700  	// Deprecated - instead the named, unique fields should be used, e.g. `buildArgs`, `cache`, `target`.
   701  	AdditionalFlags []string `yaml:"flags,omitempty"`
   702  
   703  	// DockerfilePath locates the Dockerfile relative to workspace.
   704  	// Defaults to `Dockerfile`.
   705  	DockerfilePath string `yaml:"dockerfile,omitempty"`
   706  
   707  	// Target is the Dockerfile target name to build.
   708  	Target string `yaml:"target,omitempty"`
   709  
   710  	// BuildArgs are arguments passed to the docker build.
   711  	// It also accepts environment variables via the go template syntax.
   712  	// For example: `{"key1": "value1", "key2": "value2", "key3": "{{.ENV_VARIABLE}}"}`.
   713  	BuildArgs map[string]*string `yaml:"buildArgs,omitempty"`
   714  
   715  	// BuildContext is where the build context for this artifact resides.
   716  	BuildContext *KanikoBuildContext `yaml:"buildContext,omitempty"`
   717  
   718  	// Image is the Docker image used by the Kaniko pod.
   719  	// Defaults to the latest released version of `gcr.io/kaniko-project/executor`.
   720  	Image string `yaml:"image,omitempty"`
   721  
   722  	// Cache configures Kaniko caching. If a cache is specified, Kaniko will
   723  	// use a remote cache which will speed up builds.
   724  	Cache *KanikoCache `yaml:"cache,omitempty"`
   725  
   726  	// Reproducible is used to strip timestamps out of the built image.
   727  	Reproducible bool `yaml:"reproducible,omitempty"`
   728  }
   729  
   730  // DockerArtifact *beta* describes an artifact built from a Dockerfile,
   731  // usually using `docker build`.
   732  type DockerArtifact struct {
   733  	// DockerfilePath locates the Dockerfile relative to workspace.
   734  	// Defaults to `Dockerfile`.
   735  	DockerfilePath string `yaml:"dockerfile,omitempty"`
   736  
   737  	// Target is the Dockerfile target name to build.
   738  	Target string `yaml:"target,omitempty"`
   739  
   740  	// BuildArgs are arguments passed to the docker build.
   741  	// For example: `{"key1": "value1", "key2": "value2"}`.
   742  	BuildArgs map[string]*string `yaml:"buildArgs,omitempty"`
   743  
   744  	// NetworkMode is passed through to docker and overrides the
   745  	// network configuration of docker builder. If unset, use whatever
   746  	// is configured in the underlying docker daemon. Valid modes are
   747  	// `host`: use the host's networking stack.
   748  	// `bridge`: use the bridged network configuration.
   749  	// `none`: no networking in the container.
   750  	NetworkMode string `yaml:"network,omitempty"`
   751  
   752  	// CacheFrom lists the Docker images used as cache sources.
   753  	// For example: `["golang:1.10.1-alpine3.7", "alpine:3.7"]`.
   754  	CacheFrom []string `yaml:"cacheFrom,omitempty"`
   755  
   756  	// NoCache used to pass in --no-cache to docker build to prevent caching.
   757  	NoCache bool `yaml:"noCache,omitempty"`
   758  }
   759  
   760  // BazelArtifact *beta* describes an artifact built with [Bazel](https://bazel.build/).
   761  type BazelArtifact struct {
   762  	// BuildTarget is the `bazel build` target to run.
   763  	// For example: `//:skaffold_example.tar`.
   764  	BuildTarget string `yaml:"target,omitempty" yamltags:"required"`
   765  
   766  	// BuildArgs are additional args to pass to `bazel build`.
   767  	// For example: `["-flag", "--otherflag"]`.
   768  	BuildArgs []string `yaml:"args,omitempty"`
   769  }
   770  
   771  // JibArtifact *alpha* builds images using the
   772  // [Jib plugins for Maven and Gradle](https://github.com/GoogleContainerTools/jib/).
   773  type JibArtifact struct {
   774  	// Project selects which sub-project to build for multi-module builds.
   775  	Project string `yaml:"project,omitempty"`
   776  
   777  	// Flags are additional build flags passed to the builder.
   778  	// For example: `["--no-build-cache"]`.
   779  	Flags []string `yaml:"args,omitempty"`
   780  
   781  	// Type the Jib builder type; normally determined automatically. Valid types are
   782  	// `maven`: for Maven.
   783  	// `gradle`: for Gradle.
   784  	Type string `yaml:"type,omitempty"`
   785  }