From 4d2b9316aaed62ff7b450954d2116fde5144680b Mon Sep 17 00:00:00 2001
From: Cornelius Weig <22861411+corneliusweig@users.noreply.github.com>
Date: Tue, 16 Apr 2019 12:54:47 +0200
Subject: [PATCH] Freeze v1beta8 config
---
docs/config.toml | 2 +-
docs/content/en/schemas/v1beta9.json | 1702 +++++++++++++++++
integration/examples/bazel/skaffold.yaml | 2 +-
.../examples/getting-started/skaffold.yaml | 2 +-
.../examples/helm-deployment/skaffold.yaml | 2 +-
integration/examples/hot-reload/skaffold.yaml | 2 +-
.../examples/jib-multimodule/skaffold.yaml | 2 +-
integration/examples/jib/skaffold.yaml | 2 +-
.../examples/kaniko-local/skaffold.yaml | 2 +-
integration/examples/kaniko/skaffold.yaml | 2 +-
integration/examples/kustomize/skaffold.yaml | 2 +-
.../examples/microservices/skaffold.yaml | 2 +-
integration/examples/nodejs/skaffold.yaml | 2 +-
.../examples/react-reload/skaffold.yaml | 2 +-
.../examples/structure-tests/skaffold.yaml | 2 +-
.../skaffold.yaml | 2 +-
integration/testdata/build/skaffold.yaml | 2 +-
integration/testdata/dev/skaffold.yaml | 2 +-
integration/testdata/file-sync/skaffold.yaml | 2 +-
integration/testdata/jib/skaffold.yaml | 2 +-
.../kaniko-microservices/skaffold.yaml | 2 +-
.../testdata/kaniko-sub-folder/skaffold.yaml | 2 +-
integration/testdata/plugin/gcb/skaffold.yaml | 2 +-
.../testdata/plugin/local/bazel/skaffold.yaml | 2 +-
.../plugin/local/docker/skaffold.yaml | 2 +-
integration/testdata/tagPolicy/skaffold.yaml | 2 +-
pkg/skaffold/schema/latest/config.go | 2 +-
pkg/skaffold/schema/v1beta7/upgrade.go | 2 +-
pkg/skaffold/schema/v1beta7/upgrade_test.go | 4 +-
pkg/skaffold/schema/v1beta8/config.go | 666 +++++++
pkg/skaffold/schema/v1beta8/upgrade.go | 68 +
pkg/skaffold/schema/v1beta8/upgrade_test.go | 111 ++
pkg/skaffold/schema/versions.go | 2 +
33 files changed, 2578 insertions(+), 29 deletions(-)
create mode 100755 docs/content/en/schemas/v1beta9.json
create mode 100644 pkg/skaffold/schema/v1beta8/config.go
create mode 100644 pkg/skaffold/schema/v1beta8/upgrade.go
create mode 100644 pkg/skaffold/schema/v1beta8/upgrade_test.go
diff --git a/docs/config.toml b/docs/config.toml
index 1bdf7531f71..9eef3c6abec 100644
--- a/docs/config.toml
+++ b/docs/config.toml
@@ -70,7 +70,7 @@ weight = 1
#copyright = "Skaffold"
#privacy_policy = "https://policies.google.com/privacy"
github_repo = "https://github.com/GoogleContainerTools/skaffold"
-skaffold_version = "skaffold/v1beta8"
+skaffold_version = "skaffold/v1beta9"
# Google Custom Search Engine ID. Remove or comment out to disable search.
gcs_engine_id = "013756393218025596041:3nojel67sum"
diff --git a/docs/content/en/schemas/v1beta9.json b/docs/content/en/schemas/v1beta9.json
new file mode 100755
index 00000000000..49864016418
--- /dev/null
+++ b/docs/content/en/schemas/v1beta9.json
@@ -0,0 +1,1702 @@
+{
+ "type": "object",
+ "anyOf": [
+ {
+ "$ref": "#/definitions/SkaffoldConfig"
+ }
+ ],
+ "$schema": "http://json-schema-org/draft-07/schema#",
+ "definitions": {
+ "Activation": {
+ "properties": {
+ "command": {
+ "type": "string",
+ "description": "a Skaffold command for which the profile is auto-activated.",
+ "x-intellij-html-description": "a Skaffold command for which the profile is auto-activated.",
+ "examples": [
+ "dev"
+ ]
+ },
+ "env": {
+ "type": "string",
+ "description": "a `key=value` pair. The profile is auto-activated if an Environment Variable `key` has value `value`.",
+ "x-intellij-html-description": "a key=value
pair. The profile is auto-activated if an Environment Variable key
has value value
.",
+ "examples": [
+ "ENV=production"
+ ]
+ },
+ "kubeContext": {
+ "type": "string",
+ "description": "a Kubernetes context for which the profile is auto-activated.",
+ "x-intellij-html-description": "a Kubernetes context for which the profile is auto-activated.",
+ "examples": [
+ "minikube"
+ ]
+ }
+ },
+ "preferredOrder": [
+ "env",
+ "kubeContext",
+ "command"
+ ],
+ "additionalProperties": false,
+ "description": "criteria by which a profile is auto-activated.",
+ "x-intellij-html-description": "criteria by which a profile is auto-activated."
+ },
+ "Artifact": {
+ "required": [
+ "image"
+ ],
+ "anyOf": [
+ {
+ "properties": {
+ "context": {
+ "type": "string",
+ "description": "directory containing the artifact's sources.",
+ "x-intellij-html-description": "directory containing the artifact's sources.",
+ "default": "."
+ },
+ "image": {
+ "type": "string",
+ "description": "name of the image to be built.",
+ "x-intellij-html-description": "name of the image to be built.",
+ "examples": [
+ "gcr.io/k8s-skaffold/example"
+ ]
+ },
+ "plugin": {
+ "$ref": "#/definitions/BuilderPlugin",
+ "description": "plugin used to build this artifact.",
+ "x-intellij-html-description": "plugin used to build this artifact."
+ },
+ "sync": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "*alpha* local files synced to pods instead of triggering an image build when modified. This is a mapping of local files to sync to remote folders.",
+ "x-intellij-html-description": "alpha local files synced to pods instead of triggering an image build when modified. This is a mapping of local files to sync to remote folders.",
+ "default": "{}",
+ "examples": [
+ "{\"*.py\": \".\", \"css/**/*.css\": \"app/css\"}"
+ ]
+ }
+ },
+ "preferredOrder": [
+ "image",
+ "context",
+ "sync",
+ "plugin"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "context": {
+ "type": "string",
+ "description": "directory containing the artifact's sources.",
+ "x-intellij-html-description": "directory containing the artifact's sources.",
+ "default": "."
+ },
+ "docker": {
+ "$ref": "#/definitions/DockerArtifact",
+ "description": "*beta* describes an artifact built from a Dockerfile.",
+ "x-intellij-html-description": "beta describes an artifact built from a Dockerfile."
+ },
+ "image": {
+ "type": "string",
+ "description": "name of the image to be built.",
+ "x-intellij-html-description": "name of the image to be built.",
+ "examples": [
+ "gcr.io/k8s-skaffold/example"
+ ]
+ },
+ "plugin": {
+ "$ref": "#/definitions/BuilderPlugin",
+ "description": "plugin used to build this artifact.",
+ "x-intellij-html-description": "plugin used to build this artifact."
+ },
+ "sync": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "*alpha* local files synced to pods instead of triggering an image build when modified. This is a mapping of local files to sync to remote folders.",
+ "x-intellij-html-description": "alpha local files synced to pods instead of triggering an image build when modified. This is a mapping of local files to sync to remote folders.",
+ "default": "{}",
+ "examples": [
+ "{\"*.py\": \".\", \"css/**/*.css\": \"app/css\"}"
+ ]
+ }
+ },
+ "preferredOrder": [
+ "image",
+ "context",
+ "sync",
+ "plugin",
+ "docker"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "bazel": {
+ "$ref": "#/definitions/BazelArtifact",
+ "description": "*beta* requires bazel CLI to be installed and the sources to contain [Bazel](https://bazel.build/) configuration files.",
+ "x-intellij-html-description": "beta requires bazel CLI to be installed and the sources to contain Bazel configuration files."
+ },
+ "context": {
+ "type": "string",
+ "description": "directory containing the artifact's sources.",
+ "x-intellij-html-description": "directory containing the artifact's sources.",
+ "default": "."
+ },
+ "image": {
+ "type": "string",
+ "description": "name of the image to be built.",
+ "x-intellij-html-description": "name of the image to be built.",
+ "examples": [
+ "gcr.io/k8s-skaffold/example"
+ ]
+ },
+ "plugin": {
+ "$ref": "#/definitions/BuilderPlugin",
+ "description": "plugin used to build this artifact.",
+ "x-intellij-html-description": "plugin used to build this artifact."
+ },
+ "sync": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "*alpha* local files synced to pods instead of triggering an image build when modified. This is a mapping of local files to sync to remote folders.",
+ "x-intellij-html-description": "alpha local files synced to pods instead of triggering an image build when modified. This is a mapping of local files to sync to remote folders.",
+ "default": "{}",
+ "examples": [
+ "{\"*.py\": \".\", \"css/**/*.css\": \"app/css\"}"
+ ]
+ }
+ },
+ "preferredOrder": [
+ "image",
+ "context",
+ "sync",
+ "plugin",
+ "bazel"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "context": {
+ "type": "string",
+ "description": "directory containing the artifact's sources.",
+ "x-intellij-html-description": "directory containing the artifact's sources.",
+ "default": "."
+ },
+ "image": {
+ "type": "string",
+ "description": "name of the image to be built.",
+ "x-intellij-html-description": "name of the image to be built.",
+ "examples": [
+ "gcr.io/k8s-skaffold/example"
+ ]
+ },
+ "jibMaven": {
+ "$ref": "#/definitions/JibMavenArtifact",
+ "description": "*alpha* builds images using the [Jib plugin for Maven](https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin).",
+ "x-intellij-html-description": "alpha builds images using the Jib plugin for Maven."
+ },
+ "plugin": {
+ "$ref": "#/definitions/BuilderPlugin",
+ "description": "plugin used to build this artifact.",
+ "x-intellij-html-description": "plugin used to build this artifact."
+ },
+ "sync": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "*alpha* local files synced to pods instead of triggering an image build when modified. This is a mapping of local files to sync to remote folders.",
+ "x-intellij-html-description": "alpha local files synced to pods instead of triggering an image build when modified. This is a mapping of local files to sync to remote folders.",
+ "default": "{}",
+ "examples": [
+ "{\"*.py\": \".\", \"css/**/*.css\": \"app/css\"}"
+ ]
+ }
+ },
+ "preferredOrder": [
+ "image",
+ "context",
+ "sync",
+ "plugin",
+ "jibMaven"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "context": {
+ "type": "string",
+ "description": "directory containing the artifact's sources.",
+ "x-intellij-html-description": "directory containing the artifact's sources.",
+ "default": "."
+ },
+ "image": {
+ "type": "string",
+ "description": "name of the image to be built.",
+ "x-intellij-html-description": "name of the image to be built.",
+ "examples": [
+ "gcr.io/k8s-skaffold/example"
+ ]
+ },
+ "jibGradle": {
+ "$ref": "#/definitions/JibGradleArtifact",
+ "description": "*alpha* builds images using the [Jib plugin for Gradle](https://github.com/GoogleContainerTools/jib/tree/master/jib-gradle-plugin).",
+ "x-intellij-html-description": "alpha builds images using the Jib plugin for Gradle."
+ },
+ "plugin": {
+ "$ref": "#/definitions/BuilderPlugin",
+ "description": "plugin used to build this artifact.",
+ "x-intellij-html-description": "plugin used to build this artifact."
+ },
+ "sync": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "*alpha* local files synced to pods instead of triggering an image build when modified. This is a mapping of local files to sync to remote folders.",
+ "x-intellij-html-description": "alpha local files synced to pods instead of triggering an image build when modified. This is a mapping of local files to sync to remote folders.",
+ "default": "{}",
+ "examples": [
+ "{\"*.py\": \".\", \"css/**/*.css\": \"app/css\"}"
+ ]
+ }
+ },
+ "preferredOrder": [
+ "image",
+ "context",
+ "sync",
+ "plugin",
+ "jibGradle"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "context": {
+ "type": "string",
+ "description": "directory containing the artifact's sources.",
+ "x-intellij-html-description": "directory containing the artifact's sources.",
+ "default": "."
+ },
+ "image": {
+ "type": "string",
+ "description": "name of the image to be built.",
+ "x-intellij-html-description": "name of the image to be built.",
+ "examples": [
+ "gcr.io/k8s-skaffold/example"
+ ]
+ },
+ "kaniko": {
+ "$ref": "#/definitions/KanikoArtifact",
+ "description": "*alpha* builds images using [kaniko](https://github.com/GoogleContainerTools/kaniko).",
+ "x-intellij-html-description": "alpha builds images using kaniko."
+ },
+ "plugin": {
+ "$ref": "#/definitions/BuilderPlugin",
+ "description": "plugin used to build this artifact.",
+ "x-intellij-html-description": "plugin used to build this artifact."
+ },
+ "sync": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "*alpha* local files synced to pods instead of triggering an image build when modified. This is a mapping of local files to sync to remote folders.",
+ "x-intellij-html-description": "alpha local files synced to pods instead of triggering an image build when modified. This is a mapping of local files to sync to remote folders.",
+ "default": "{}",
+ "examples": [
+ "{\"*.py\": \".\", \"css/**/*.css\": \"app/css\"}"
+ ]
+ }
+ },
+ "preferredOrder": [
+ "image",
+ "context",
+ "sync",
+ "plugin",
+ "kaniko"
+ ],
+ "additionalProperties": false
+ }
+ ],
+ "description": "items that need to be built, along with the context in which they should be built.",
+ "x-intellij-html-description": "items that need to be built, along with the context in which they should be built."
+ },
+ "BazelArtifact": {
+ "required": [
+ "target"
+ ],
+ "properties": {
+ "args": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "additional args to pass to `bazel build`.",
+ "x-intellij-html-description": "additional args to pass to bazel build
.",
+ "default": "[]",
+ "examples": [
+ "[\"-flag\", \"--otherflag\"]"
+ ]
+ },
+ "target": {
+ "type": "string",
+ "description": "`bazel build` target to run.",
+ "x-intellij-html-description": "bazel build
target to run.",
+ "examples": [
+ "//:skaffold_example.tar"
+ ]
+ }
+ },
+ "preferredOrder": [
+ "target",
+ "args"
+ ],
+ "additionalProperties": false,
+ "description": "*beta* describes an artifact built with [Bazel](https://bazel.build/).",
+ "x-intellij-html-description": "beta describes an artifact built with Bazel."
+ },
+ "BuildConfig": {
+ "anyOf": [
+ {
+ "properties": {
+ "artifacts": {
+ "items": {
+ "$ref": "#/definitions/Artifact"
+ },
+ "type": "array",
+ "description": "the images you're going to be building.",
+ "x-intellij-html-description": "the images you're going to be building."
+ },
+ "executionEnvironment": {
+ "$ref": "#/definitions/ExecutionEnvironment",
+ "description": "environment in which the build should run. Possible values: googleCloudBuild.",
+ "x-intellij-html-description": "environment in which the build should run. Possible values: googleCloudBuild."
+ },
+ "insecureRegistries": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "a list of registries declared by the user to be insecure. These registries will be connected to via HTTP instead of HTTPS.",
+ "x-intellij-html-description": "a list of registries declared by the user to be insecure. These registries will be connected to via HTTP instead of HTTPS.",
+ "default": "[]"
+ },
+ "tagPolicy": {
+ "$ref": "#/definitions/TagPolicy",
+ "description": "*beta* determines how images are tagged. A few strategies are provided here, although you most likely won't need to care! If not specified, it defaults to `gitCommit: {}`.",
+ "x-intellij-html-description": "beta determines how images are tagged. A few strategies are provided here, although you most likely won't need to care! If not specified, it defaults to gitCommit: {}
."
+ }
+ },
+ "preferredOrder": [
+ "artifacts",
+ "insecureRegistries",
+ "tagPolicy",
+ "executionEnvironment"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "artifacts": {
+ "items": {
+ "$ref": "#/definitions/Artifact"
+ },
+ "type": "array",
+ "description": "the images you're going to be building.",
+ "x-intellij-html-description": "the images you're going to be building."
+ },
+ "executionEnvironment": {
+ "$ref": "#/definitions/ExecutionEnvironment",
+ "description": "environment in which the build should run. Possible values: googleCloudBuild.",
+ "x-intellij-html-description": "environment in which the build should run. Possible values: googleCloudBuild."
+ },
+ "insecureRegistries": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "a list of registries declared by the user to be insecure. These registries will be connected to via HTTP instead of HTTPS.",
+ "x-intellij-html-description": "a list of registries declared by the user to be insecure. These registries will be connected to via HTTP instead of HTTPS.",
+ "default": "[]"
+ },
+ "local": {
+ "$ref": "#/definitions/LocalBuild",
+ "description": "*beta* describes how to do a build on the local docker daemon and optionally push to a repository.",
+ "x-intellij-html-description": "beta describes how to do a build on the local docker daemon and optionally push to a repository."
+ },
+ "tagPolicy": {
+ "$ref": "#/definitions/TagPolicy",
+ "description": "*beta* determines how images are tagged. A few strategies are provided here, although you most likely won't need to care! If not specified, it defaults to `gitCommit: {}`.",
+ "x-intellij-html-description": "beta determines how images are tagged. A few strategies are provided here, although you most likely won't need to care! If not specified, it defaults to gitCommit: {}
."
+ }
+ },
+ "preferredOrder": [
+ "artifacts",
+ "insecureRegistries",
+ "tagPolicy",
+ "executionEnvironment",
+ "local"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "artifacts": {
+ "items": {
+ "$ref": "#/definitions/Artifact"
+ },
+ "type": "array",
+ "description": "the images you're going to be building.",
+ "x-intellij-html-description": "the images you're going to be building."
+ },
+ "executionEnvironment": {
+ "$ref": "#/definitions/ExecutionEnvironment",
+ "description": "environment in which the build should run. Possible values: googleCloudBuild.",
+ "x-intellij-html-description": "environment in which the build should run. Possible values: googleCloudBuild."
+ },
+ "googleCloudBuild": {
+ "$ref": "#/definitions/GoogleCloudBuild",
+ "description": "*beta* describes how to do a remote build on [Google Cloud Build](https://cloud.google.com/cloud-build/).",
+ "x-intellij-html-description": "beta describes how to do a remote build on Google Cloud Build."
+ },
+ "insecureRegistries": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "a list of registries declared by the user to be insecure. These registries will be connected to via HTTP instead of HTTPS.",
+ "x-intellij-html-description": "a list of registries declared by the user to be insecure. These registries will be connected to via HTTP instead of HTTPS.",
+ "default": "[]"
+ },
+ "tagPolicy": {
+ "$ref": "#/definitions/TagPolicy",
+ "description": "*beta* determines how images are tagged. A few strategies are provided here, although you most likely won't need to care! If not specified, it defaults to `gitCommit: {}`.",
+ "x-intellij-html-description": "beta determines how images are tagged. A few strategies are provided here, although you most likely won't need to care! If not specified, it defaults to gitCommit: {}
."
+ }
+ },
+ "preferredOrder": [
+ "artifacts",
+ "insecureRegistries",
+ "tagPolicy",
+ "executionEnvironment",
+ "googleCloudBuild"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "artifacts": {
+ "items": {
+ "$ref": "#/definitions/Artifact"
+ },
+ "type": "array",
+ "description": "the images you're going to be building.",
+ "x-intellij-html-description": "the images you're going to be building."
+ },
+ "cluster": {
+ "$ref": "#/definitions/ClusterDetails",
+ "description": "*beta* describes how to do an on-cluster build.",
+ "x-intellij-html-description": "beta describes how to do an on-cluster build."
+ },
+ "executionEnvironment": {
+ "$ref": "#/definitions/ExecutionEnvironment",
+ "description": "environment in which the build should run. Possible values: googleCloudBuild.",
+ "x-intellij-html-description": "environment in which the build should run. Possible values: googleCloudBuild."
+ },
+ "insecureRegistries": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "a list of registries declared by the user to be insecure. These registries will be connected to via HTTP instead of HTTPS.",
+ "x-intellij-html-description": "a list of registries declared by the user to be insecure. These registries will be connected to via HTTP instead of HTTPS.",
+ "default": "[]"
+ },
+ "tagPolicy": {
+ "$ref": "#/definitions/TagPolicy",
+ "description": "*beta* determines how images are tagged. A few strategies are provided here, although you most likely won't need to care! If not specified, it defaults to `gitCommit: {}`.",
+ "x-intellij-html-description": "beta determines how images are tagged. A few strategies are provided here, although you most likely won't need to care! If not specified, it defaults to gitCommit: {}
."
+ }
+ },
+ "preferredOrder": [
+ "artifacts",
+ "insecureRegistries",
+ "tagPolicy",
+ "executionEnvironment",
+ "cluster"
+ ],
+ "additionalProperties": false
+ }
+ ],
+ "description": "contains all the configuration for the build steps.",
+ "x-intellij-html-description": "contains all the configuration for the build steps."
+ },
+ "BuilderPlugin": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "name of the build plugin.",
+ "x-intellij-html-description": "name of the build plugin."
+ },
+ "properties": {
+ "additionalProperties": {},
+ "type": "object",
+ "description": "key-value pairs passed to the plugin.",
+ "x-intellij-html-description": "key-value pairs passed to the plugin.",
+ "default": "{}"
+ }
+ },
+ "preferredOrder": [
+ "name",
+ "properties"
+ ],
+ "additionalProperties": false,
+ "description": "contains all fields necessary for specifying a build plugin.",
+ "x-intellij-html-description": "contains all fields necessary for specifying a build plugin."
+ },
+ "ClusterDetails": {
+ "properties": {
+ "dockerConfig": {
+ "$ref": "#/definitions/DockerConfig",
+ "description": "describes how to mount the local Docker configuration into a pod.",
+ "x-intellij-html-description": "describes how to mount the local Docker configuration into a pod."
+ },
+ "namespace": {
+ "type": "string",
+ "description": "Kubernetes namespace. Defaults to current namespace in Kubernetes configuration.",
+ "x-intellij-html-description": "Kubernetes namespace. Defaults to current namespace in Kubernetes configuration."
+ },
+ "pullSecret": {
+ "type": "string",
+ "description": "path to the secret key file.",
+ "x-intellij-html-description": "path to the secret key file."
+ },
+ "pullSecretName": {
+ "type": "string",
+ "description": "name of the Kubernetes secret for pulling the files from the build context and pushing the final image.",
+ "x-intellij-html-description": "name of the Kubernetes secret for pulling the files from the build context and pushing the final image.",
+ "default": "kaniko-secret"
+ },
+ "resources": {
+ "$ref": "#/definitions/ResourceRequirements",
+ "description": "define the resource requirements for the kaniko pod.",
+ "x-intellij-html-description": "define the resource requirements for the kaniko pod."
+ },
+ "timeout": {
+ "type": "string",
+ "description": "amount of time (in seconds) that this build is allowed to run. Defaults to 20 minutes (`20m`).",
+ "x-intellij-html-description": "amount of time (in seconds) that this build is allowed to run. Defaults to 20 minutes (20m
)."
+ }
+ },
+ "preferredOrder": [
+ "pullSecret",
+ "pullSecretName",
+ "namespace",
+ "timeout",
+ "dockerConfig",
+ "resources"
+ ],
+ "additionalProperties": false,
+ "description": "*beta* describes how to do an on-cluster build.",
+ "x-intellij-html-description": "beta describes how to do an on-cluster build."
+ },
+ "DateTimeTagger": {
+ "properties": {
+ "format": {
+ "type": "string",
+ "description": "formats the date and time. See [#Time.Format](https://golang.org/pkg/time/#Time.Format).",
+ "x-intellij-html-description": "formats the date and time. See #Time.Format.",
+ "default": "2006-01-02_15-04-05.999_MST"
+ },
+ "timezone": {
+ "type": "string",
+ "description": "sets the timezone for the date and time. See [Time.LoadLocation](https://golang.org/pkg/time/#Time.LoadLocation). Defaults to the local timezone.",
+ "x-intellij-html-description": "sets the timezone for the date and time. See Time.LoadLocation. Defaults to the local timezone."
+ }
+ },
+ "preferredOrder": [
+ "format",
+ "timezone"
+ ],
+ "additionalProperties": false,
+ "description": "*beta* tags images with the build timestamp.",
+ "x-intellij-html-description": "beta tags images with the build timestamp."
+ },
+ "DeployConfig": {
+ "anyOf": [
+ {
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "helm": {
+ "$ref": "#/definitions/HelmDeploy",
+ "description": "*beta* uses the `helm` CLI to apply the charts to the cluster.",
+ "x-intellij-html-description": "beta uses the helm
CLI to apply the charts to the cluster."
+ }
+ },
+ "preferredOrder": [
+ "helm"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "kubectl": {
+ "$ref": "#/definitions/KubectlDeploy",
+ "description": "*beta* uses a client side `kubectl apply` to deploy manifests. You'll need a `kubectl` CLI version installed that's compatible with your cluster.",
+ "x-intellij-html-description": "beta uses a client side kubectl apply
to deploy manifests. You'll need a kubectl
CLI version installed that's compatible with your cluster."
+ }
+ },
+ "preferredOrder": [
+ "kubectl"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "kustomize": {
+ "$ref": "#/definitions/KustomizeDeploy",
+ "description": "*beta* uses the `kustomize` CLI to \"patch\" a deployment for a target environment.",
+ "x-intellij-html-description": "beta uses the kustomize
CLI to "patch" a deployment for a target environment."
+ }
+ },
+ "preferredOrder": [
+ "kustomize"
+ ],
+ "additionalProperties": false
+ }
+ ],
+ "description": "contains all the configuration needed by the deploy steps.",
+ "x-intellij-html-description": "contains all the configuration needed by the deploy steps."
+ },
+ "DockerArtifact": {
+ "properties": {
+ "buildArgs": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "arguments passed to the docker build.",
+ "x-intellij-html-description": "arguments passed to the docker build.",
+ "default": "{}",
+ "examples": [
+ "{\"key1\": \"value1\", \"key2\": \"value2\"}"
+ ]
+ },
+ "cacheFrom": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "the Docker images used as cache sources.",
+ "x-intellij-html-description": "the Docker images used as cache sources.",
+ "default": "[]",
+ "examples": [
+ "[\"golang:1.10.1-alpine3.7\", \"alpine:3.7\"]"
+ ]
+ },
+ "dockerfile": {
+ "type": "string",
+ "description": "locates the Dockerfile relative to workspace.",
+ "x-intellij-html-description": "locates the Dockerfile relative to workspace.",
+ "default": "Dockerfile"
+ },
+ "target": {
+ "type": "string",
+ "description": "Dockerfile target name to build.",
+ "x-intellij-html-description": "Dockerfile target name to build."
+ }
+ },
+ "preferredOrder": [
+ "dockerfile",
+ "target",
+ "buildArgs",
+ "cacheFrom"
+ ],
+ "additionalProperties": false,
+ "description": "*beta* describes an artifact built from a Dockerfile, usually using `docker build`.",
+ "x-intellij-html-description": "beta describes an artifact built from a Dockerfile, usually using docker build
."
+ },
+ "DockerConfig": {
+ "properties": {
+ "path": {
+ "type": "string",
+ "description": "path to the docker `config.json`.",
+ "x-intellij-html-description": "path to the docker config.json
."
+ },
+ "secretName": {
+ "type": "string",
+ "description": "Kubernetes secret that will hold the Docker configuration.",
+ "x-intellij-html-description": "Kubernetes secret that will hold the Docker configuration."
+ }
+ },
+ "preferredOrder": [
+ "path",
+ "secretName"
+ ],
+ "additionalProperties": false,
+ "description": "contains information about the docker `config.json` to mount.",
+ "x-intellij-html-description": "contains information about the docker config.json
to mount."
+ },
+ "EnvTemplateTagger": {
+ "required": [
+ "template"
+ ],
+ "properties": {
+ "template": {
+ "type": "string",
+ "description": "used to produce the image name and tag. See golang [text/template](https://golang.org/pkg/text/template/). The template is executed against the current environment, with those variables injected: IMAGE_NAME | Name of the image being built, as supplied in the artifacts section.",
+ "x-intellij-html-description": "used to produce the image name and tag. See golang text/template. The template is executed against the current environment, with those variables injected: IMAGE_NAME | Name of the image being built, as supplied in the artifacts section.",
+ "examples": [
+ "{{.RELEASE}}-{{.IMAGE_NAME}}"
+ ]
+ }
+ },
+ "preferredOrder": [
+ "template"
+ ],
+ "additionalProperties": false,
+ "description": "*beta* tags images with a configurable template string.",
+ "x-intellij-html-description": "beta tags images with a configurable template string."
+ },
+ "ExecEnvironment": {
+ "type": "string",
+ "description": "name of an execution environment.",
+ "x-intellij-html-description": "name of an execution environment."
+ },
+ "ExecutionEnvironment": {
+ "properties": {
+ "name": {
+ "$ref": "#/definitions/ExecEnvironment",
+ "description": "name of the environment.",
+ "x-intellij-html-description": "name of the environment."
+ },
+ "properties": {
+ "additionalProperties": {},
+ "type": "object",
+ "description": "key-value pairs passed to the environment.",
+ "x-intellij-html-description": "key-value pairs passed to the environment.",
+ "default": "{}"
+ }
+ },
+ "preferredOrder": [
+ "name",
+ "properties"
+ ],
+ "additionalProperties": false,
+ "description": "environment in which the build should run (ex. local or in-cluster, etc.).",
+ "x-intellij-html-description": "environment in which the build should run (ex. local or in-cluster, etc.)."
+ },
+ "GitTagger": {
+ "description": "*beta* tags images with the git tag or commit of the artifact's workspace.",
+ "x-intellij-html-description": "beta tags images with the git tag or commit of the artifact's workspace."
+ },
+ "GoogleCloudBuild": {
+ "properties": {
+ "diskSizeGb": {
+ "type": "number",
+ "description": "disk size of the VM that runs the build. See [Cloud Build Reference](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions).",
+ "x-intellij-html-description": "disk size of the VM that runs the build. See Cloud Build Reference."
+ },
+ "dockerImage": {
+ "type": "string",
+ "description": "image that runs a Docker build. See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders).",
+ "x-intellij-html-description": "image that runs a Docker build. See Cloud Builders.",
+ "default": "gcr.io/cloud-builders/docker"
+ },
+ "gradleImage": {
+ "type": "string",
+ "description": "image that runs a Gradle build. See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders).",
+ "x-intellij-html-description": "image that runs a Gradle build. See Cloud Builders.",
+ "default": "gcr.io/cloud-builders/gradle"
+ },
+ "machineType": {
+ "type": "string",
+ "description": "type of the VM that runs the build. See [Cloud Build Reference](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions).",
+ "x-intellij-html-description": "type of the VM that runs the build. See Cloud Build Reference."
+ },
+ "mavenImage": {
+ "type": "string",
+ "description": "image that runs a Maven build. See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders).",
+ "x-intellij-html-description": "image that runs a Maven build. See Cloud Builders.",
+ "default": "gcr.io/cloud-builders/mvn"
+ },
+ "projectId": {
+ "type": "string",
+ "description": "ID of your Cloud Platform Project. If it is not provided, Skaffold will guess it from the image name. For example, given the artifact image name `gcr.io/myproject/image`, Skaffold will use the `myproject` GCP project.",
+ "x-intellij-html-description": "ID of your Cloud Platform Project. If it is not provided, Skaffold will guess it from the image name. For example, given the artifact image name gcr.io/myproject/image
, Skaffold will use the myproject
GCP project."
+ },
+ "timeout": {
+ "type": "string",
+ "description": "amount of time (in seconds) that this build should be allowed to run. See [Cloud Build Reference](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#resource-build).",
+ "x-intellij-html-description": "amount of time (in seconds) that this build should be allowed to run. See Cloud Build Reference."
+ }
+ },
+ "preferredOrder": [
+ "projectId",
+ "diskSizeGb",
+ "machineType",
+ "timeout",
+ "dockerImage",
+ "mavenImage",
+ "gradleImage"
+ ],
+ "additionalProperties": false,
+ "description": "*beta* describes how to do a remote build on [Google Cloud Build](https://cloud.google.com/cloud-build/docs/). Docker and Jib artifacts can be built on Cloud Build. The `projectId` needs to be provided and the currently logged in user should be given permissions to trigger new builds.",
+ "x-intellij-html-description": "beta describes how to do a remote build on Google Cloud Build. Docker and Jib artifacts can be built on Cloud Build. The projectId
needs to be provided and the currently logged in user should be given permissions to trigger new builds."
+ },
+ "HelmConventionConfig": {
+ "description": "image config in the syntax of image.repository and image.tag.",
+ "x-intellij-html-description": "image config in the syntax of image.repository and image.tag."
+ },
+ "HelmDeploy": {
+ "required": [
+ "releases"
+ ],
+ "properties": {
+ "flags": {
+ "$ref": "#/definitions/HelmDeployFlags",
+ "description": "additional option flags that are passed on the command line to `helm`.",
+ "x-intellij-html-description": "additional option flags that are passed on the command line to helm
."
+ },
+ "releases": {
+ "items": {
+ "$ref": "#/definitions/HelmRelease"
+ },
+ "type": "array",
+ "description": "a list of Helm releases.",
+ "x-intellij-html-description": "a list of Helm releases."
+ }
+ },
+ "preferredOrder": [
+ "releases",
+ "flags"
+ ],
+ "additionalProperties": false,
+ "description": "*beta* uses the `helm` CLI to apply the charts to the cluster.",
+ "x-intellij-html-description": "beta uses the helm
CLI to apply the charts to the cluster."
+ },
+ "HelmDeployFlags": {
+ "properties": {
+ "global": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "additional flags passed on every command.",
+ "x-intellij-html-description": "additional flags passed on every command.",
+ "default": "[]"
+ },
+ "install": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "additional flags passed to (`helm install`).",
+ "x-intellij-html-description": "additional flags passed to (helm install
).",
+ "default": "[]"
+ },
+ "upgrade": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "additional flags passed to (`helm upgrade`).",
+ "x-intellij-html-description": "additional flags passed to (helm upgrade
).",
+ "default": "[]"
+ }
+ },
+ "preferredOrder": [
+ "global",
+ "install",
+ "upgrade"
+ ],
+ "additionalProperties": false,
+ "description": "additional option flags that are passed on the command line to `helm`.",
+ "x-intellij-html-description": "additional option flags that are passed on the command line to helm
."
+ },
+ "HelmFQNConfig": {
+ "properties": {
+ "property": {
+ "type": "string",
+ "description": "defines the image config.",
+ "x-intellij-html-description": "defines the image config."
+ }
+ },
+ "preferredOrder": [
+ "property"
+ ],
+ "additionalProperties": false,
+ "description": "image config to use the FullyQualifiedImageName as param to set.",
+ "x-intellij-html-description": "image config to use the FullyQualifiedImageName as param to set."
+ },
+ "HelmImageStrategy": {
+ "anyOf": [
+ {
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "fqn": {
+ "$ref": "#/definitions/HelmFQNConfig",
+ "description": "image configuration uses the syntax `IMAGE-NAME=IMAGE-REPOSITORY:IMAGE-TAG`.",
+ "x-intellij-html-description": "image configuration uses the syntax IMAGE-NAME=IMAGE-REPOSITORY:IMAGE-TAG
."
+ }
+ },
+ "preferredOrder": [
+ "fqn"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "helm": {
+ "$ref": "#/definitions/HelmConventionConfig",
+ "description": "image configuration uses the syntax `IMAGE-NAME.repository=IMAGE-REPOSITORY, IMAGE-NAME.tag=IMAGE-TAG`.",
+ "x-intellij-html-description": "image configuration uses the syntax IMAGE-NAME.repository=IMAGE-REPOSITORY, IMAGE-NAME.tag=IMAGE-TAG
."
+ }
+ },
+ "preferredOrder": [
+ "helm"
+ ],
+ "additionalProperties": false
+ }
+ ],
+ "description": "adds image configurations to the Helm `values` file.",
+ "x-intellij-html-description": "adds image configurations to the Helm values
file."
+ },
+ "HelmPackaged": {
+ "properties": {
+ "appVersion": {
+ "type": "string",
+ "description": "sets the `appVersion` on the chart to this version.",
+ "x-intellij-html-description": "sets the appVersion
on the chart to this version."
+ },
+ "version": {
+ "type": "string",
+ "description": "sets the `version` on the chart to this semver version.",
+ "x-intellij-html-description": "sets the version
on the chart to this semver version."
+ }
+ },
+ "preferredOrder": [
+ "version",
+ "appVersion"
+ ],
+ "additionalProperties": false,
+ "description": "parameters for packaging helm chart (`helm package`).",
+ "x-intellij-html-description": "parameters for packaging helm chart (helm package
)."
+ },
+ "HelmRelease": {
+ "required": [
+ "name",
+ "chartPath"
+ ],
+ "properties": {
+ "chartPath": {
+ "type": "string",
+ "description": "path to the Helm chart.",
+ "x-intellij-html-description": "path to the Helm chart."
+ },
+ "imageStrategy": {
+ "$ref": "#/definitions/HelmImageStrategy",
+ "description": "adds image configurations to the Helm `values` file.",
+ "x-intellij-html-description": "adds image configurations to the Helm values
file."
+ },
+ "name": {
+ "type": "string",
+ "description": "name of the Helm release.",
+ "x-intellij-html-description": "name of the Helm release."
+ },
+ "namespace": {
+ "type": "string",
+ "description": "Kubernetes namespace.",
+ "x-intellij-html-description": "Kubernetes namespace."
+ },
+ "overrides": {
+ "description": "key-value pairs. If present, Skaffold will build a Helm `values` file that overrides the original and use it to call Helm CLI (`--f` flag).",
+ "x-intellij-html-description": "key-value pairs. If present, Skaffold will build a Helm values
file that overrides the original and use it to call Helm CLI (--f
flag)."
+ },
+ "packaged": {
+ "$ref": "#/definitions/HelmPackaged",
+ "description": "parameters for packaging helm chart (`helm package`).",
+ "x-intellij-html-description": "parameters for packaging helm chart (helm package
)."
+ },
+ "recreatePods": {
+ "type": "boolean",
+ "description": "if `true`, Skaffold will send `--recreate-pods` flag to Helm CLI.",
+ "x-intellij-html-description": "if true
, Skaffold will send --recreate-pods
flag to Helm CLI.",
+ "default": "false"
+ },
+ "setValueTemplates": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "key-value pairs. If present, Skaffold will try to parse the value part of each key-value pair using environment variables in the system, then send `--set` flag to Helm CLI and append all parsed pairs after the flag.",
+ "x-intellij-html-description": "key-value pairs. If present, Skaffold will try to parse the value part of each key-value pair using environment variables in the system, then send --set
flag to Helm CLI and append all parsed pairs after the flag.",
+ "default": "{}"
+ },
+ "setValues": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "key-value pairs. If present, Skaffold will send `--set` flag to Helm CLI and append all pairs after the flag.",
+ "x-intellij-html-description": "key-value pairs. If present, Skaffold will send --set
flag to Helm CLI and append all pairs after the flag.",
+ "default": "{}"
+ },
+ "skipBuildDependencies": {
+ "type": "boolean",
+ "description": "should build dependencies be skipped.",
+ "x-intellij-html-description": "should build dependencies be skipped.",
+ "default": "false"
+ },
+ "useHelmSecrets": {
+ "type": "boolean",
+ "description": "instructs skaffold to use secrets plugin on deployment.",
+ "x-intellij-html-description": "instructs skaffold to use secrets plugin on deployment.",
+ "default": "false"
+ },
+ "values": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "key-value pairs supplementing the Helm `values` file.",
+ "x-intellij-html-description": "key-value pairs supplementing the Helm values
file.",
+ "default": "{}"
+ },
+ "valuesFiles": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "paths to the Helm `values` files.",
+ "x-intellij-html-description": "paths to the Helm values
files.",
+ "default": "[]"
+ },
+ "version": {
+ "type": "string",
+ "description": "version of the chart.",
+ "x-intellij-html-description": "version of the chart."
+ },
+ "wait": {
+ "type": "boolean",
+ "description": "if `true`, Skaffold will send `--wait` flag to Helm CLI.",
+ "x-intellij-html-description": "if true
, Skaffold will send --wait
flag to Helm CLI.",
+ "default": "false"
+ }
+ },
+ "preferredOrder": [
+ "name",
+ "chartPath",
+ "valuesFiles",
+ "values",
+ "namespace",
+ "version",
+ "setValues",
+ "setValueTemplates",
+ "wait",
+ "recreatePods",
+ "skipBuildDependencies",
+ "useHelmSecrets",
+ "overrides",
+ "packaged",
+ "imageStrategy"
+ ],
+ "additionalProperties": false,
+ "description": "describes a helm release to be deployed.",
+ "x-intellij-html-description": "describes a helm release to be deployed."
+ },
+ "JSONPatch": {
+ "required": [
+ "path"
+ ],
+ "properties": {
+ "from": {
+ "type": "string",
+ "description": "source position in the yaml, used for `copy` or `move` operations.",
+ "x-intellij-html-description": "source position in the yaml, used for copy
or move
operations."
+ },
+ "op": {
+ "type": "string",
+ "description": "operation carried by the patch: `add`, `remove`, `replace`, `move`, `copy` or `test`.",
+ "x-intellij-html-description": "operation carried by the patch: add
, remove
, replace
, move
, copy
or test
.",
+ "default": "replace"
+ },
+ "path": {
+ "type": "string",
+ "description": "position in the yaml where the operation takes place. For example, this targets the `dockerfile` of the first artifact built.",
+ "x-intellij-html-description": "position in the yaml where the operation takes place. For example, this targets the dockerfile
of the first artifact built.",
+ "examples": [
+ "/build/artifacts/0/docker/dockerfile"
+ ]
+ },
+ "value": {
+ "type": "object",
+ "description": "value to apply. Can be any portion of yaml.",
+ "x-intellij-html-description": "value to apply. Can be any portion of yaml."
+ }
+ },
+ "preferredOrder": [
+ "op",
+ "path",
+ "from",
+ "value"
+ ],
+ "additionalProperties": false,
+ "description": "patch to be applied by a profile.",
+ "x-intellij-html-description": "patch to be applied by a profile."
+ },
+ "JibGradleArtifact": {
+ "properties": {
+ "args": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "additional build flags passed to Gradle.",
+ "x-intellij-html-description": "additional build flags passed to Gradle.",
+ "default": "[]",
+ "examples": [
+ "[\"--no-build-cache\"]"
+ ]
+ },
+ "project": {
+ "type": "string",
+ "description": "selects which Gradle project to build.",
+ "x-intellij-html-description": "selects which Gradle project to build."
+ }
+ },
+ "preferredOrder": [
+ "project",
+ "args"
+ ],
+ "additionalProperties": false,
+ "description": "*alpha* builds images using the [Jib plugin for Gradle](https://github.com/GoogleContainerTools/jib/tree/master/jib-gradle-plugin).",
+ "x-intellij-html-description": "alpha builds images using the Jib plugin for Gradle."
+ },
+ "JibMavenArtifact": {
+ "properties": {
+ "args": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "additional build flags passed to Maven.",
+ "x-intellij-html-description": "additional build flags passed to Maven.",
+ "default": "[]",
+ "examples": [
+ "[\"-x\", \"-DskipTests\"]"
+ ]
+ },
+ "module": {
+ "type": "string",
+ "description": "selects which Maven module to build, for a multi module project.",
+ "x-intellij-html-description": "selects which Maven module to build, for a multi module project."
+ },
+ "profile": {
+ "type": "string",
+ "description": "selects which Maven profile to activate.",
+ "x-intellij-html-description": "selects which Maven profile to activate."
+ }
+ },
+ "preferredOrder": [
+ "module",
+ "profile",
+ "args"
+ ],
+ "additionalProperties": false,
+ "description": "*alpha* builds images using the [Jib plugin for Maven](https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin).",
+ "x-intellij-html-description": "alpha builds images using the Jib plugin for Maven."
+ },
+ "KanikoArtifact": {
+ "properties": {
+ "buildArgs": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "arguments passed to the docker build.",
+ "x-intellij-html-description": "arguments passed to the docker build.",
+ "default": "{}",
+ "examples": [
+ "{\"key1\": \"value1\", \"key2\": \"value2\"}"
+ ]
+ },
+ "buildContext": {
+ "$ref": "#/definitions/KanikoBuildContext",
+ "description": "where the build context for this artifact resides.",
+ "x-intellij-html-description": "where the build context for this artifact resides."
+ },
+ "cache": {
+ "$ref": "#/definitions/KanikoCache",
+ "description": "configures Kaniko caching. If a cache is specified, Kaniko will use a remote cache which will speed up builds.",
+ "x-intellij-html-description": "configures Kaniko caching. If a cache is specified, Kaniko will use a remote cache which will speed up builds."
+ },
+ "dockerfile": {
+ "type": "string",
+ "description": "locates the Dockerfile relative to workspace.",
+ "x-intellij-html-description": "locates the Dockerfile relative to workspace.",
+ "default": "Dockerfile"
+ },
+ "flags": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "additional flags to be passed to Kaniko command line. See [Kaniko Additional Flags](https://github.com/GoogleContainerTools/kaniko#additional-flags). Deprecated - instead the named, unique fields should be used, e.g. `buildArgs`, `cache`, `target`.",
+ "x-intellij-html-description": "additional flags to be passed to Kaniko command line. See Kaniko Additional Flags. Deprecated - instead the named, unique fields should be used, e.g. buildArgs
, cache
, target
.",
+ "default": "[]"
+ },
+ "image": {
+ "type": "string",
+ "description": "Docker image used by the Kaniko pod. Defaults to the latest released version of `gcr.io/kaniko-project/executor`.",
+ "x-intellij-html-description": "Docker image used by the Kaniko pod. Defaults to the latest released version of gcr.io/kaniko-project/executor
."
+ },
+ "target": {
+ "type": "string",
+ "description": "Dockerfile target name to build.",
+ "x-intellij-html-description": "Dockerfile target name to build."
+ }
+ },
+ "preferredOrder": [
+ "flags",
+ "dockerfile",
+ "target",
+ "buildArgs",
+ "buildContext",
+ "image",
+ "cache"
+ ],
+ "additionalProperties": false,
+ "description": "*alpha* describes an artifact built from a Dockerfile, with kaniko.",
+ "x-intellij-html-description": "alpha describes an artifact built from a Dockerfile, with kaniko."
+ },
+ "KanikoBuildContext": {
+ "properties": {
+ "gcsBucket": {
+ "type": "string",
+ "description": "CGS bucket to which sources are uploaded. Kaniko will need access to that bucket to download the sources.",
+ "x-intellij-html-description": "CGS bucket to which sources are uploaded. Kaniko will need access to that bucket to download the sources."
+ },
+ "localDir": {
+ "$ref": "#/definitions/LocalDir",
+ "description": "configures how Kaniko mounts sources directly via an `emptyDir` volume.",
+ "x-intellij-html-description": "configures how Kaniko mounts sources directly via an emptyDir
volume."
+ }
+ },
+ "preferredOrder": [
+ "gcsBucket",
+ "localDir"
+ ],
+ "additionalProperties": false,
+ "description": "contains the different fields available to specify a Kaniko build context.",
+ "x-intellij-html-description": "contains the different fields available to specify a Kaniko build context."
+ },
+ "KanikoCache": {
+ "properties": {
+ "repo": {
+ "type": "string",
+ "description": "a remote repository to store cached layers. If none is specified, one will be inferred from the image name. See [Kaniko Caching](https://github.com/GoogleContainerTools/kaniko#caching).",
+ "x-intellij-html-description": "a remote repository to store cached layers. If none is specified, one will be inferred from the image name. See Kaniko Caching."
+ }
+ },
+ "preferredOrder": [
+ "repo"
+ ],
+ "additionalProperties": false,
+ "description": "configures Kaniko caching. If a cache is specified, Kaniko will use a remote cache which will speed up builds.",
+ "x-intellij-html-description": "configures Kaniko caching. If a cache is specified, Kaniko will use a remote cache which will speed up builds."
+ },
+ "KubectlDeploy": {
+ "properties": {
+ "flags": {
+ "$ref": "#/definitions/KubectlFlags",
+ "description": "additional flags passed to `kubectl`.",
+ "x-intellij-html-description": "additional flags passed to kubectl
."
+ },
+ "manifests": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "the Kubernetes yaml or json manifests.",
+ "x-intellij-html-description": "the Kubernetes yaml or json manifests.",
+ "default": "[\"k8s/*.yaml\"]"
+ },
+ "remoteManifests": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "Kubernetes manifests in remote clusters.",
+ "x-intellij-html-description": "Kubernetes manifests in remote clusters.",
+ "default": "[]"
+ }
+ },
+ "preferredOrder": [
+ "manifests",
+ "remoteManifests",
+ "flags"
+ ],
+ "additionalProperties": false,
+ "description": "*beta* uses a client side `kubectl apply` to deploy manifests. You'll need a `kubectl` CLI version installed that's compatible with your cluster.",
+ "x-intellij-html-description": "beta uses a client side kubectl apply
to deploy manifests. You'll need a kubectl
CLI version installed that's compatible with your cluster."
+ },
+ "KubectlFlags": {
+ "properties": {
+ "apply": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "additional flags passed on creations (`kubectl apply`).",
+ "x-intellij-html-description": "additional flags passed on creations (kubectl apply
).",
+ "default": "[]"
+ },
+ "delete": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "additional flags passed on deletions (`kubectl delete`).",
+ "x-intellij-html-description": "additional flags passed on deletions (kubectl delete
).",
+ "default": "[]"
+ },
+ "global": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "additional flags passed on every command.",
+ "x-intellij-html-description": "additional flags passed on every command.",
+ "default": "[]"
+ }
+ },
+ "preferredOrder": [
+ "global",
+ "apply",
+ "delete"
+ ],
+ "additionalProperties": false,
+ "description": "additional flags passed on the command line to kubectl either on every command (Global), on creations (Apply) or deletions (Delete).",
+ "x-intellij-html-description": "additional flags passed on the command line to kubectl either on every command (Global), on creations (Apply) or deletions (Delete)."
+ },
+ "KustomizeDeploy": {
+ "properties": {
+ "flags": {
+ "$ref": "#/definitions/KubectlFlags",
+ "description": "additional flags passed to `kubectl`.",
+ "x-intellij-html-description": "additional flags passed to kubectl
."
+ },
+ "path": {
+ "type": "string",
+ "description": "path to Kustomization files.",
+ "x-intellij-html-description": "path to Kustomization files.",
+ "default": "."
+ }
+ },
+ "preferredOrder": [
+ "path",
+ "flags"
+ ],
+ "additionalProperties": false,
+ "description": "*beta* uses the `kustomize` CLI to \"patch\" a deployment for a target environment.",
+ "x-intellij-html-description": "beta uses the kustomize
CLI to "patch" a deployment for a target environment."
+ },
+ "LocalBuild": {
+ "properties": {
+ "push": {
+ "type": "boolean",
+ "description": "should images be pushed to a registry. If not specified, images are pushed only if the current Kubernetes context connects to a remote cluster.",
+ "x-intellij-html-description": "should images be pushed to a registry. If not specified, images are pushed only if the current Kubernetes context connects to a remote cluster."
+ },
+ "useBuildkit": {
+ "type": "boolean",
+ "description": "use BuildKit to build Docker images.",
+ "x-intellij-html-description": "use BuildKit to build Docker images.",
+ "default": "false"
+ },
+ "useDockerCLI": {
+ "type": "boolean",
+ "description": "use `docker` command-line interface instead of Docker Engine APIs.",
+ "x-intellij-html-description": "use docker
command-line interface instead of Docker Engine APIs.",
+ "default": "false"
+ }
+ },
+ "preferredOrder": [
+ "push",
+ "useDockerCLI",
+ "useBuildkit"
+ ],
+ "additionalProperties": false,
+ "description": "*beta* describes how to do a build on the local docker daemon and optionally push to a repository.",
+ "x-intellij-html-description": "beta describes how to do a build on the local docker daemon and optionally push to a repository."
+ },
+ "LocalDir": {
+ "properties": {
+ "initImage": {
+ "type": "string",
+ "description": "image used to run init container which mounts kaniko context.",
+ "x-intellij-html-description": "image used to run init container which mounts kaniko context."
+ }
+ },
+ "preferredOrder": [
+ "initImage"
+ ],
+ "additionalProperties": false,
+ "description": "configures how Kaniko mounts sources directly via an `emptyDir` volume.",
+ "x-intellij-html-description": "configures how Kaniko mounts sources directly via an emptyDir
volume."
+ },
+ "Profile": {
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "activation": {
+ "items": {
+ "$ref": "#/definitions/Activation"
+ },
+ "type": "array",
+ "description": "criteria by which a profile can be auto-activated. The profile is auto-activated if any one of the activations are triggered. An activation is triggered if all of the criteria (env, kubeContext, command) are triggered.",
+ "x-intellij-html-description": "criteria by which a profile can be auto-activated. The profile is auto-activated if any one of the activations are triggered. An activation is triggered if all of the criteria (env, kubeContext, command) are triggered."
+ },
+ "build": {
+ "$ref": "#/definitions/BuildConfig",
+ "description": "describes how images are built.",
+ "x-intellij-html-description": "describes how images are built."
+ },
+ "deploy": {
+ "$ref": "#/definitions/DeployConfig",
+ "description": "describes how images are deployed.",
+ "x-intellij-html-description": "describes how images are deployed."
+ },
+ "name": {
+ "type": "string",
+ "description": "a unique profile name.",
+ "x-intellij-html-description": "a unique profile name.",
+ "examples": [
+ "profile-prod"
+ ]
+ },
+ "patches": {
+ "items": {
+ "$ref": "#/definitions/JSONPatch"
+ },
+ "type": "array",
+ "description": "patches applied to the configuration. Patches use the JSON patch notation.",
+ "x-intellij-html-description": "patches applied to the configuration. Patches use the JSON patch notation."
+ },
+ "test": {
+ "items": {
+ "$ref": "#/definitions/TestCase"
+ },
+ "type": "array",
+ "description": "describes how images are tested.",
+ "x-intellij-html-description": "describes how images are tested."
+ }
+ },
+ "preferredOrder": [
+ "name",
+ "patches",
+ "activation",
+ "build",
+ "test",
+ "deploy"
+ ],
+ "additionalProperties": false,
+ "description": "*beta* profiles are used to override any `build`, `test` or `deploy` configuration.",
+ "x-intellij-html-description": "beta profiles are used to override any build
, test
or deploy
configuration."
+ },
+ "ResourceRequirement": {
+ "properties": {
+ "cpu": {
+ "type": "string",
+ "description": "the number cores to be used.",
+ "x-intellij-html-description": "the number cores to be used.",
+ "examples": [
+ "2`, `2.0` or `200m"
+ ]
+ },
+ "memory": {
+ "type": "string",
+ "description": "the amount of memory to allocate to the pod.",
+ "x-intellij-html-description": "the amount of memory to allocate to the pod.",
+ "examples": [
+ "1Gi` or `1000Mi"
+ ]
+ }
+ },
+ "preferredOrder": [
+ "cpu",
+ "memory"
+ ],
+ "additionalProperties": false,
+ "description": "stores the CPU/Memory requirements for the pod.",
+ "x-intellij-html-description": "stores the CPU/Memory requirements for the pod."
+ },
+ "ResourceRequirements": {
+ "properties": {
+ "limits": {
+ "$ref": "#/definitions/ResourceRequirement",
+ "description": "[resource limits](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container) for the Kaniko pod.",
+ "x-intellij-html-description": "resource limits for the Kaniko pod."
+ },
+ "requests": {
+ "$ref": "#/definitions/ResourceRequirement",
+ "description": "[resource requests](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container) for the Kaniko pod.",
+ "x-intellij-html-description": "resource requests for the Kaniko pod."
+ }
+ },
+ "preferredOrder": [
+ "requests",
+ "limits"
+ ],
+ "additionalProperties": false,
+ "description": "describes the resource requirements for the kaniko pod.",
+ "x-intellij-html-description": "describes the resource requirements for the kaniko pod."
+ },
+ "ShaTagger": {
+ "description": "*beta* tags images with their sha256 digest.",
+ "x-intellij-html-description": "beta tags images with their sha256 digest."
+ },
+ "SkaffoldConfig": {
+ "required": [
+ "apiVersion",
+ "kind"
+ ],
+ "properties": {
+ "apiVersion": {
+ "type": "string",
+ "description": "version of the configuration.",
+ "x-intellij-html-description": "version of the configuration."
+ },
+ "build": {
+ "$ref": "#/definitions/BuildConfig",
+ "description": "describes how images are built.",
+ "x-intellij-html-description": "describes how images are built."
+ },
+ "deploy": {
+ "$ref": "#/definitions/DeployConfig",
+ "description": "describes how images are deployed.",
+ "x-intellij-html-description": "describes how images are deployed."
+ },
+ "kind": {
+ "type": "string",
+ "description": "always `Config`.",
+ "x-intellij-html-description": "always Config
.",
+ "default": "Config"
+ },
+ "profiles": {
+ "items": {
+ "$ref": "#/definitions/Profile"
+ },
+ "type": "array",
+ "description": "*beta* can override be used to `build`, `test` or `deploy` configuration.",
+ "x-intellij-html-description": "beta can override be used to build
, test
or deploy
configuration."
+ },
+ "test": {
+ "items": {
+ "$ref": "#/definitions/TestCase"
+ },
+ "type": "array",
+ "description": "describes how images are tested.",
+ "x-intellij-html-description": "describes how images are tested."
+ }
+ },
+ "preferredOrder": [
+ "apiVersion",
+ "kind",
+ "profiles",
+ "build",
+ "test",
+ "deploy"
+ ],
+ "additionalProperties": false,
+ "description": "holds the fields parsed from the Skaffold configuration file (skaffold.yaml).",
+ "x-intellij-html-description": "holds the fields parsed from the Skaffold configuration file (skaffold.yaml)."
+ },
+ "TagPolicy": {
+ "properties": {
+ "dateTime": {
+ "$ref": "#/definitions/DateTimeTagger",
+ "description": "*beta* tags images with the build timestamp.",
+ "x-intellij-html-description": "beta tags images with the build timestamp."
+ },
+ "envTemplate": {
+ "$ref": "#/definitions/EnvTemplateTagger",
+ "description": "*beta* tags images with a configurable template string.",
+ "x-intellij-html-description": "beta tags images with a configurable template string."
+ },
+ "gitCommit": {
+ "$ref": "#/definitions/GitTagger",
+ "description": "*beta* tags images with the git tag or commit of the artifact's workspace.",
+ "x-intellij-html-description": "beta tags images with the git tag or commit of the artifact's workspace."
+ },
+ "sha256": {
+ "$ref": "#/definitions/ShaTagger",
+ "description": "*beta* tags images with their sha256 digest.",
+ "x-intellij-html-description": "beta tags images with their sha256 digest."
+ }
+ },
+ "preferredOrder": [
+ "gitCommit",
+ "sha256",
+ "envTemplate",
+ "dateTime"
+ ],
+ "additionalProperties": false,
+ "description": "contains all the configuration for the tagging step.",
+ "x-intellij-html-description": "contains all the configuration for the tagging step."
+ },
+ "TestCase": {
+ "required": [
+ "image"
+ ],
+ "properties": {
+ "image": {
+ "type": "string",
+ "description": "artifact on which to run those tests.",
+ "x-intellij-html-description": "artifact on which to run those tests.",
+ "examples": [
+ "gcr.io/k8s-skaffold/example"
+ ]
+ },
+ "structureTests": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "the [Container Structure Tests](https://github.com/GoogleContainerTools/container-structure-test) to run on that artifact.",
+ "x-intellij-html-description": "the Container Structure Tests to run on that artifact.",
+ "default": "[]",
+ "examples": [
+ "[\"./test/*\"]"
+ ]
+ }
+ },
+ "preferredOrder": [
+ "image",
+ "structureTests"
+ ],
+ "additionalProperties": false,
+ "description": "a list of structure tests to run on images that Skaffold builds.",
+ "x-intellij-html-description": "a list of structure tests to run on images that Skaffold builds."
+ }
+ }
+}
diff --git a/integration/examples/bazel/skaffold.yaml b/integration/examples/bazel/skaffold.yaml
index 44410f0ffc4..31aacc5d583 100644
--- a/integration/examples/bazel/skaffold.yaml
+++ b/integration/examples/bazel/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/examples/getting-started/skaffold.yaml b/integration/examples/getting-started/skaffold.yaml
index e6a558d10e2..4ba1741eae5 100644
--- a/integration/examples/getting-started/skaffold.yaml
+++ b/integration/examples/getting-started/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/examples/helm-deployment/skaffold.yaml b/integration/examples/helm-deployment/skaffold.yaml
index 5ffd5cb960d..2ec83f1a6bb 100644
--- a/integration/examples/helm-deployment/skaffold.yaml
+++ b/integration/examples/helm-deployment/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
tagPolicy:
diff --git a/integration/examples/hot-reload/skaffold.yaml b/integration/examples/hot-reload/skaffold.yaml
index 3da59d5c0a2..87b0d0ff420 100644
--- a/integration/examples/hot-reload/skaffold.yaml
+++ b/integration/examples/hot-reload/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/examples/jib-multimodule/skaffold.yaml b/integration/examples/jib-multimodule/skaffold.yaml
index a39f942807f..6067b71be16 100644
--- a/integration/examples/jib-multimodule/skaffold.yaml
+++ b/integration/examples/jib-multimodule/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/examples/jib/skaffold.yaml b/integration/examples/jib/skaffold.yaml
index fda680765e8..b362c9bf3dc 100644
--- a/integration/examples/jib/skaffold.yaml
+++ b/integration/examples/jib/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/examples/kaniko-local/skaffold.yaml b/integration/examples/kaniko-local/skaffold.yaml
index 84a8ff98708..8ba0e0dd9f0 100644
--- a/integration/examples/kaniko-local/skaffold.yaml
+++ b/integration/examples/kaniko-local/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/examples/kaniko/skaffold.yaml b/integration/examples/kaniko/skaffold.yaml
index 4d9193bac2d..56a150f65ac 100644
--- a/integration/examples/kaniko/skaffold.yaml
+++ b/integration/examples/kaniko/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/examples/kustomize/skaffold.yaml b/integration/examples/kustomize/skaffold.yaml
index f2c45db7bf6..cf0538f419b 100644
--- a/integration/examples/kustomize/skaffold.yaml
+++ b/integration/examples/kustomize/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
deploy:
kustomize: {}
diff --git a/integration/examples/microservices/skaffold.yaml b/integration/examples/microservices/skaffold.yaml
index bc739cec6e8..6c8072da52c 100644
--- a/integration/examples/microservices/skaffold.yaml
+++ b/integration/examples/microservices/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/examples/nodejs/skaffold.yaml b/integration/examples/nodejs/skaffold.yaml
index 99a17afd1aa..775797721ef 100644
--- a/integration/examples/nodejs/skaffold.yaml
+++ b/integration/examples/nodejs/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/examples/react-reload/skaffold.yaml b/integration/examples/react-reload/skaffold.yaml
index 7253966b9a7..f44b5685d56 100644
--- a/integration/examples/react-reload/skaffold.yaml
+++ b/integration/examples/react-reload/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/examples/structure-tests/skaffold.yaml b/integration/examples/structure-tests/skaffold.yaml
index 072afe107fb..93e01ed7a38 100644
--- a/integration/examples/structure-tests/skaffold.yaml
+++ b/integration/examples/structure-tests/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/examples/tagging-with-environment-variables/skaffold.yaml b/integration/examples/tagging-with-environment-variables/skaffold.yaml
index 77f01bb8c89..70073d970b1 100644
--- a/integration/examples/tagging-with-environment-variables/skaffold.yaml
+++ b/integration/examples/tagging-with-environment-variables/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/testdata/build/skaffold.yaml b/integration/testdata/build/skaffold.yaml
index 40c4f3fda01..7a25db9d16b 100644
--- a/integration/testdata/build/skaffold.yaml
+++ b/integration/testdata/build/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
local:
diff --git a/integration/testdata/dev/skaffold.yaml b/integration/testdata/dev/skaffold.yaml
index d63d5a3bf62..04be81ac93f 100644
--- a/integration/testdata/dev/skaffold.yaml
+++ b/integration/testdata/dev/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/testdata/file-sync/skaffold.yaml b/integration/testdata/file-sync/skaffold.yaml
index 96aa9e3b020..481a6b947fe 100644
--- a/integration/testdata/file-sync/skaffold.yaml
+++ b/integration/testdata/file-sync/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
tagPolicy:
diff --git a/integration/testdata/jib/skaffold.yaml b/integration/testdata/jib/skaffold.yaml
index 708a026ac9c..66d8296cbe2 100644
--- a/integration/testdata/jib/skaffold.yaml
+++ b/integration/testdata/jib/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/testdata/kaniko-microservices/skaffold.yaml b/integration/testdata/kaniko-microservices/skaffold.yaml
index 5e41786aa78..9c8e49da650 100644
--- a/integration/testdata/kaniko-microservices/skaffold.yaml
+++ b/integration/testdata/kaniko-microservices/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/testdata/kaniko-sub-folder/skaffold.yaml b/integration/testdata/kaniko-sub-folder/skaffold.yaml
index c82a1dbca6b..dc3a8265edd 100644
--- a/integration/testdata/kaniko-sub-folder/skaffold.yaml
+++ b/integration/testdata/kaniko-sub-folder/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/testdata/plugin/gcb/skaffold.yaml b/integration/testdata/plugin/gcb/skaffold.yaml
index 5a77fd0f87a..ac791ac3d51 100644
--- a/integration/testdata/plugin/gcb/skaffold.yaml
+++ b/integration/testdata/plugin/gcb/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/testdata/plugin/local/bazel/skaffold.yaml b/integration/testdata/plugin/local/bazel/skaffold.yaml
index 6b7ddda71d9..4619dfd41f2 100644
--- a/integration/testdata/plugin/local/bazel/skaffold.yaml
+++ b/integration/testdata/plugin/local/bazel/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/testdata/plugin/local/docker/skaffold.yaml b/integration/testdata/plugin/local/docker/skaffold.yaml
index 65bc1579992..fd636f64bd2 100644
--- a/integration/testdata/plugin/local/docker/skaffold.yaml
+++ b/integration/testdata/plugin/local/docker/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/integration/testdata/tagPolicy/skaffold.yaml b/integration/testdata/tagPolicy/skaffold.yaml
index 3aaf66570c1..f09d7aabc9a 100644
--- a/integration/testdata/tagPolicy/skaffold.yaml
+++ b/integration/testdata/tagPolicy/skaffold.yaml
@@ -1,4 +1,4 @@
-apiVersion: skaffold/v1beta8
+apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
diff --git a/pkg/skaffold/schema/latest/config.go b/pkg/skaffold/schema/latest/config.go
index 6e64fe87502..10e481f40ab 100644
--- a/pkg/skaffold/schema/latest/config.go
+++ b/pkg/skaffold/schema/latest/config.go
@@ -21,7 +21,7 @@ import (
yamlpatch "github.com/krishicks/yaml-patch"
)
-const Version string = "skaffold/v1beta8"
+const Version string = "skaffold/v1beta9"
// NewSkaffoldConfig creates a SkaffoldConfig
func NewSkaffoldConfig() util.VersionedConfig {
diff --git a/pkg/skaffold/schema/v1beta7/upgrade.go b/pkg/skaffold/schema/v1beta7/upgrade.go
index 3d16c21c33f..e27e43dd911 100644
--- a/pkg/skaffold/schema/v1beta7/upgrade.go
+++ b/pkg/skaffold/schema/v1beta7/upgrade.go
@@ -17,8 +17,8 @@ limitations under the License.
package v1beta7
import (
- next "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/util"
+ next "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/v1beta8"
pkgutil "github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
"github.com/pkg/errors"
)
diff --git a/pkg/skaffold/schema/v1beta7/upgrade_test.go b/pkg/skaffold/schema/v1beta7/upgrade_test.go
index 3e240b84859..800fd7594a4 100644
--- a/pkg/skaffold/schema/v1beta7/upgrade_test.go
+++ b/pkg/skaffold/schema/v1beta7/upgrade_test.go
@@ -19,7 +19,7 @@ package v1beta7
import (
"testing"
- "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
+ next "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/v1beta8"
"github.com/GoogleContainerTools/skaffold/testutil"
yaml "gopkg.in/yaml.v2"
)
@@ -104,7 +104,7 @@ func verifyUpgrade(t *testing.T, input, output string) {
upgraded, err := pipeline.Upgrade()
testutil.CheckError(t, false, err)
- expected := latest.NewSkaffoldConfig()
+ expected := next.NewSkaffoldConfig()
err = yaml.UnmarshalStrict([]byte(output), expected)
testutil.CheckErrorAndDeepEqual(t, false, err, expected, upgraded)
diff --git a/pkg/skaffold/schema/v1beta8/config.go b/pkg/skaffold/schema/v1beta8/config.go
new file mode 100644
index 00000000000..59d916f5672
--- /dev/null
+++ b/pkg/skaffold/schema/v1beta8/config.go
@@ -0,0 +1,666 @@
+/*
+Copyright 2019 The Skaffold Authors
+
+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 v1beta8
+
+import (
+ "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/util"
+ yamlpatch "github.com/krishicks/yaml-patch"
+)
+
+const Version string = "skaffold/v1beta8"
+
+// NewSkaffoldConfig creates a SkaffoldConfig
+func NewSkaffoldConfig() util.VersionedConfig {
+ return new(SkaffoldConfig)
+}
+
+// SkaffoldConfig holds the fields parsed from the Skaffold configuration file (skaffold.yaml).
+type SkaffoldConfig struct {
+ // APIVersion is the version of the configuration.
+ APIVersion string `yaml:"apiVersion" yamltags:"required"`
+
+ // Kind is always `Config`. Defaults to `Config`.
+ Kind string `yaml:"kind" yamltags:"required"`
+
+ // Pipeline defines the Build/Test/Deploy phases.
+ Pipeline `yaml:",inline"`
+
+ // Profiles *beta* can override be used to `build`, `test` or `deploy` configuration.
+ Profiles []Profile `yaml:"profiles,omitempty"`
+}
+
+// Pipeline describes a Skaffold pipeline.
+type Pipeline struct {
+ // Build describes how images are built.
+ Build BuildConfig `yaml:"build,omitempty"`
+
+ // Test describes how images are tested.
+ Test []*TestCase `yaml:"test,omitempty"`
+
+ // Deploy describes how images are deployed.
+ Deploy DeployConfig `yaml:"deploy,omitempty"`
+}
+
+func (c *SkaffoldConfig) GetVersion() string {
+ return c.APIVersion
+}
+
+// BuildConfig contains all the configuration for the build steps.
+type BuildConfig struct {
+ // Artifacts lists the images you're going to be building.
+ Artifacts []*Artifact `yaml:"artifacts,omitempty"`
+
+ // InsecureRegistries is a list of registries declared by the user to be insecure.
+ // These registries will be connected to via HTTP instead of HTTPS.
+ InsecureRegistries []string `yaml:"insecureRegistries,omitempty"`
+
+ // TagPolicy *beta* determines how images are tagged.
+ // A few strategies are provided here, although you most likely won't need to care!
+ // If not specified, it defaults to `gitCommit: {}`.
+ TagPolicy TagPolicy `yaml:"tagPolicy,omitempty"`
+
+ // ExecutionEnvironment is the environment in which the build
+ // should run. Possible values: googleCloudBuild.
+ ExecutionEnvironment *ExecutionEnvironment `yaml:"executionEnvironment,omitempty"`
+
+ BuildType `yaml:",inline"`
+}
+
+// ExecEnvironment is the name of an execution environment.
+type ExecEnvironment string
+
+// ExecutionEnvironment is the environment in which the build should run (ex. local or in-cluster, etc.).
+type ExecutionEnvironment struct {
+ // Name is the name of the environment.
+ Name ExecEnvironment `yaml:"name,omitempty"`
+
+ // Properties are key-value pairs passed to the environment.
+ Properties map[string]interface{} `yaml:"properties,omitempty"`
+}
+
+// BuilderPlugin contains all fields necessary for specifying a build plugin.
+type BuilderPlugin struct {
+ // Name is the name of the build plugin.
+ Name string `yaml:"name,omitempty"`
+
+ // Properties are key-value pairs passed to the plugin.
+ Properties map[string]interface{} `yaml:"properties,omitempty"`
+
+ // Contents
+ Contents []byte `yaml:",omitempty"`
+}
+
+// TagPolicy contains all the configuration for the tagging step.
+type TagPolicy struct {
+ // GitTagger *beta* tags images with the git tag or commit of the artifact's workspace.
+ GitTagger *GitTagger `yaml:"gitCommit,omitempty" yamltags:"oneOf=tag"`
+
+ // ShaTagger *beta* tags images with their sha256 digest.
+ ShaTagger *ShaTagger `yaml:"sha256,omitempty" yamltags:"oneOf=tag"`
+
+ // EnvTemplateTagger *beta* tags images with a configurable template string.
+ EnvTemplateTagger *EnvTemplateTagger `yaml:"envTemplate,omitempty" yamltags:"oneOf=tag"`
+
+ // DateTimeTagger *beta* tags images with the build timestamp.
+ DateTimeTagger *DateTimeTagger `yaml:"dateTime,omitempty" yamltags:"oneOf=tag"`
+}
+
+// ShaTagger *beta* tags images with their sha256 digest.
+type ShaTagger struct{}
+
+// GitTagger *beta* tags images with the git tag or commit of the artifact's workspace.
+type GitTagger struct{}
+
+// EnvTemplateTagger *beta* tags images with a configurable template string.
+type EnvTemplateTagger struct {
+ // Template used to produce the image name and tag.
+ // See golang [text/template](https://golang.org/pkg/text/template/).
+ // The template is executed against the current environment,
+ // with those variables injected:
+ // IMAGE_NAME | Name of the image being built, as supplied in the artifacts section.
+ // For example: `{{.RELEASE}}-{{.IMAGE_NAME}}`.
+ Template string `yaml:"template,omitempty" yamltags:"required"`
+}
+
+// DateTimeTagger *beta* tags images with the build timestamp.
+type DateTimeTagger struct {
+ // Format formats the date and time.
+ // See [#Time.Format](https://golang.org/pkg/time/#Time.Format).
+ // Defaults to `2006-01-02_15-04-05.999_MST`.
+ Format string `yaml:"format,omitempty"`
+
+ // TimeZone sets the timezone for the date and time.
+ // See [Time.LoadLocation](https://golang.org/pkg/time/#Time.LoadLocation).
+ // Defaults to the local timezone.
+ TimeZone string `yaml:"timezone,omitempty"`
+}
+
+// BuildType contains the specific implementation and parameters needed
+// for the build step. Only one field should be populated.
+type BuildType struct {
+ // LocalBuild *beta* describes how to do a build on the local docker daemon
+ // and optionally push to a repository.
+ LocalBuild *LocalBuild `yaml:"local,omitempty" yamltags:"oneOf=build"`
+
+ // GoogleCloudBuild *beta* describes how to do a remote build on
+ // [Google Cloud Build](https://cloud.google.com/cloud-build/).
+ GoogleCloudBuild *GoogleCloudBuild `yaml:"googleCloudBuild,omitempty" yamltags:"oneOf=build"`
+
+ // Cluster *beta* describes how to do an on-cluster build.
+ Cluster *ClusterDetails `yaml:"cluster,omitempty" yamltags:"oneOf=build"`
+}
+
+// LocalBuild *beta* describes how to do a build on the local docker daemon
+// and optionally push to a repository.
+type LocalBuild struct {
+ // Push should images be pushed to a registry.
+ // If not specified, images are pushed only if the current Kubernetes context
+ // connects to a remote cluster.
+ Push *bool `yaml:"push,omitempty"`
+
+ // UseDockerCLI use `docker` command-line interface instead of Docker Engine APIs.
+ UseDockerCLI bool `yaml:"useDockerCLI,omitempty"`
+
+ // UseBuildkit use BuildKit to build Docker images.
+ UseBuildkit bool `yaml:"useBuildkit,omitempty"`
+}
+
+// GoogleCloudBuild *beta* describes how to do a remote build on
+// [Google Cloud Build](https://cloud.google.com/cloud-build/docs/).
+// Docker and Jib artifacts can be built on Cloud Build. The `projectId` needs
+// to be provided and the currently logged in user should be given permissions to trigger
+// new builds.
+type GoogleCloudBuild struct {
+ // ProjectID is the ID of your Cloud Platform Project.
+ // If it is not provided, Skaffold will guess it from the image name.
+ // For example, given the artifact image name `gcr.io/myproject/image`, Skaffold
+ // will use the `myproject` GCP project.
+ ProjectID string `yaml:"projectId,omitempty"`
+
+ // DiskSizeGb is the disk size of the VM that runs the build.
+ // See [Cloud Build Reference](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions).
+ DiskSizeGb int64 `yaml:"diskSizeGb,omitempty"`
+
+ // MachineType is the type of the VM that runs the build.
+ // See [Cloud Build Reference](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions).
+ MachineType string `yaml:"machineType,omitempty"`
+
+ // Timeout is the amount of time (in seconds) that this build should be allowed to run.
+ // See [Cloud Build Reference](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#resource-build).
+ Timeout string `yaml:"timeout,omitempty"`
+
+ // DockerImage is the image that runs a Docker build.
+ // See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders).
+ // Defaults to `gcr.io/cloud-builders/docker`.
+ DockerImage string `yaml:"dockerImage,omitempty"`
+
+ // MavenImage is the image that runs a Maven build.
+ // See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders).
+ // Defaults to `gcr.io/cloud-builders/mvn`.
+ MavenImage string `yaml:"mavenImage,omitempty"`
+
+ // GradleImage is the image that runs a Gradle build.
+ // See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders).
+ // Defaults to `gcr.io/cloud-builders/gradle`.
+ GradleImage string `yaml:"gradleImage,omitempty"`
+}
+
+// LocalDir configures how Kaniko mounts sources directly via an `emptyDir` volume.
+type LocalDir struct {
+ // InitImage is the image used to run init container which mounts kaniko context.
+ InitImage string `yaml:"initImage,omitempty"`
+}
+
+// KanikoBuildContext contains the different fields available to specify
+// a Kaniko build context.
+type KanikoBuildContext struct {
+ // GCSBucket is the CGS bucket to which sources are uploaded.
+ // Kaniko will need access to that bucket to download the sources.
+ GCSBucket string `yaml:"gcsBucket,omitempty" yamltags:"oneOf=buildContext"`
+
+ // LocalDir configures how Kaniko mounts sources directly via an `emptyDir` volume.
+ LocalDir *LocalDir `yaml:"localDir,omitempty" yamltags:"oneOf=buildContext"`
+}
+
+// KanikoCache configures Kaniko caching. If a cache is specified, Kaniko will
+// use a remote cache which will speed up builds.
+type KanikoCache struct {
+ // Repo is a remote repository to store cached layers. If none is specified, one will be
+ // inferred from the image name. See [Kaniko Caching](https://github.com/GoogleContainerTools/kaniko#caching).
+ Repo string `yaml:"repo,omitempty"`
+}
+
+// ClusterDetails *beta* describes how to do an on-cluster build.
+type ClusterDetails struct {
+ // PullSecret is the path to the secret key file.
+ PullSecret string `yaml:"pullSecret,omitempty"`
+
+ // PullSecretName is the name of the Kubernetes secret for pulling the files
+ // from the build context and pushing the final image.
+ // Defaults to `kaniko-secret`.
+ PullSecretName string `yaml:"pullSecretName,omitempty"`
+
+ // Namespace is the Kubernetes namespace.
+ // Defaults to current namespace in Kubernetes configuration.
+ Namespace string `yaml:"namespace,omitempty"`
+
+ // Timeout is the amount of time (in seconds) that this build is allowed to run.
+ // Defaults to 20 minutes (`20m`).
+ Timeout string `yaml:"timeout,omitempty"`
+
+ // DockerConfig describes how to mount the local Docker configuration into a pod.
+ DockerConfig *DockerConfig `yaml:"dockerConfig,omitempty"`
+
+ // Resources define the resource requirements for the kaniko pod.
+ Resources *ResourceRequirements `yaml:"resources,omitempty"`
+}
+
+// DockerConfig contains information about the docker `config.json` to mount.
+type DockerConfig struct {
+ // Path is the path to the docker `config.json`.
+ Path string `yaml:"path,omitempty"`
+
+ // SecretName is the Kubernetes secret that will hold the Docker configuration.
+ SecretName string `yaml:"secretName,omitempty"`
+}
+
+// ResourceRequirements describes the resource requirements for the kaniko pod.
+type ResourceRequirements struct {
+ // 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.
+ Requests *ResourceRequirement `yaml:"requests,omitempty"`
+
+ // 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.
+ Limits *ResourceRequirement `yaml:"limits,omitempty"`
+}
+
+// ResourceRequirement stores the CPU/Memory requirements for the pod.
+type ResourceRequirement struct {
+ // CPU the number cores to be used.
+ // For example: `2`, `2.0` or `200m`.
+ CPU string `yaml:"cpu,omitempty"`
+
+ // Memory the amount of memory to allocate to the pod.
+ // For example: `1Gi` or `1000Mi`.
+ Memory string `yaml:"memory,omitempty"`
+}
+
+// TestCase is a list of structure tests to run on images that Skaffold builds.
+type TestCase struct {
+ // ImageName is the artifact on which to run those tests.
+ // For example: `gcr.io/k8s-skaffold/example`.
+ ImageName string `yaml:"image" yamltags:"required"`
+
+ // StructureTests lists the [Container Structure Tests](https://github.com/GoogleContainerTools/container-structure-test)
+ // to run on that artifact.
+ // For example: `["./test/*"]`.
+ StructureTests []string `yaml:"structureTests,omitempty"`
+}
+
+// DeployConfig contains all the configuration needed by the deploy steps.
+type DeployConfig struct {
+ DeployType `yaml:",inline"`
+}
+
+// DeployType contains the specific implementation and parameters needed
+// for the deploy step. Only one field should be populated.
+type DeployType struct {
+ // HelmDeploy *beta* uses the `helm` CLI to apply the charts to the cluster.
+ HelmDeploy *HelmDeploy `yaml:"helm,omitempty" yamltags:"oneOf=deploy"`
+
+ // KubectlDeploy *beta* uses a client side `kubectl apply` to deploy manifests.
+ // You'll need a `kubectl` CLI version installed that's compatible with your cluster.
+ KubectlDeploy *KubectlDeploy `yaml:"kubectl,omitempty" yamltags:"oneOf=deploy"`
+
+ // KustomizeDeploy *beta* uses the `kustomize` CLI to "patch" a deployment for a target environment.
+ KustomizeDeploy *KustomizeDeploy `yaml:"kustomize,omitempty" yamltags:"oneOf=deploy"`
+}
+
+// KubectlDeploy *beta* uses a client side `kubectl apply` to deploy manifests.
+// You'll need a `kubectl` CLI version installed that's compatible with your cluster.
+type KubectlDeploy struct {
+ // Manifests lists the Kubernetes yaml or json manifests.
+ // Defaults to `["k8s/*.yaml"]`.
+ Manifests []string `yaml:"manifests,omitempty"`
+
+ // RemoteManifests lists Kubernetes manifests in remote clusters.
+ RemoteManifests []string `yaml:"remoteManifests,omitempty"`
+
+ // Flags are additional flags passed to `kubectl`.
+ Flags KubectlFlags `yaml:"flags,omitempty"`
+}
+
+// KubectlFlags are additional flags passed on the command
+// line to kubectl either on every command (Global), on creations (Apply)
+// or deletions (Delete).
+type KubectlFlags struct {
+ // Global are additional flags passed on every command.
+ Global []string `yaml:"global,omitempty"`
+
+ // Apply are additional flags passed on creations (`kubectl apply`).
+ Apply []string `yaml:"apply,omitempty"`
+
+ // Delete are additional flags passed on deletions (`kubectl delete`).
+ Delete []string `yaml:"delete,omitempty"`
+}
+
+// HelmDeploy *beta* uses the `helm` CLI to apply the charts to the cluster.
+type HelmDeploy struct {
+ // Releases is a list of Helm releases.
+ Releases []HelmRelease `yaml:"releases,omitempty" yamltags:"required"`
+
+ // Flags are additional option flags that are passed on the command
+ // line to `helm`.
+ Flags HelmDeployFlags `yaml:"flags,omitempty"`
+}
+
+// HelmDeployFlags are additional option flags that are passed on the command
+// line to `helm`.
+type HelmDeployFlags struct {
+ // Global are additional flags passed on every command.
+ Global []string `yaml:"global,omitempty"`
+
+ // Install are additional flags passed to (`helm install`).
+ Install []string `yaml:"install,omitempty"`
+
+ // Upgrade are additional flags passed to (`helm upgrade`).
+ Upgrade []string `yaml:"upgrade,omitempty"`
+}
+
+// KustomizeDeploy *beta* uses the `kustomize` CLI to "patch" a deployment for a target environment.
+type KustomizeDeploy struct {
+ // KustomizePath is the path to Kustomization files.
+ // Defaults to `.`.
+ KustomizePath string `yaml:"path,omitempty"`
+
+ // Flags are additional flags passed to `kubectl`.
+ Flags KubectlFlags `yaml:"flags,omitempty"`
+}
+
+// HelmRelease describes a helm release to be deployed.
+type HelmRelease struct {
+ // Name is the name of the Helm release.
+ Name string `yaml:"name,omitempty" yamltags:"required"`
+
+ // ChartPath is the path to the Helm chart.
+ ChartPath string `yaml:"chartPath,omitempty" yamltags:"required"`
+
+ // ValuesFiles are the paths to the Helm `values` files.
+ ValuesFiles []string `yaml:"valuesFiles,omitempty"`
+
+ // Values are key-value pairs supplementing the Helm `values` file.
+ Values map[string]string `yaml:"values,omitempty,omitempty"`
+
+ // Namespace is the Kubernetes namespace.
+ Namespace string `yaml:"namespace,omitempty"`
+
+ // Version is the version of the chart.
+ Version string `yaml:"version,omitempty"`
+
+ // SetValues are key-value pairs.
+ // If present, Skaffold will send `--set` flag to Helm CLI and append all pairs after the flag.
+ SetValues map[string]string `yaml:"setValues,omitempty"`
+
+ // SetValueTemplates are key-value pairs.
+ // If present, Skaffold will try to parse the value part of each key-value pair using
+ // environment variables in the system, then send `--set` flag to Helm CLI and append
+ // all parsed pairs after the flag.
+ SetValueTemplates map[string]string `yaml:"setValueTemplates,omitempty"`
+
+ // Wait if `true`, Skaffold will send `--wait` flag to Helm CLI.
+ // Defaults to `false`.
+ Wait bool `yaml:"wait,omitempty"`
+
+ // RecreatePods if `true`, Skaffold will send `--recreate-pods` flag to Helm CLI.
+ // Defaults to `false`.
+ RecreatePods bool `yaml:"recreatePods,omitempty"`
+
+ // SkipBuildDependencies should build dependencies be skipped.
+ SkipBuildDependencies bool `yaml:"skipBuildDependencies,omitempty"`
+
+ // UseHelmSecrets instructs skaffold to use secrets plugin on deployment.
+ UseHelmSecrets bool `yaml:"useHelmSecrets,omitempty"`
+
+ // Overrides are key-value pairs.
+ // If present, Skaffold will build a Helm `values` file that overrides
+ // the original and use it to call Helm CLI (`--f` flag).
+ Overrides util.HelmOverrides `yaml:"overrides,omitempty"`
+
+ // Packaged parameters for packaging helm chart (`helm package`).
+ Packaged *HelmPackaged `yaml:"packaged,omitempty"`
+
+ // ImageStrategy adds image configurations to the Helm `values` file.
+ ImageStrategy HelmImageStrategy `yaml:"imageStrategy,omitempty"`
+}
+
+// HelmPackaged parameters for packaging helm chart (`helm package`).
+type HelmPackaged struct {
+ // Version sets the `version` on the chart to this semver version.
+ Version string `yaml:"version,omitempty"`
+
+ // AppVersion sets the `appVersion` on the chart to this version.
+ AppVersion string `yaml:"appVersion,omitempty"`
+}
+
+// HelmImageStrategy adds image configurations to the Helm `values` file.
+type HelmImageStrategy struct {
+ HelmImageConfig `yaml:",inline"`
+}
+
+// HelmImageConfig describes an image configuration.
+type HelmImageConfig struct {
+ // HelmFQNConfig is the image configuration uses the syntax `IMAGE-NAME=IMAGE-REPOSITORY:IMAGE-TAG`.
+ HelmFQNConfig *HelmFQNConfig `yaml:"fqn,omitempty" yamltags:"oneOf=helmImageStrategy"`
+
+ // HelmConventionConfig is the image configuration uses the syntax `IMAGE-NAME.repository=IMAGE-REPOSITORY, IMAGE-NAME.tag=IMAGE-TAG`.
+ HelmConventionConfig *HelmConventionConfig `yaml:"helm,omitempty" yamltags:"oneOf=helmImageStrategy"`
+}
+
+// HelmFQNConfig is the image config to use the FullyQualifiedImageName as param to set.
+type HelmFQNConfig struct {
+ // Property defines the image config.
+ Property string `yaml:"property,omitempty"`
+}
+
+// HelmConventionConfig is the image config in the syntax of image.repository and image.tag.
+type HelmConventionConfig struct {
+}
+
+// Artifact are the items that need to be built, along with the context in which
+// they should be built.
+type Artifact struct {
+ // ImageName is the name of the image to be built.
+ // For example: `gcr.io/k8s-skaffold/example`.
+ ImageName string `yaml:"image,omitempty" yamltags:"required"`
+
+ // Workspace is the directory containing the artifact's sources.
+ // Defaults to `.`.
+ Workspace string `yaml:"context,omitempty"`
+
+ // Sync *alpha* lists local files synced to pods instead
+ // of triggering an image build when modified.
+ // This is a mapping of local files to sync to remote folders.
+ // For example: `{"*.py": ".", "css/**/*.css": "app/css"}`.
+ Sync map[string]string `yaml:"sync,omitempty"`
+
+ // ArtifactType describes how to build an artifact.
+ ArtifactType `yaml:",inline"`
+
+ WorkspaceHash string `yaml:"-,omitempty"`
+
+ // BuilderPlugin is the plugin used to build this artifact.
+ BuilderPlugin *BuilderPlugin `yaml:"plugin,omitempty"`
+}
+
+// Profile *beta* profiles are used to override any `build`, `test` or `deploy` configuration.
+type Profile struct {
+ // Name is a unique profile name.
+ // For example: `profile-prod`.
+ Name string `yaml:"name,omitempty" yamltags:"required"`
+
+ // Pipeline contains the definitions to replace the default skaffold pipeline.
+ Pipeline `yaml:",inline"`
+
+ // Patches lists patches applied to the configuration.
+ // Patches use the JSON patch notation.
+ Patches []JSONPatch `yaml:"patches,omitempty"`
+
+ // Activation criteria by which a profile can be auto-activated.
+ // The profile is auto-activated if any one of the activations are triggered.
+ // An activation is triggered if all of the criteria (env, kubeContext, command) are triggered.
+ Activation []Activation `yaml:"activation,omitempty"`
+}
+
+// JSONPatch patch to be applied by a profile.
+type JSONPatch struct {
+ // Op is the operation carried by the patch: `add`, `remove`, `replace`, `move`, `copy` or `test`.
+ // Defaults to `replace`.
+ Op string `yaml:"op,omitempty"`
+
+ // Path is the position in the yaml where the operation takes place.
+ // For example, this targets the `dockerfile` of the first artifact built.
+ // For example: `/build/artifacts/0/docker/dockerfile`.
+ Path string `yaml:"path,omitempty" yamltags:"required"`
+
+ // From is the source position in the yaml, used for `copy` or `move` operations.
+ From string `yaml:"from,omitempty"`
+
+ // Value is the value to apply. Can be any portion of yaml.
+ Value *yamlpatch.Node `yaml:"value,omitempty"`
+}
+
+// Activation criteria by which a profile is auto-activated.
+type Activation struct {
+ // Env is a `key=value` pair. The profile is auto-activated if an Environment
+ // Variable `key` has value `value`.
+ // For example: `ENV=production`.
+ Env string `yaml:"env,omitempty"`
+
+ // KubeContext is a Kubernetes context for which the profile is auto-activated.
+ // For example: `minikube`.
+ KubeContext string `yaml:"kubeContext,omitempty"`
+
+ // Command is a Skaffold command for which the profile is auto-activated.
+ // For example: `dev`.
+ Command string `yaml:"command,omitempty"`
+}
+
+// ArtifactType describes how to build an artifact.
+type ArtifactType struct {
+ // DockerArtifact *beta* describes an artifact built from a Dockerfile.
+ DockerArtifact *DockerArtifact `yaml:"docker,omitempty" yamltags:"oneOf=artifact"`
+
+ // BazelArtifact *beta* requires bazel CLI to be installed and the sources to
+ // contain [Bazel](https://bazel.build/) configuration files.
+ BazelArtifact *BazelArtifact `yaml:"bazel,omitempty" yamltags:"oneOf=artifact"`
+
+ // JibMavenArtifact *alpha* builds images using the
+ // [Jib plugin for Maven](https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin).
+ JibMavenArtifact *JibMavenArtifact `yaml:"jibMaven,omitempty" yamltags:"oneOf=artifact"`
+
+ // JibGradleArtifact *alpha* builds images using the
+ // [Jib plugin for Gradle](https://github.com/GoogleContainerTools/jib/tree/master/jib-gradle-plugin).
+ JibGradleArtifact *JibGradleArtifact `yaml:"jibGradle,omitempty" yamltags:"oneOf=artifact"`
+
+ // KanikoArtifact *alpha* builds images using [kaniko](https://github.com/GoogleContainerTools/kaniko).
+ KanikoArtifact *KanikoArtifact `yaml:"kaniko,omitempty" yamltags:"oneOf=artifact"`
+}
+
+// KanikoArtifact *alpha* describes an artifact built from a Dockerfile,
+// with kaniko.
+type KanikoArtifact struct {
+ // AdditionalFlags are additional flags to be passed to Kaniko command line.
+ // See [Kaniko Additional Flags](https://github.com/GoogleContainerTools/kaniko#additional-flags).
+ // Deprecated - instead the named, unique fields should be used, e.g. `buildArgs`, `cache`, `target`.
+ AdditionalFlags []string `yaml:"flags,omitempty"`
+
+ // DockerfilePath locates the Dockerfile relative to workspace.
+ // Defaults to `Dockerfile`.
+ DockerfilePath string `yaml:"dockerfile,omitempty"`
+
+ // Target is the Dockerfile target name to build.
+ Target string `yaml:"target,omitempty"`
+
+ // BuildArgs are arguments passed to the docker build.
+ // For example: `{"key1": "value1", "key2": "value2"}`.
+ BuildArgs map[string]*string `yaml:"buildArgs,omitempty"`
+
+ // BuildContext is where the build context for this artifact resides.
+ BuildContext *KanikoBuildContext `yaml:"buildContext,omitempty"`
+
+ // Image is the Docker image used by the Kaniko pod.
+ // Defaults to the latest released version of `gcr.io/kaniko-project/executor`.
+ Image string `yaml:"image,omitempty"`
+
+ // Cache configures Kaniko caching. If a cache is specified, Kaniko will
+ // use a remote cache which will speed up builds.
+ Cache *KanikoCache `yaml:"cache,omitempty"`
+}
+
+// DockerArtifact *beta* describes an artifact built from a Dockerfile,
+// usually using `docker build`.
+type DockerArtifact struct {
+ // DockerfilePath locates the Dockerfile relative to workspace.
+ // Defaults to `Dockerfile`.
+ DockerfilePath string `yaml:"dockerfile,omitempty"`
+
+ // Target is the Dockerfile target name to build.
+ Target string `yaml:"target,omitempty"`
+
+ // BuildArgs are arguments passed to the docker build.
+ // For example: `{"key1": "value1", "key2": "value2"}`.
+ BuildArgs map[string]*string `yaml:"buildArgs,omitempty"`
+
+ // CacheFrom lists the Docker images used as cache sources.
+ // For example: `["golang:1.10.1-alpine3.7", "alpine:3.7"]`.
+ CacheFrom []string `yaml:"cacheFrom,omitempty"`
+}
+
+// BazelArtifact *beta* describes an artifact built with [Bazel](https://bazel.build/).
+type BazelArtifact struct {
+ // BuildTarget is the `bazel build` target to run.
+ // For example: `//:skaffold_example.tar`.
+ BuildTarget string `yaml:"target,omitempty" yamltags:"required"`
+
+ // BuildArgs are additional args to pass to `bazel build`.
+ // For example: `["-flag", "--otherflag"]`.
+ BuildArgs []string `yaml:"args,omitempty"`
+}
+
+// JibMavenArtifact *alpha* builds images using the
+// [Jib plugin for Maven](https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin).
+type JibMavenArtifact struct {
+ // Module selects which Maven module to build, for a multi module project.
+ Module string `yaml:"module"`
+
+ // Profile selects which Maven profile to activate.
+ Profile string `yaml:"profile"`
+
+ // Flags are additional build flags passed to Maven.
+ // For example: `["-x", "-DskipTests"]`.
+ Flags []string `yaml:"args,omitempty"`
+}
+
+// JibGradleArtifact *alpha* builds images using the
+// [Jib plugin for Gradle](https://github.com/GoogleContainerTools/jib/tree/master/jib-gradle-plugin).
+type JibGradleArtifact struct {
+ // Project selects which Gradle project to build.
+ Project string `yaml:"project"`
+
+ // Flags are additional build flags passed to Gradle.
+ // For example: `["--no-build-cache"]`.
+ Flags []string `yaml:"args,omitempty"`
+}
diff --git a/pkg/skaffold/schema/v1beta8/upgrade.go b/pkg/skaffold/schema/v1beta8/upgrade.go
new file mode 100644
index 00000000000..dd363b4a93f
--- /dev/null
+++ b/pkg/skaffold/schema/v1beta8/upgrade.go
@@ -0,0 +1,68 @@
+/*
+Copyright 2019 The Skaffold Authors
+
+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 v1beta8
+
+import (
+ next "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
+ "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/util"
+ pkgutil "github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
+ "github.com/pkg/errors"
+)
+
+// Upgrade upgrades a configuration to the next version.
+// Config changes from v1beta8 to v1beta9
+// 1. No additions
+// 2. No removals
+// 3. No updates
+func (config *SkaffoldConfig) Upgrade() (util.VersionedConfig, error) {
+ // convert Deploy (should be the same)
+ var newDeploy next.DeployConfig
+ if err := pkgutil.CloneThroughJSON(config.Deploy, &newDeploy); err != nil {
+ return nil, errors.Wrap(err, "converting deploy config")
+ }
+
+ // convert Profiles (should be the same)
+ var newProfiles []next.Profile
+ if config.Profiles != nil {
+ if err := pkgutil.CloneThroughJSON(config.Profiles, &newProfiles); err != nil {
+ return nil, errors.Wrap(err, "converting new profile")
+ }
+ }
+
+ // convert Kaniko (should be same)
+ var newBuild next.BuildConfig
+ if err := pkgutil.CloneThroughJSON(config.Build, &newBuild); err != nil {
+ return nil, errors.Wrap(err, "converting new build")
+ }
+
+ // convert Test (should be the same)
+ var newTest []*next.TestCase
+ if err := pkgutil.CloneThroughJSON(config.Test, &newTest); err != nil {
+ return nil, errors.Wrap(err, "converting new test")
+ }
+
+ return &next.SkaffoldConfig{
+ APIVersion: next.Version,
+ Kind: config.Kind,
+ Pipeline: next.Pipeline{
+ Build: newBuild,
+ Test: newTest,
+ Deploy: newDeploy,
+ },
+ Profiles: newProfiles,
+ }, nil
+}
diff --git a/pkg/skaffold/schema/v1beta8/upgrade_test.go b/pkg/skaffold/schema/v1beta8/upgrade_test.go
new file mode 100644
index 00000000000..718c5b1540f
--- /dev/null
+++ b/pkg/skaffold/schema/v1beta8/upgrade_test.go
@@ -0,0 +1,111 @@
+/*
+Copyright 2019 The Skaffold Authors
+
+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 v1beta8
+
+import (
+ "testing"
+
+ "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
+ "github.com/GoogleContainerTools/skaffold/testutil"
+ yaml "gopkg.in/yaml.v2"
+)
+
+func TestUpgrade(t *testing.T) {
+ yaml := `apiVersion: skaffold/v1beta8
+kind: Config
+build:
+ artifacts:
+ - image: gcr.io/k8s-skaffold/skaffold-example
+test:
+ - image: gcr.io/k8s-skaffold/skaffold-example
+ structureTests:
+ - ./test/*
+deploy:
+ kubectl:
+ manifests:
+ - k8s-*
+profiles:
+ - name: test profile
+ build:
+ artifacts:
+ - image: gcr.io/k8s-skaffold/skaffold-example
+ kaniko:
+ buildContext:
+ gcsBucket: skaffold-kaniko
+ cache: {}
+ cluster:
+ pullSecretName: e2esecret
+ namespace: default
+ test:
+ - image: gcr.io/k8s-skaffold/skaffold-example
+ structureTests:
+ - ./test/*
+ deploy:
+ kubectl:
+ manifests:
+ - k8s-*
+`
+ expected := `apiVersion: skaffold/v1beta9
+kind: Config
+build:
+ artifacts:
+ - image: gcr.io/k8s-skaffold/skaffold-example
+test:
+ - image: gcr.io/k8s-skaffold/skaffold-example
+ structureTests:
+ - ./test/*
+deploy:
+ kubectl:
+ manifests:
+ - k8s-*
+profiles:
+ - name: test profile
+ build:
+ artifacts:
+ - image: gcr.io/k8s-skaffold/skaffold-example
+ kaniko:
+ buildContext:
+ gcsBucket: skaffold-kaniko
+ cache: {}
+ cluster:
+ pullSecretName: e2esecret
+ namespace: default
+ test:
+ - image: gcr.io/k8s-skaffold/skaffold-example
+ structureTests:
+ - ./test/*
+ deploy:
+ kubectl:
+ manifests:
+ - k8s-*
+`
+ verifyUpgrade(t, yaml, expected)
+}
+
+func verifyUpgrade(t *testing.T, input, output string) {
+ pipeline := NewSkaffoldConfig()
+ err := yaml.UnmarshalStrict([]byte(input), pipeline)
+ testutil.CheckErrorAndDeepEqual(t, false, err, Version, pipeline.GetVersion())
+
+ upgraded, err := pipeline.Upgrade()
+ testutil.CheckError(t, false, err)
+
+ expected := latest.NewSkaffoldConfig()
+ err = yaml.UnmarshalStrict([]byte(output), expected)
+
+ testutil.CheckErrorAndDeepEqual(t, false, err, expected, upgraded)
+}
diff --git a/pkg/skaffold/schema/versions.go b/pkg/skaffold/schema/versions.go
index 721ddd1515d..b9d69b71ea8 100644
--- a/pkg/skaffold/schema/versions.go
+++ b/pkg/skaffold/schema/versions.go
@@ -34,6 +34,7 @@ import (
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/v1beta5"
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/v1beta6"
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/v1beta7"
+ "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/v1beta8"
misc "github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
@@ -57,6 +58,7 @@ var SchemaVersions = Versions{
{v1beta5.Version, v1beta5.NewSkaffoldPipeline},
{v1beta6.Version, v1beta6.NewSkaffoldPipeline},
{v1beta7.Version, v1beta7.NewSkaffoldPipeline},
+ {v1beta8.Version, v1beta8.NewSkaffoldConfig},
{latest.Version, latest.NewSkaffoldConfig},
}