github.com/GoogleContainerTools/skaffold@v1.39.18/pkg/skaffold/schema/v1beta14/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 v1beta14
    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/v1beta14"
    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  
   433  // HelmRelease describes a helm release to be deployed.
   434  type HelmRelease struct {
   435  	// Name is the name of the Helm release.
   436  	Name string `yaml:"name,omitempty" yamltags:"required"`
   437  
   438  	// ChartPath is the path to the Helm chart.
   439  	ChartPath string `yaml:"chartPath,omitempty" yamltags:"required"`
   440  
   441  	// ValuesFiles are the paths to the Helm `values` files.
   442  	ValuesFiles []string `yaml:"valuesFiles,omitempty"`
   443  
   444  	// Values are key-value pairs supplementing the Helm `values` file.
   445  	Values map[string]string `yaml:"values,omitempty,omitempty"`
   446  
   447  	// Namespace is the Kubernetes namespace.
   448  	Namespace string `yaml:"namespace,omitempty"`
   449  
   450  	// Version is the version of the chart.
   451  	Version string `yaml:"version,omitempty"`
   452  
   453  	// SetValues are key-value pairs.
   454  	// If present, Skaffold will send `--set` flag to Helm CLI and append all pairs after the flag.
   455  	SetValues map[string]string `yaml:"setValues,omitempty"`
   456  
   457  	// SetValueTemplates are key-value pairs.
   458  	// If present, Skaffold will try to parse the value part of each key-value pair using
   459  	// environment variables in the system, then send `--set` flag to Helm CLI and append
   460  	// all parsed pairs after the flag.
   461  	SetValueTemplates map[string]string `yaml:"setValueTemplates,omitempty"`
   462  
   463  	// Wait if `true`, Skaffold will send `--wait` flag to Helm CLI.
   464  	// Defaults to `false`.
   465  	Wait bool `yaml:"wait,omitempty"`
   466  
   467  	// RecreatePods if `true`, Skaffold will send `--recreate-pods` flag to Helm CLI.
   468  	// Defaults to `false`.
   469  	RecreatePods bool `yaml:"recreatePods,omitempty"`
   470  
   471  	// SkipBuildDependencies should build dependencies be skipped.
   472  	SkipBuildDependencies bool `yaml:"skipBuildDependencies,omitempty"`
   473  
   474  	// UseHelmSecrets instructs skaffold to use secrets plugin on deployment.
   475  	UseHelmSecrets bool `yaml:"useHelmSecrets,omitempty"`
   476  
   477  	// Remote specifies whether the chart path is remote, or exists on the host filesystem.
   478  	// `remote: true` implies `skipBuildDependencies: true`.
   479  	Remote bool `yaml:"remote,omitempty"`
   480  
   481  	// Overrides are key-value pairs.
   482  	// If present, Skaffold will build a Helm `values` file that overrides
   483  	// the original and use it to call Helm CLI (`--f` flag).
   484  	Overrides util.HelmOverrides `yaml:"overrides,omitempty"`
   485  
   486  	// Packaged parameters for packaging helm chart (`helm package`).
   487  	Packaged *HelmPackaged `yaml:"packaged,omitempty"`
   488  
   489  	// ImageStrategy adds image configurations to the Helm `values` file.
   490  	ImageStrategy HelmImageStrategy `yaml:"imageStrategy,omitempty"`
   491  }
   492  
   493  // HelmPackaged parameters for packaging helm chart (`helm package`).
   494  type HelmPackaged struct {
   495  	// Version sets the `version` on the chart to this semver version.
   496  	Version string `yaml:"version,omitempty"`
   497  
   498  	// AppVersion sets the `appVersion` on the chart to this version.
   499  	AppVersion string `yaml:"appVersion,omitempty"`
   500  }
   501  
   502  // HelmImageStrategy adds image configurations to the Helm `values` file.
   503  type HelmImageStrategy struct {
   504  	HelmImageConfig `yaml:",inline"`
   505  }
   506  
   507  // HelmImageConfig describes an image configuration.
   508  type HelmImageConfig struct {
   509  	// HelmFQNConfig is the image configuration uses the syntax `IMAGE-NAME=IMAGE-REPOSITORY:IMAGE-TAG`.
   510  	HelmFQNConfig *HelmFQNConfig `yaml:"fqn,omitempty" yamltags:"oneOf=helmImageStrategy"`
   511  
   512  	// HelmConventionConfig is the image configuration uses the syntax `IMAGE-NAME.repository=IMAGE-REPOSITORY, IMAGE-NAME.tag=IMAGE-TAG`.
   513  	HelmConventionConfig *HelmConventionConfig `yaml:"helm,omitempty" yamltags:"oneOf=helmImageStrategy"`
   514  }
   515  
   516  // HelmFQNConfig is the image config to use the FullyQualifiedImageName as param to set.
   517  type HelmFQNConfig struct {
   518  	// Property defines the image config.
   519  	Property string `yaml:"property,omitempty"`
   520  }
   521  
   522  // HelmConventionConfig is the image config in the syntax of image.repository and image.tag.
   523  type HelmConventionConfig struct {
   524  	// ExplicitRegistry separates `image.registry` to the image config syntax. Useful for some charts e.g. `postgresql`.
   525  	ExplicitRegistry bool `yaml:"explicitRegistry,omitempty"`
   526  }
   527  
   528  // Artifact are the items that need to be built, along with the context in which
   529  // they should be built.
   530  type Artifact struct {
   531  	// ImageName is the name of the image to be built.
   532  	// For example: `gcr.io/k8s-skaffold/example`.
   533  	ImageName string `yaml:"image,omitempty" yamltags:"required"`
   534  
   535  	// Workspace is the directory containing the artifact's sources.
   536  	// Defaults to `.`.
   537  	Workspace string `yaml:"context,omitempty"`
   538  
   539  	// Sync *alpha* lists local files synced to pods instead
   540  	// of triggering an image build when modified.
   541  	Sync *Sync `yaml:"sync,omitempty"`
   542  
   543  	// ArtifactType describes how to build an artifact.
   544  	ArtifactType `yaml:",inline"`
   545  }
   546  
   547  // Sync *alpha* specifies what files to sync into the container.
   548  // This is a list of sync rules indicating the intent to sync for source files.
   549  type Sync struct {
   550  	// Manual lists manual sync rules indicating the source and destination.
   551  	Manual []*SyncRule `yaml:"manual,omitempty" yamltags:"oneOf=sync"`
   552  
   553  	// Infer lists file patterns which may be synced into the container.
   554  	// The container destination is inferred by the builder.
   555  	// Currently only available for docker artifacts.
   556  	Infer []string `yaml:"infer,omitempty" yamltags:"oneOf=sync"`
   557  }
   558  
   559  // SyncRule specifies which local files to sync to remote folders.
   560  type SyncRule struct {
   561  	// Src is a glob pattern to match local paths against.
   562  	// Directories should be delimited by `/` on all platforms.
   563  	// For example: `"css/**/*.css"`.
   564  	Src string `yaml:"src,omitempty" yamltags:"required"`
   565  
   566  	// Dest is the destination path in the container where the files should be synced to.
   567  	// For example: `"app/"`
   568  	Dest string `yaml:"dest,omitempty" yamltags:"required"`
   569  
   570  	// Strip specifies the path prefix to remove from the source path when
   571  	// transplanting the files into the destination folder.
   572  	// For example: `"css/"`
   573  	Strip string `yaml:"strip,omitempty"`
   574  }
   575  
   576  // Profile *beta* profiles are used to override any `build`, `test` or `deploy` configuration.
   577  type Profile struct {
   578  	// Name is a unique profile name.
   579  	// For example: `profile-prod`.
   580  	Name string `yaml:"name,omitempty" yamltags:"required"`
   581  
   582  	// Pipeline contains the definitions to replace the default skaffold pipeline.
   583  	Pipeline `yaml:",inline"`
   584  
   585  	// Patches lists patches applied to the configuration.
   586  	// Patches use the JSON patch notation.
   587  	Patches []JSONPatch `yaml:"patches,omitempty"`
   588  
   589  	// Activation criteria by which a profile can be auto-activated.
   590  	// The profile is auto-activated if any one of the activations are triggered.
   591  	// An activation is triggered if all of the criteria (env, kubeContext, command) are triggered.
   592  	Activation []Activation `yaml:"activation,omitempty"`
   593  }
   594  
   595  // JSONPatch patch to be applied by a profile.
   596  type JSONPatch struct {
   597  	// Op is the operation carried by the patch: `add`, `remove`, `replace`, `move`, `copy` or `test`.
   598  	// Defaults to `replace`.
   599  	Op string `yaml:"op,omitempty"`
   600  
   601  	// Path is the position in the yaml where the operation takes place.
   602  	// For example, this targets the `dockerfile` of the first artifact built.
   603  	// For example: `/build/artifacts/0/docker/dockerfile`.
   604  	Path string `yaml:"path,omitempty" yamltags:"required"`
   605  
   606  	// From is the source position in the yaml, used for `copy` or `move` operations.
   607  	From string `yaml:"from,omitempty"`
   608  
   609  	// Value is the value to apply. Can be any portion of yaml.
   610  	Value *util.YamlpatchNode `yaml:"value,omitempty"`
   611  }
   612  
   613  // Activation criteria by which a profile is auto-activated.
   614  type Activation struct {
   615  	// Env is a `key=pattern` pair. The profile is auto-activated if an Environment
   616  	// Variable `key` matches the pattern. If the pattern starts with `!`, activation
   617  	// happens if the remaining pattern is _not_ matched. The pattern matches if the
   618  	// Environment Variable value is exactly `pattern`, or the regex `pattern` is
   619  	// found in it. An empty `pattern` (e.g. `env: "key="`) always only matches if
   620  	// the Environment Variable is undefined or empty.
   621  	// For example: `ENV=production`
   622  	Env string `yaml:"env,omitempty"`
   623  
   624  	// KubeContext is a Kubernetes context for which the profile is auto-activated.
   625  	// For example: `minikube`.
   626  	KubeContext string `yaml:"kubeContext,omitempty"`
   627  
   628  	// Command is a Skaffold command for which the profile is auto-activated.
   629  	// For example: `dev`.
   630  	Command string `yaml:"command,omitempty"`
   631  }
   632  
   633  // ArtifactType describes how to build an artifact.
   634  type ArtifactType struct {
   635  	// DockerArtifact *beta* describes an artifact built from a Dockerfile.
   636  	DockerArtifact *DockerArtifact `yaml:"docker,omitempty" yamltags:"oneOf=artifact"`
   637  
   638  	// BazelArtifact *beta* requires bazel CLI to be installed and the sources to
   639  	// contain [Bazel](https://bazel.build/) configuration files.
   640  	BazelArtifact *BazelArtifact `yaml:"bazel,omitempty" yamltags:"oneOf=artifact"`
   641  
   642  	// JibArtifact *alpha* builds images using the
   643  	// [Jib plugins for Maven or Gradle](https://github.com/GoogleContainerTools/jib/).
   644  	JibArtifact *JibArtifact `yaml:"jib,omitempty" yamltags:"oneOf=artifact"`
   645  
   646  	// KanikoArtifact *alpha* builds images using [kaniko](https://github.com/GoogleContainerTools/kaniko).
   647  	KanikoArtifact *KanikoArtifact `yaml:"kaniko,omitempty" yamltags:"oneOf=artifact"`
   648  
   649  	// CustomArtifact *alpha* builds images using a custom build script written by the user.
   650  	CustomArtifact *CustomArtifact `yaml:"custom,omitempty" yamltags:"oneOf=artifact"`
   651  }
   652  
   653  // CustomArtifact *alpha* describes an artifact built from a custom build script
   654  // written by the user. It can be used to build images with builders that aren't directly integrated with skaffold.
   655  type CustomArtifact struct {
   656  	// BuildCommand is the command executed to build the image.
   657  	BuildCommand string `yaml:"buildCommand,omitempty"`
   658  	// Dependencies are the file dependencies that skaffold should watch for both rebuilding and file syncing for this artifact.
   659  	Dependencies *CustomDependencies `yaml:"dependencies,omitempty"`
   660  }
   661  
   662  // CustomDependencies *alpha* is used to specify dependencies for an artifact built by a custom build script.
   663  // Either `dockerfile` or `paths` should be specified for file watching to work as expected.
   664  type CustomDependencies struct {
   665  	// Dockerfile should be set if the artifact is built from a Dockerfile, from which skaffold can determine dependencies.
   666  	Dockerfile *DockerfileDependency `yaml:"dockerfile,omitempty" yamltags:"oneOf=dependency"`
   667  	// Command represents a custom command that skaffold executes to obtain dependencies. The output of this command *must* be a valid JSON array.
   668  	Command string `yaml:"command,omitempty" yamltags:"oneOf=dependency"`
   669  	// 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.
   670  	Paths []string `yaml:"paths,omitempty" yamltags:"oneOf=dependency"`
   671  	// 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.
   672  	// Will only work in conjunction with `paths`.
   673  	Ignore []string `yaml:"ignore,omitempty"`
   674  }
   675  
   676  // 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.
   677  type DockerfileDependency struct {
   678  	// Path locates the Dockerfile relative to workspace.
   679  	Path string `yaml:"path,omitempty"`
   680  
   681  	// BuildArgs are arguments passed to the docker build.
   682  	// It also accepts environment variables via the go template syntax.
   683  	// For example: `{"key1": "value1", "key2": "value2", "key3": "{{.ENV_VARIABLE}}"}`.
   684  	BuildArgs map[string]*string `yaml:"buildArgs,omitempty"`
   685  }
   686  
   687  // KanikoArtifact *alpha* describes an artifact built from a Dockerfile,
   688  // with kaniko.
   689  type KanikoArtifact struct {
   690  	// AdditionalFlags are additional flags to be passed to Kaniko command line.
   691  	// See [Kaniko Additional Flags](https://github.com/GoogleContainerTools/kaniko#additional-flags).
   692  	// Deprecated - instead the named, unique fields should be used, e.g. `buildArgs`, `cache`, `target`.
   693  	AdditionalFlags []string `yaml:"flags,omitempty"`
   694  
   695  	// DockerfilePath locates the Dockerfile relative to workspace.
   696  	// Defaults to `Dockerfile`.
   697  	DockerfilePath string `yaml:"dockerfile,omitempty"`
   698  
   699  	// Target is the Dockerfile target name to build.
   700  	Target string `yaml:"target,omitempty"`
   701  
   702  	// BuildArgs are arguments passed to the docker build.
   703  	// It also accepts environment variables via the go template syntax.
   704  	// For example: `{"key1": "value1", "key2": "value2", "key3": "{{.ENV_VARIABLE}}"}`.
   705  	BuildArgs map[string]*string `yaml:"buildArgs,omitempty"`
   706  
   707  	// BuildContext is where the build context for this artifact resides.
   708  	BuildContext *KanikoBuildContext `yaml:"buildContext,omitempty"`
   709  
   710  	// Image is the Docker image used by the Kaniko pod.
   711  	// Defaults to the latest released version of `gcr.io/kaniko-project/executor`.
   712  	Image string `yaml:"image,omitempty"`
   713  
   714  	// Cache configures Kaniko caching. If a cache is specified, Kaniko will
   715  	// use a remote cache which will speed up builds.
   716  	Cache *KanikoCache `yaml:"cache,omitempty"`
   717  
   718  	// Reproducible is used to strip timestamps out of the built image.
   719  	Reproducible bool `yaml:"reproducible,omitempty"`
   720  }
   721  
   722  // DockerArtifact *beta* describes an artifact built from a Dockerfile,
   723  // usually using `docker build`.
   724  type DockerArtifact struct {
   725  	// DockerfilePath locates the Dockerfile relative to workspace.
   726  	// Defaults to `Dockerfile`.
   727  	DockerfilePath string `yaml:"dockerfile,omitempty"`
   728  
   729  	// Target is the Dockerfile target name to build.
   730  	Target string `yaml:"target,omitempty"`
   731  
   732  	// BuildArgs are arguments passed to the docker build.
   733  	// For example: `{"key1": "value1", "key2": "value2"}`.
   734  	BuildArgs map[string]*string `yaml:"buildArgs,omitempty"`
   735  
   736  	// NetworkMode is passed through to docker and overrides the
   737  	// network configuration of docker builder. If unset, use whatever
   738  	// is configured in the underlying docker daemon. Valid modes are
   739  	// `host`: use the host's networking stack.
   740  	// `bridge`: use the bridged network configuration.
   741  	// `none`: no networking in the container.
   742  	NetworkMode string `yaml:"network,omitempty"`
   743  
   744  	// CacheFrom lists the Docker images used as cache sources.
   745  	// For example: `["golang:1.10.1-alpine3.7", "alpine:3.7"]`.
   746  	CacheFrom []string `yaml:"cacheFrom,omitempty"`
   747  
   748  	// NoCache used to pass in --no-cache to docker build to prevent caching.
   749  	NoCache bool `yaml:"noCache,omitempty"`
   750  }
   751  
   752  // BazelArtifact *beta* describes an artifact built with [Bazel](https://bazel.build/).
   753  type BazelArtifact struct {
   754  	// BuildTarget is the `bazel build` target to run.
   755  	// For example: `//:skaffold_example.tar`.
   756  	BuildTarget string `yaml:"target,omitempty" yamltags:"required"`
   757  
   758  	// BuildArgs are additional args to pass to `bazel build`.
   759  	// For example: `["-flag", "--otherflag"]`.
   760  	BuildArgs []string `yaml:"args,omitempty"`
   761  }
   762  
   763  // JibArtifact *alpha* builds images using the
   764  // [Jib plugins for Maven and Gradle](https://github.com/GoogleContainerTools/jib/).
   765  type JibArtifact struct {
   766  	// Project selects which sub-project to build for multi-module builds.
   767  	Project string `yaml:"project,omitempty"`
   768  
   769  	// Flags are additional build flags passed to the builder.
   770  	// For example: `["--no-build-cache"]`.
   771  	Flags []string `yaml:"args,omitempty"`
   772  
   773  	// Type the Jib builder type; normally determined automatically. Valid types are
   774  	// `maven`: for Maven.
   775  	// `gradle`: for Gradle.
   776  	Type string `yaml:"type,omitempty"`
   777  }