Repository: GoogleContainerTools/skaffold
Pull request #8118 (2022-11-18 18:13:37)

fix: integration-test cleanup
<!-- Thank you for your contribution! -->

<!-- Include if applicable: -->
Fixes: #8116 <!-- tracking issues that this PR will close -->


**Description**
 - change cleanup(delete) call in test to be run in the same process as test itself instead of running in background process, to avoid background process being killed before skaffold delete gets called. 
 - refactor file sync test to use different pod for each test to avoid test contamination. 
 

codecov[bot]: # [Codecov](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools) Report
> Merging [#8118](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools) (53b0c12) into [main](https://codecov.io/gh/GoogleContainerTools/skaffold/commit/290280e8c6c19231e9ed5b5c027f2c01d22f75be?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools) (290280e) will **decrease** coverage by `4.24%`.
> The diff coverage is `53.26%`.

```diff
@@            Coverage Diff             @@
##             main    #8118      +/-   ##
==========================================
- Coverage   70.48%   66.23%   -4.25%     
==========================================
  Files         515      599      +84     
  Lines       23150    29348    +6198     
==========================================
+ Hits        16317    19439    +3122     
- Misses       5776     8459    +2683     
- Partials     1057     1450     +393     
```


| [Impacted Files](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools) | Coverage Δ | |
|---|---|---|
| [cmd/skaffold/app/cmd/completion.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvY29tcGxldGlvbi5nbw==) | `13.04% <0.00%> (-1.25%)` | :arrow_down: |
| [cmd/skaffold/app/cmd/credits/export.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvY3JlZGl0cy9leHBvcnQuZ28=) | `0.00% <0.00%> (ø)` | |
| [cmd/skaffold/app/cmd/deploy.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvZGVwbG95Lmdv) | `40.90% <0.00%> (-12.94%)` | :arrow_down: |
| [cmd/skaffold/app/cmd/test.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvdGVzdC5nbw==) | `44.44% <0.00%> (ø)` | |
| [cmd/skaffold/app/exitcode.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9leGl0Y29kZS5nbw==) | `100.00% <ø> (+6.66%)` | :arrow_up: |
| [cmd/skaffold/skaffold.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL3NrYWZmb2xkLmdv) | `0.00% <0.00%> (ø)` | |
| [cmd/skaffold/app/cmd/inspect\_tests.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvaW5zcGVjdF90ZXN0cy5nbw==) | `62.50% <14.28%> (-1.14%)` | :arrow_down: |
| [cmd/skaffold/app/cmd/render.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvcmVuZGVyLmdv) | `35.48% <18.18%> (-5.90%)` | :arrow_down: |
| [cmd/skaffold/app/cmd/lsp.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvbHNwLmdv) | `28.12% <28.12%> (ø)` | |
| [cmd/skaffold/app/cmd/run.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvcnVuLmdv) | `64.28% <33.33%> (-9.63%)` | :arrow_down: |
| ... and [392 more](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/8118/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools) | |

:mega: We’re building smart automated test selection to slash your CI/CD build times. [Learn more](https://about.codecov.io/iterative-testing/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools)

ericzzzzzzz: hmm... This is a little awkward, TestDevSyncDefaultNamespace whole test was passing due to file-sync pod in the first test case not being deleted. We're seeing the second test case failing, this is caused by the second test case the background dev process sees the terminating status of the pod from the first test case and before that 	``client.WaitForPodsReady("test-file-sync")`` has been already executed, it saw a running pod, that's due to kubeclt delete command returns after it sends request to the cluster, it doesn't wait for the deletion. Perhaps, we shouldn't share the test resource for this whole test. 

Patch:
diff --git a/.github/workflows/integration-darwin.yml b/.github/workflows/integration-darwin.yml
deleted file mode 100644
index ceb3f1769..000000000
--- a/.github/workflows/integration-darwin.yml
+++ /dev/null
@@ -1,64 +0,0 @@
-name: PR integration tests (darwin)
-
-# Triggers the workflow on push or pull request events
-on: [push, pull_request]
-
-permissions: read-all
-
-concurrency:
-  group: build-${{ github.event.pull_request.number || github.ref }}-${{github.workflow}}
-  cancel-in-progress: true
-
-jobs:
-
-  build:
-    name: PR integration tests (darwin)
-    runs-on: macos-latest
-    steps:
-
-    - name: Check out code into the Go module directory
-      uses: actions/checkout@v3
-      with:
-        fetch-depth: 0
-
-    - name: Set up Go
-      uses: actions/setup-go@v3
-      with:
-        go-version: 1.19.*
-      id: go
-
-    # Retrieve build locations with `go env`
-    # <https://markphelps.me/posts/speed-up-your-go-builds-with-actions-cache/>
-    - id: go-cache-paths
-      run: |
-        echo "go-build=$(go env GOCACHE)" >> $GITHUB_OUTPUT
-        echo "go-mod=$(go env GOMODCACHE)" >> $GITHUB_OUTPUT
-
-    - uses: actions/cache@v3
-      with:
-        path: |
-          ${{ steps.go-cache-paths.outputs.go-build }}
-          ${{ steps.go-cache-paths.outputs.go-mod }}
-        key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
-        restore-keys: |
-          ${{ runner.os }}-go-
-
-    # Skip integration tests for `docs`-only changes (only works for PR-based dev workflows like Skaffold's).
-    # NOTE: grep output is stored in env var with `|| true` as the run command cannot fail or action will fail
-    - name: Check if only docs changes were made in this PR
-      run: |
-        echo ${{ github.event.before }}
-        echo ${{ github.event.after }}
-        NON_DOCS_FILES_CHANGED=$(git diff --name-only ${{ github.event.pull_request.base.sha }}..${{ github.sha }}| grep -v '^docs/' || true) 
-        echo "NON_DOCS_FILES_CHANGED=${#NON_DOCS_FILES_CHANGED}" >> $GITHUB_ENV  # get the char len of diff output (used later)
-
-    - name: Make and install Skaffold binary from current PR
-      if: ${{ env.NON_DOCS_FILES_CHANGED != 0 }}
-      run: |
-        make
-        sudo install "${HOME}/work/skaffold/skaffold/out/skaffold" /usr/local/bin/skaffold
-
-    - name: Run integration tests
-      if: ${{ env.NON_DOCS_FILES_CHANGED != 0 }}
-      run: |
-         make quicktest
diff --git a/.github/workflows/integration-linux.yml b/.github/workflows/integration-linux.yml
index 4913ea9a1..b3825e6af 100644
--- a/.github/workflows/integration-linux.yml
+++ b/.github/workflows/integration-linux.yml
@@ -19,7 +19,8 @@ jobs:
         kustomize_version: [3.5.4]
         ko_version: [0.4.0]
         kompose_version: [1.21.0]
-        gcloud_sdk_version: [335.0.0]
+        kpt_version: [1.0.0-beta.13]
+        gcloud_sdk_version: [410.0.0]
         container_structure_tests_version: [1.8.0]
         integration_test_partitions: [0, 1, 2, 3]
     steps:
@@ -78,12 +79,18 @@ jobs:
         wget -O kompose https://github.com/kubernetes/kompose/releases/download/v${{ matrix.kompose_version }}/kompose-linux-amd64 && chmod +x kompose
         sudo mv kompose /usr/local/bin/
 
+    - name: Install Kpt
+      if: ${{ env.NON_DOCS_FILES_CHANGED != 0 }}
+      run: |
+        wget -O kpt https://github.com/GoogleContainerTools/kpt/releases/download/v${{ matrix.kpt_version }}/kpt_linux_amd64 && chmod +x kpt
+        sudo mv kpt /usr/local/bin/
+
     - name: Install GCloud
       if: ${{ env.NON_DOCS_FILES_CHANGED != 0 }}
       run: |
         wget -O gcloud.tar.gz https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${{ matrix.gcloud_sdk_version }}-linux-x86_64.tar.gz
         tar -xvf gcloud.tar.gz -C ${HOME}/
-        CLOUDSDK_PYTHON="python2.7" ${HOME}/google-cloud-sdk/install.sh --usage-reporting=false --bash-completion=false --disable-installation-options
+        ${HOME}/google-cloud-sdk/install.sh --usage-reporting=false --bash-completion=false --disable-installation-options
         echo "${HOME}/google-cloud-sdk/bin" >> $GITHUB_PATH
 
     - name: Configure GCloud with Docker
diff --git a/.github/workflows/linters-checks.yml b/.github/workflows/linters-checks.yml
new file mode 100644
index 000000000..fe3e13368
--- /dev/null
+++ b/.github/workflows/linters-checks.yml
@@ -0,0 +1,34 @@
+name: PR linters, checks
+
+# Triggers the workflow on push or pull request events
+on: [push, pull_request]
+
+permissions: read-all
+
+concurrency:
+  group: build-${{ github.event.pull_request.number || github.ref }}-${{github.workflow}}
+  cancel-in-progress: true
+
+jobs:
+  build:
+    name: PR linters, checks
+    runs-on: ubuntu-latest
+    steps:
+      - name: Set up Go
+        uses: actions/setup-go@v3
+        with:
+          go-version: 1.19.*
+        id: go
+
+      - name: Check out code into the Go module directory
+        uses: actions/checkout@v3
+        with:
+          fetch-depth: 0
+
+      - name: Run make linters
+        run: |
+          make linters
+
+      - name: Run make checks
+        run: |
+          make checks
\ No newline at end of file
diff --git a/.github/workflows/performance-comparison.yml b/.github/workflows/performance-comparison.yml
index 2fe1344b4..79773a469 100644
--- a/.github/workflows/performance-comparison.yml
+++ b/.github/workflows/performance-comparison.yml
@@ -22,7 +22,7 @@ jobs:
         kustomize_version: [3.5.4]
         ko_version: [0.4.0]
         kompose_version: [1.21.0]
-        gcloud_sdk_version: [335.0.0]
+        gcloud_sdk_version: [410.0.0]
         container_structure_tests_version: [1.8.0]
     steps:
     - name: "Check if user has write access"
@@ -68,7 +68,7 @@ jobs:
       run: |
         wget -O gcloud.tar.gz https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${{ matrix.gcloud_sdk_version }}-linux-x86_64.tar.gz
         tar -xvf gcloud.tar.gz -C ${HOME}/
-        CLOUDSDK_PYTHON="python2.7" ${HOME}/google-cloud-sdk/install.sh --usage-reporting=false --bash-completion=false --disable-installation-options
+        ${HOME}/google-cloud-sdk/install.sh --usage-reporting=false --bash-completion=false --disable-installation-options
         echo "${HOME}/google-cloud-sdk/bin" >> $GITHUB_PATH
 
     - name: Configure GCloud with Docker
diff --git a/.github/workflows/integration-windows.yml b/.github/workflows/unit-tests-windows.yml
similarity index 85%
rename from .github/workflows/integration-windows.yml
rename to .github/workflows/unit-tests-windows.yml
index 33647a051..9636414dd 100644
--- a/.github/workflows/integration-windows.yml
+++ b/.github/workflows/unit-tests-windows.yml
@@ -44,7 +44,7 @@ jobs:
         restore-keys: |
           ${{ runner.os }}-go-
 
-    # TODO(aaron-prindle) skip integration tests for doc only changes on Windows.  Figure out the proper syntax, etc.
+      # TODO(aaron-prindle) skip unit tests for doc only changes on Windows.  Figure out the proper syntax, etc.
     - name: Run skaffold unit tests on windows
       run: |
-        go test -short -timeout 60s  ./pkg/skaffold/... ./cmd/... ./hack/... ./pkg/webhook/...
+        go test -count=1 -short -timeout 90s  ./pkg/skaffold/... ./cmd/... ./hack/... ./pkg/webhook/...
diff --git a/Makefile b/Makefile
index 46b56b69b..37dd04340 100644
--- a/Makefile
+++ b/Makefile
@@ -113,6 +113,10 @@ test: $(BUILD_DIR)
 	@ ./hack/checks.sh
 	@ ./hack/linters.sh
 
+.PHONY: unit-tests
+unit-tests: $(BUILD_DIR)
+	@ ./hack/gotest.sh -count=1 -race -short -timeout=90s $(SKAFFOLD_TEST_PACKAGES)
+
 .PHONY: coverage
 coverage: $(BUILD_DIR)
 	@ ./hack/gotest.sh -count=1 -race -cover -short -timeout=90s -coverprofile=out/coverage.txt -coverpkg="./pkg/...,./cmd/..." $(SKAFFOLD_TEST_PACKAGES)
diff --git a/deploy/skaffold/Dockerfile.deps b/deploy/skaffold/Dockerfile.deps
index 8a4319479..b71045b30 100644
--- a/deploy/skaffold/Dockerfile.deps
+++ b/deploy/skaffold/Dockerfile.deps
@@ -143,8 +143,10 @@ RUN /google-cloud-sdk/install.sh \
     --bash-completion=false \
     --disable-installation-options
 ENV PATH=$PATH:/google-cloud-sdk/bin
-RUN gcloud auth configure-docker && \
-    gcloud components install gke-gcloud-auth-plugin
+RUN gcloud auth configure-docker && gcloud components install --quiet \
+    gke-gcloud-auth-plugin \
+    cloud-run-proxy \
+    log-streaming
 
 FROM runtime_deps
 RUN apt-get update && apt-get install --no-install-recommends --no-install-suggests -y \
diff --git a/deploy/skaffold/Dockerfile.deps.lts b/deploy/skaffold/Dockerfile.deps.lts
index ecccac2ef..f5ecc3d00 100644
--- a/deploy/skaffold/Dockerfile.deps.lts
+++ b/deploy/skaffold/Dockerfile.deps.lts
@@ -87,8 +87,10 @@ RUN /google-cloud-sdk/install.sh \
     --bash-completion=false \
     --disable-installation-options
 ENV PATH=$PATH:/google-cloud-sdk/bin
-RUN gcloud auth configure-docker && \
-    gcloud components install gke-gcloud-auth-plugin
+RUN gcloud auth configure-docker && gcloud components install --quiet \
+    gke-gcloud-auth-plugin \
+    cloud-run-proxy \
+    log-streaming
 
 FROM runtime_deps
 RUN apt-get update && apt-get install --no-install-recommends --no-install-suggests -y \
diff --git a/deploy/skaffold/Dockerfile.deps.slim b/deploy/skaffold/Dockerfile.deps.slim
index ee40c65a7..f5ecc3d00 100644
--- a/deploy/skaffold/Dockerfile.deps.slim
+++ b/deploy/skaffold/Dockerfile.deps.slim
@@ -19,7 +19,7 @@ FROM alpine:3.10 as download-kubectl
 ARG ARCH
 # Track default version installed by Google Cloud SDK: 406.0.0 moved to 1.22(.14)
 # https://cloud.google.com/sdk/docs/release-notes
-ENV KUBECTL_VERSION v1.22.14
+ENV KUBECTL_VERSION v1.23.12
 ENV KUBECTL_URL https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${ARCH}/kubectl
 # SHAs at gs://kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${ARCH}/
 COPY deploy/skaffold/digests/kubectl.${ARCH}.sha512 .
@@ -30,7 +30,7 @@ RUN chmod +x kubectl
 FROM alpine:3.10 as download-helm
 ARG ARCH
 RUN echo arch=$ARCH
-ENV HELM_VERSION v3.10.1
+ENV HELM_VERSION v3.10.2
 ENV HELM_URL https://storage.googleapis.com/skaffold/deps/helm/helm-${HELM_VERSION}-linux-${ARCH}.tar.gz
 COPY deploy/skaffold/digests/helm.${ARCH}.sha256 .
 RUN wget -O helm.tar.gz "${HELM_URL}" && sha256sum -c helm.${ARCH}.sha256
@@ -57,7 +57,7 @@ RUN chmod +x kpt
 # Download gcloud
 FROM alpine:3.10 as download-gcloud
 ARG ARCH
-ENV GCLOUD_VERSION 406.0.0
+ENV GCLOUD_VERSION 410.0.0
 ENV GCLOUD_URL https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${GCLOUD_VERSION}-linux-GCLOUDARCH.tar.gz
 # SHAs listed at https://cloud.google.com/sdk/docs/downloads-versioned-archives
 COPY deploy/skaffold/digests/gcloud.${ARCH}.sha256 .
@@ -87,8 +87,10 @@ RUN /google-cloud-sdk/install.sh \
     --bash-completion=false \
     --disable-installation-options
 ENV PATH=$PATH:/google-cloud-sdk/bin
-RUN gcloud auth configure-docker && \
-    gcloud components install gke-gcloud-auth-plugin
+RUN gcloud auth configure-docker && gcloud components install --quiet \
+    gke-gcloud-auth-plugin \
+    cloud-run-proxy \
+    log-streaming
 
 FROM runtime_deps
 RUN apt-get update && apt-get install --no-install-recommends --no-install-suggests -y \
diff --git a/docs-v2/content/en/docs/pipeline-stages/deployers/helm.md b/docs-v2/content/en/docs/pipeline-stages/deployers/helm.md
index f82d63888..857b8f475 100644
--- a/docs-v2/content/en/docs/pipeline-stages/deployers/helm.md
+++ b/docs-v2/content/en/docs/pipeline-stages/deployers/helm.md
@@ -19,24 +19,32 @@ To use `helm` with Skaffold, the `helm` binary must be installed on your machine
 Skaffold supports projects set up to render and/or deploy with Helm, but certain aspects of the project need to be configured correctly in order for Skaffold to work properly. This guide should demystify some of the nuance around using Skaffold with Helm to help you get started quickly.
 
 {{< alert title="No more `artifactOverrides` or `imageStrategy`" >}}
-Skaffold no longer requires the intricate configuring of `artifactOverrides` or `imageStrategy` fields. See docs [here]({{< relref "#image-reference-strategies" >}}) on how old `artifactOverrides` and `imageStrategy` values translate to `setValues` entires in the latest Skaffold schemas (`apiVersion: skaffold/v3alpha1` or skaffold binary version `v2.0.0` onwards)
+Skaffold no longer requires the intricate configuring of `artifactOverrides` or `imageStrategy` fields. See docs [here]({{< relref "#image-reference-strategies" >}}) on how old `artifactOverrides` and `imageStrategy` values translate to `setValueTemplates` entries in the latest Skaffold schemas (`apiVersion: skaffold/v3alpha1` or skaffold binary version `v2.0.0` onwards)
 {{< /alert >}}
 
 {{< alert title="Note" >}}
 In Skaffold `v2` the primary difference between the helm renderer (`manifest.helm.*`) and the helm deployer (`deploy.helm.*`) is the use of `helm template` vs `helm install`
 {{< /alert >}}
 
+
 ## How `helm` render support works in Skaffold
-In the latest version of Skaffold, the primary methods of using `helm` templating with Skaffold involve the `deploy.helm.setValues` and the `deploy.helm.setValueTemplates` fields.  `deploy.helm.setValues` supplies the key:value pair to substitute from a users `values.yaml` file (a standard `helm` file for rendering).  `deploy.helm.setValueTemplates` does a similar thing only the key:value value comes from an environment variable instead of a given value.  The thing to note here is that when using a value that is the same name as an artifact name, that value will be replaced by the fully qualified artifact name (eg: `image: gcr.io/example-repo/skaffold-helm-image:latest@sha256:<sha256-hash>`) for the current build (or the specified value from additional configuration eg: CLI flags or config from `skaffold.yaml`).  Depending on how a user's `values.yaml` and charts specify `image: $IMAGE_TEMPLATE`, the docs [here]({{< relref "#image-reference-strategies" >}})  explain the proper `setValues` to use.  When migrating from schema version `v2beta29` or less, Skaffold will automatically configure these values to continue to work.
+In the latest version of Skaffold, the primary methods of using `helm` templating with Skaffold involve the `deploy.helm.setValueTemplates` and the `deploy.helm.setValues` fields.  `deploy.helm.setValues` supplies the key:value pair to substitute from a users `values.yaml` file (a standard `helm` file for rendering).  `deploy.helm.setValueTemplates` does a similar thing only the key:value value comes from an environment variable instead of a given value. FDepending on how a user's `values.yaml` and how `charts/templates` specify `image: $IMAGE_TEMPLATE`, the docs [here]({{< relref "#image-reference-strategies" >}})  explain the proper `setValueTemplates` to use.  When migrating from schema version `v2beta29` or less, Skaffold will automatically configure these values to continue to work.
+
+
+`helm` deploy support in Skaffold is accomplished by calling `helm install ...` with the appropriate `--set` flags for the variables Skaffold will inject as well as uses the `skaffold` binary as a `helm` `--post-renderer`.  Using `skaffold` as a post-renderer is done to inject Skaffold specific labels primarily the `run-id` label which Skaffold uses to tag K8s objects it will manage via it's status checking.
 
 
-`helm` deploy support in Skaffold is accomplished by calling `helm install ...` and using the `skaffold` binary as a `helm` `--post-renderer`.  This works by having Skaffold run `helm install ...` taking into consideration all of the supplied flags, skaffold.yaml configuration, etc. and creating an intermediate yaml manifest with all helm replacements except that the fully qualified image from the current run is NOT added but instead a placeholder with the artifact name - eg: `skaffold-helm-image`.  Then the skaffold post-renderer is called to convert `image: skaffold-helm-image` -> `image: gcr.io/example-repo/skaffold-helm-image:latest@sha256:<sha256-hash>` in specified locations (specific allowlisted k8s objects and/or k8s object fields).  This above replacement is nearly identical to how it works for values.yaml files using only the `image` key in `values.yaml` - eg:
+This works by having Skaffold run `helm install ...` taking into consideration all of the supplied flags, skaffold.yaml configuration, etc. and creating an intermediate yaml manifest with all helm replacements except that the fully qualified image from the current run is NOT added but instead a placeholder with the artifact name - eg: `skaffold-helm-image`.  Then the skaffold post-renderer is called to convert `image: skaffold-helm-image` -> `image: gcr.io/example-repo/skaffold-helm-image:latest@sha256:<sha256-hash>` in specified locations (specific allowlisted k8s objects and/or k8s object fields).  This above replacement is nearly identical to how it works for values.yaml files using only the `image` key in `values.yaml` - eg:
 `image: "{{.Values.image}}"`
 
-When using `image.repoistory` + `image.tag` or `image.registry` + `image.repository` + `image.tag` - eg:
+When using `image.repository` + `image.tag` or `image.registry` + `image.repository` + `image.tag` - eg:
 `image: "{{.Values.image.repository}}:{{.Values.image.tag}}"`
 `image: "{{.Values.image.registry}}/{{.Values.image.repository}}:{{.Values.image.tag}}"`
-there is some specialized logic that the skaffold `post-renderer` uses to properly handling these cases.  See the docs [here]({{< relref "#image-reference-strategies" >}}) on the correct way to specify these for Skaffold using `setValues`
+there is some specialized logic that the skaffold `post-renderer` uses to properly handling these cases.  See the docs [here]({{< relref "#image-reference-strategies" >}}) on the correct way to specify these for Skaffold using `setValueTemplates`
+
+{{< alert title="Note" >}}
+Starting in Skaffold `v2.1.0`, Skaffold will output additional `setValueTemplates`
+{{< /alert >}}
 
 ## Image Configuration
 The normal Helm convention for defining image references is through the `values.yaml` file. Often, image information is configured through an `image` stanza in the values file, which might look something like this:
@@ -44,12 +52,16 @@ The normal Helm convention for defining image references is through the `values.
 ```project_root/values.yaml```
 ```yaml
 image:
-  repository: my-image
-  tag: v1.2.0
-  pullPolicy: IfNotPresent
+  repository: gcr.io/my-repo # default repo
+  tag: v1.2.0 # default tag 
+  pullPolicy: IfNotPresent # default PullPolicy
+image2:
+  repository: gcr.io/my-repo-2 # default repo
+  tag: latest # default tag 
+  pullPolicy: IfNotPresent # default PullPolicy
 ```
 
-This image would then be referenced in a templated resource file, maybe like this:
+This images would then be referenced in a templated resource file, maybe like this:
 
 ```project_root/templates/deployment.yaml:```
 ```yaml
@@ -60,6 +72,9 @@ spec:
         - name: {{ .Chart.Name }}
           image: {{ .Values.image.repository }}:{{ .Values.image.tag}}
           imagePullPolicy: {{ .Values.image.pullPolicy }}
+        - name: {{ .Chart.Name }}
+          image: {{ .Values.image2.repository }}:{{ .Values.image2.tag}}
+          imagePullPolicy: {{ .Values.image2.pullPolicy }}
 ```
 
 **IMPORTANT: To get Skaffold to work with Helm, the `image` key must be configured in the skaffold.yaml.**
@@ -69,18 +84,28 @@ Associating the Helm image key allows Skaffold to track the image being built, a
 ```yaml
 build:
   artifacts:
-    - image: my-image # must match in setValues
-    - image: my-image-2 # must match in setValues
+    - image: myFirstImage # must match in setValueTemplates
+    - image: mySecondImage # must match in setValueTemplates
 deploy:
   helm:
     releases:
     - name: my-release
+      setValueTemplates:
+        image.repository: "{{.myFirstImage.IMAGE_REPO}}"
+        image.tag: "{{.myFirstImage.IMAGE_TAG}}"
+        image2.repository: "{{.mySecondImage.IMAGE_REPO}}"
+        image2.tag: "{{.mySecondImage.IMAGE_TAG}}"
       setValues:
-        image: my-image # no tag present!
-        image2: my-image-2 # no tag present!
+        image.pullPolicy: "IfNotPresent"
+        image2.pullPolicy: "IfNotPresent"
 ```
 
-The `setValues` configuration binds a Helm key to the specified value.
+The `setValues` configuration binds a Helm key to the specified value. The `setValueTemplates` configuration binds a Helm key to an environment variable.  Skaffold generates some environment variables for each build artifact (value in build.artifacts\[x\].image).  Currenty these include:
+- `.<artifactName>.IMAGE_FULLY_QUALIFIED` (ex: `{{.myImage.IMAGE_FULLY_QUALIFIED}})` -> `gcr.io/example-repo/skaffold-helm-image:latest@sha256:<sha256-hash>`
+- `.<artifactName>.IMAGE_REPO` (ex:)
+- `.<artifactName>.IMAGE_TAG`
+- `.<artifactName>.IMAGE_DOMAIN`
+- `.<artifactName>.IMAGE_REPO_NO_DOMAIN`
 
 ### Multiple image overrides
 
@@ -104,9 +129,9 @@ deploy:
   helm:
     releases:
     - name: my-release
-      setValues:
-        firstContainerImage: gcr.io/my-project/first-image # no tag present!
-        secondContainerImage: gcr.io/my-project/second-image # no tag present!
+      setValueTemplates:
+        firstContainerImage: "{{.firstContainer.IMAGE_FULLY_QUALIFIED}}"
+        secondContainerImage: "{{.secondContainerImage.IMAGE_FULLY_QUALIFIED}}"
 ```
 
 ### Image reference strategies
@@ -125,16 +150,16 @@ The `skaffold.yaml` setup:
 ```yaml
 build:
   artifacts:
-    - image: my-image  # must match in setValues
-    - image: my-image-2  # must match in setValues
+    - image: myFirstImage  # must match in setValueTemplates
+    - image: mySecondImage  # must match in setValueTemplates
 deploy:
   helm:
     releases:
       - name: my-chart
         chartPath: helm
-        setValues:
-          image: my-image # no tag present!
-          image2: my-image-2 # no tag present!
+        setValueTemplates:
+          image: {{.myFirstImage.IMAGE_FULLY_QUALIFIED}} # no tag present!
+          image2: {{.mySecondImage.IMAGE_FULLY_QUALIFIED}} # no tag present!
 ```
 The `values.yaml` (note that Skaffold overrides this value):
 ```
@@ -165,18 +190,18 @@ The `skaffold.yaml` setup:
 ```yaml
 build:
   artifacts:
-    - image: my-image # must match in setValues
-    - image: my-image-2 # must match in setValues
+    - image: myFirstImage # must match in setValueTemplates
+    - image: mySecondImage # must match in setValueTemplates
 deploy:
   helm:
     releases:
       - name: my-chart
         chartPath: helm
-        setValues:
-          image.repository: my-image
-          image.tag: my-image
-          image2.repository: my-image-2
-          image2.tag: my-image-2
+        setValueTemplates:
+          image.repository: "{{.myFirstImage.IMAGE_REPO}}"
+          image.tag: "{{.myFirstImage.IMAGE_TAG}}"
+          image2.repository: "{{.mySecondImage.IMAGE_REPO}}"
+          image2.tag: "{{.mySecondImage.IMAGE_TAG}}"
 ```
 
 The `values.yaml` (note that Skaffold overrides these values):
@@ -212,20 +237,20 @@ The `skaffold.yaml` setup:
 ```yaml
 build:
   artifacts:
-    - image: my-image # must match in setValues
-    - image: my-image-2 # must match in setValues
+    - image: myFirstImage # must match in setValueTemplates
+    - image: mySecondImage # must match in setValueTemplates
 deploy:
   helm:
     releases:
       - name: my-chart
         chartPath: helm
-        setValues:
-          image.registry: my-image
-          image.repository: my-image
-          image.tag: my-image
-          image2.registry: my-image-2
-          image2.repository: my-image-2
-          image2.tag: my-image-2
+        setValueTemplates:
+          image.registry: "{{.myFirstImage.IMAGE_DOMAIN}}"
+          image.repository: "{{.myFirstImage.IMAGE_REPO_NO_DOMAIN}}"
+          image.tag: "{{.myFirstImage.IMAGE_TAG}}"
+          image2.registry: "{{.mySecondImage.IMAGE_DOMAIN}}"
+          image2.repository: "{{.mySecondImage.IMAGE_REPO_NO_DOMAIN}}"
+          image2.tag: "{{.mySecondImage.IMAGE_TAG}}"
 ```
 
 The `values.yaml` (note that Skaffold overrides these values):
diff --git a/docs-v2/content/en/docs/pipeline-stages/renderers/helm.md b/docs-v2/content/en/docs/pipeline-stages/renderers/helm.md
index 1c35000a2..afabbc447 100644
--- a/docs-v2/content/en/docs/pipeline-stages/renderers/helm.md
+++ b/docs-v2/content/en/docs/pipeline-stages/renderers/helm.md
@@ -19,24 +19,32 @@ To use `helm` with Skaffold, the `helm` binary must be installed on your machine
 Skaffold supports projects set up to render and/or deploy with Helm, but certain aspects of the project need to be configured correctly in order for Skaffold to work properly. This guide should demystify some of the nuance around using Skaffold with Helm to help you get started quickly.
 
 {{< alert title="No more `artifactOverrides` or `imageStrategy`" >}}
-Skaffold no longer requires the intricate configuring of `artifactOverrides` or `imageStrategy` fields. See docs [here]({{< relref "#image-reference-strategies" >}}) on how old `artifactOverrides` and `imageStrategy` values translate to `setValues` entires in the latest Skaffold schemas (`apiVersion: skaffold/v3alpha1` or skaffold binary version `v2.0.0` onwards)
+Skaffold no longer requires the intricate configuring of `artifactOverrides` or `imageStrategy` fields. See docs [here]({{< relref "#image-reference-strategies" >}}) on how old `artifactOverrides` and `imageStrategy` values translate to `setValueTemplates` entries in the latest Skaffold schemas (`apiVersion: skaffold/v3alpha1` or skaffold binary version `v2.0.0` onwards)
 {{< /alert >}}
 
 {{< alert title="Note" >}}
-In Skaffold `v2` the primary difference between the helm renderer (`manifest.helm.*`) and the helm deployer (`deploy.helm.*`) is the use of `helm template` vs `helm install`
+In Skaffold `v2` the primary difference between the helm renderer (`manifest.helm.*`) and the helm deployer (`deploy.helm.*`) is the use of `helm install` vs `helm template`
 {{< /alert >}}
 
+
 ## How `helm` render support works in Skaffold
-In the latest version of Skaffold, the primary methods of using `helm` templating with Skaffold involve the `manifests.helm.setValues` and the `manifests.helm.setValueTemplates` fields.  `manifests.helm.setValues` supplies the key:value pair to substitute from a users `values.yaml` file (a standard `helm` file for rendering).  `manifests.helm.setValueTemplates` does a similar thing only the key:value value comes from an environment variable instead of a given value.  The thing to note here is that when using a value that is the same name as an artifact name, that value will be replaced by the fully qualified artifact name (eg: `image: gcr.io/example-repo/skaffold-helm-image:latest@sha256:<sha256-hash>`) for the current build (or the specified value from additional configuration eg: CLI flags or config from `skaffold.yaml`).  Depending on how a user's `values.yaml` and charts specify `image: $IMAGE_TEMPLATE`, the docs [here]({{< relref "#image-reference-strategies" >}})  explain the proper `setValues` to use.  When migrating from schema version `v2beta29` or less, Skaffold will automatically configure these values to continue to work.
+In the latest version of Skaffold, the primary methods of using `helm` templating with Skaffold involve the `deploy.helm.setValueTemplates` and the `deploy.helm.setValues` fields.  `deploy.helm.setValues` supplies the key:value pair to substitute from a users `values.yaml` file (a standard `helm` file for rendering).  `deploy.helm.setValueTemplates` does a similar thing only the key:value value comes from an environment variable instead of a given value.  Depending on how a user's `values.yaml` and how `charts/templates` specify `image: $IMAGE_TEMPLATE`, the docs [here]({{< relref "#image-reference-strategies" >}})  explain the proper `setValueTemplates` to use.  When migrating from schema version `v2beta29` or less, Skaffold will automatically configure these values to continue to work.
+
+
+`helm` deploy support in Skaffold is accomplished by calling `helm template ...` with the appropriate `--set` flags for the variables Skaffold will inject as well as uses the `skaffold` binary as a `helm` `--post-renderer`.  Using `skaffold` as a post-renderer is done to inject Skaffold specific labels primarily the `run-id` label which Skaffold uses to tag K8s objects it will manage via it's status checking.
 
 
-`helm` render support in Skaffold is accomplished by calling `helm template ...` and using the `skaffold` binary as a `helm` `--post-renderer`.  This works by having Skaffold run `helm template ...` taking into consideration all of the supplied flags, skaffold.yaml configuration, etc. and creating an intermediate yaml manifest with all helm replacements except that the fully qualified image from the current run is NOT added but instead a placeholder with the artifact name - eg: `skaffold-helm-image`.  Then the skaffold post-renderer is called to convert `image: skaffold-helm-image` -> `image: gcr.io/example-repo/skaffold-helm-image:latest@sha256:<sha256-hash>` in specified locations (specific allowlisted k8s objects and/or k8s object fields).  This above replacement is nearly identical to how it works for values.yaml files using only the `image` key in `values.yaml` - eg:
+This works by having Skaffold run `helm template ...` taking into consideration all of the supplied flags, skaffold.yaml configuration, etc. and creating an intermediate yaml manifest with all helm replacements except that the fully qualified image from the current run is NOT added but instead a placeholder with the artifact name - eg: `skaffold-helm-image`.  Then the skaffold post-renderer is called to convert `image: skaffold-helm-image` -> `image: gcr.io/example-repo/skaffold-helm-image:latest@sha256:<sha256-hash>` in specified locations (specific allowlisted k8s objects and/or k8s object fields).  This above replacement is nearly identical to how it works for values.yaml files using only the `image` key in `values.yaml` - eg:
 `image: "{{.Values.image}}"`
 
-When using `image.repoistory` + `image.tag` or `image.registry` + `image.repository` + `image.tag` - eg:
+When using `image.repository` + `image.tag` or `image.registry` + `image.repository` + `image.tag` - eg:
 `image: "{{.Values.image.repository}}:{{.Values.image.tag}}"`
 `image: "{{.Values.image.registry}}/{{.Values.image.repository}}:{{.Values.image.tag}}"`
-there is some specialized logic that the skaffold `post-renderer` uses to properly handling these cases.  See the docs [here]({{< relref "#image-reference-strategies" >}}) on the correct way to specify these for Skaffold using `setValues`
+there is some specialized logic that the skaffold `post-renderer` uses to properly handling these cases.  See the docs [here]({{< relref "#image-reference-strategies" >}}) on the correct way to specify these for Skaffold using `setValueTemplates`
+
+{{< alert title="Note" >}}
+Starting in Skaffold `v2.1.0`, Skaffold will output additional `setValueTemplates`
+{{< /alert >}}
 
 ## Image Configuration
 The normal Helm convention for defining image references is through the `values.yaml` file. Often, image information is configured through an `image` stanza in the values file, which might look something like this:
@@ -44,12 +52,16 @@ The normal Helm convention for defining image references is through the `values.
 ```project_root/values.yaml```
 ```yaml
 image:
-  repository: my-image
-  tag: v1.2.0
-  pullPolicy: IfNotPresent
+  repository: gcr.io/my-repo # default repo
+  tag: v1.2.0 # default tag 
+  pullPolicy: IfNotPresent # default PullPolicy
+image2:
+  repository: gcr.io/my-repo-2 # default repo
+  tag: latest # default tag 
+  pullPolicy: IfNotPresent # default PullPolicy
 ```
 
-This image would then be referenced in a templated resource file, maybe like this:
+This images would then be referenced in a templated resource file, maybe like this:
 
 ```project_root/templates/deployment.yaml:```
 ```yaml
@@ -60,6 +72,9 @@ spec:
         - name: {{ .Chart.Name }}
           image: {{ .Values.image.repository }}:{{ .Values.image.tag}}
           imagePullPolicy: {{ .Values.image.pullPolicy }}
+        - name: {{ .Chart.Name }}
+          image: {{ .Values.image2.repository }}:{{ .Values.image2.tag}}
+          imagePullPolicy: {{ .Values.image2.pullPolicy }}
 ```
 
 **IMPORTANT: To get Skaffold to work with Helm, the `image` key must be configured in the skaffold.yaml.**
@@ -69,18 +84,28 @@ Associating the Helm image key allows Skaffold to track the image being built, a
 ```yaml
 build:
   artifacts:
-    - image: my-image # must match in setValues
-    - image: my-image-2 # must match in setValues
-manifests:
+    - image: myFirstImage # must match in setValueTemplates
+    - image: mySecondImage # must match in setValueTemplates
+deploy:
   helm:
     releases:
     - name: my-release
+      setValueTemplates:
+        image.repository: "{{.myFirstImage.IMAGE_REPO}}"
+        image.tag: "{{.myFirstImage.IMAGE_TAG}}"
+        image2.repository: "{{.mySecondImage.IMAGE_REPO}}"
+        image2.tag: "{{.mySecondImage.IMAGE_TAG}}"
       setValues:
-        image: my-image # no tag present!
-        image2: my-image-2 # no tag present!
+        image.pullPolicy: "IfNotPresent"
+        image2.pullPolicy: "IfNotPresent"
 ```
 
-The `setValues` configuration binds a Helm key to the specified value.
+The `setValues` configuration binds a Helm key to the specified value. The `setValueTemplates` configuration binds a Helm key to an environment variable.  Skaffold generates some environment variables for each build artifact (value in build.artifacts\[x\].image).  Currenty these include:
+- `.<artifactName>.IMAGE_FULLY_QUALIFIED` (ex: `{{.myImage.IMAGE_FULLY_QUALIFIED}})` -> `gcr.io/example-repo/skaffold-helm-image:latest@sha256:<sha256-hash>`
+- `.<artifactName>.IMAGE_REPO` (ex:)
+- `.<artifactName>.IMAGE_TAG`
+- `.<artifactName>.IMAGE_DOMAIN`
+- `.<artifactName>.IMAGE_REPO_NO_DOMAIN`
 
 ### Multiple image overrides
 
@@ -100,13 +125,13 @@ spec:
 can be overriden with:
 
 ```yaml
-manifests:
+deploy:
   helm:
     releases:
     - name: my-release
-      setValues:
-        firstContainerImage: gcr.io/my-project/first-image # no tag present!
-        secondContainerImage: gcr.io/my-project/second-image # no tag present!
+      setValueTemplates:
+        firstContainerImage: "{{.firstContainer.IMAGE_FULLY_QUALIFIED}}"
+        secondContainerImage: "{{.secondContainerImage.IMAGE_FULLY_QUALIFIED}}"
 ```
 
 ### Image reference strategies
@@ -125,16 +150,16 @@ The `skaffold.yaml` setup:
 ```yaml
 build:
   artifacts:
-    - image: my-image  # must match in setValues
-    - image: my-image-2  # must match in setValues
-manifests:
+    - image: myFirstImage  # must match in setValueTemplates
+    - image: mySecondImage  # must match in setValueTemplates
+deploy:
   helm:
     releases:
       - name: my-chart
         chartPath: helm
-        setValues:
-          image: my-image # no tag present!
-          image2: my-image-2 # no tag present!
+        setValueTemplates:
+          image: {{.myFirstImage.IMAGE_FULLY_QUALIFIED}} # no tag present!
+          image2: {{.mySecondImage.IMAGE_FULLY_QUALIFIED}} # no tag present!
 ```
 The `values.yaml` (note that Skaffold overrides this value):
 ```
@@ -165,18 +190,18 @@ The `skaffold.yaml` setup:
 ```yaml
 build:
   artifacts:
-    - image: my-image # must match in setValues
-    - image: my-image-2 # must match in setValues
-manifests:
+    - image: myFirstImage # must match in setValueTemplates
+    - image: mySecondImage # must match in setValueTemplates
+deploy:
   helm:
     releases:
       - name: my-chart
         chartPath: helm
-        setValues:
-          image.repository: my-image
-          image.tag: my-image
-          image2.repository: my-image-2
-          image2.tag: my-image-2
+        setValueTemplates:
+          image.repository: "{{.myFirstImage.IMAGE_REPO}}"
+          image.tag: "{{.myFirstImage.IMAGE_TAG}}"
+          image2.repository: "{{.mySecondImage.IMAGE_REPO}}"
+          image2.tag: "{{.mySecondImage.IMAGE_TAG}}"
 ```
 
 The `values.yaml` (note that Skaffold overrides these values):
@@ -212,20 +237,20 @@ The `skaffold.yaml` setup:
 ```yaml
 build:
   artifacts:
-    - image: my-image # must match in setValues
-    - image: my-image-2 # must match in setValues
-manifests:
+    - image: myFirstImage # must match in setValueTemplates
+    - image: mySecondImage # must match in setValueTemplates
+deploy:
   helm:
     releases:
       - name: my-chart
         chartPath: helm
-        setValues:
-          image.registry: my-image
-          image.repository: my-image
-          image.tag: my-image
-          image2.registry: my-image-2
-          image2.repository: my-image-2
-          image2.tag: my-image-2
+        setValueTemplates:
+          image.registry: "{{.myFirstImage.IMAGE_DOMAIN}}"
+          image.repository: "{{.myFirstImage.IMAGE_REPO_NO_DOMAIN}}"
+          image.tag: "{{.myFirstImage.IMAGE_TAG}}"
+          image2.registry: "{{.mySecondImage.IMAGE_DOMAIN}}"
+          image2.repository: "{{.mySecondImage.IMAGE_REPO_NO_DOMAIN}}"
+          image2.tag: "{{.mySecondImage.IMAGE_TAG}}"
 ```
 
 The `values.yaml` (note that Skaffold overrides these values):
@@ -250,7 +275,7 @@ spec:
 
 Skaffold will invoke
 ```
-helm template <chart> <chart-path> --set-string image.registry=<artifact-name>,image.repository=<artifact-name>,image.tag=<artifact-name>,image2.registry=<artifact-name>,image2.repository=<artifact-name>,image2.tag=<artifact-name> --post-renderer=<path-to-skaffold-binary-from-original-invocation>
+helm template <chart> <chart-path> --set-string image.registry=<artifact-name>,image.repository=<artifact-name>,image.tag=<artifact-name>,image2.registry=<artifact-name>,image2.repository=<artifact-name>,image2.tag=<artifcact-name>  --post-renderer=<path-to-skaffold-binary-from-original-invocation>
 ```
 
 ### Helm Build Dependencies
diff --git a/docs-v2/content/en/docs/tutorials/skaffold-resource-selector.md b/docs-v2/content/en/docs/tutorials/skaffold-resource-selector.md
index 51757f070..57e423c94 100644
--- a/docs-v2/content/en/docs/tutorials/skaffold-resource-selector.md
+++ b/docs-v2/content/en/docs/tutorials/skaffold-resource-selector.md
@@ -12,7 +12,7 @@ Common Use Cases This Page Helps Resolve:
 * Users who are seeing issues with skaffold's default resource field overwriting for a given resource - eg: skaffold errors as it tries to mutate immutable config on re-deployment
 
 Currently skaffold modifies the manifests it renders and deploys for the following functionality:
-- status checking - done by mutating the manifest/K8s-Object by adding a label - skaffold/dev/run-id.  Skaffold uses this run-id to identify ... (TODO add doc link to run-id explanation)
+- status checking - done by mutating the manifest/K8s-Object by adding a label - skaffold/dev/run-id.  Skaffold uses this run-id to identify the deployments Skaffold manages with it's status checking.
 - image label overwriting - done by mutating the manifest/K8s-Object by substituting the `image:$ORIGINAL_IMAGE_TAG` value(s) in a manifest with `image:$RECENT_SKAFFOLD_BUILT_IMAGE`
 
 
@@ -47,7 +47,7 @@ _* *.image (changes `image:` value to be the skaffold built image ONLY IF skaffo
 
 
 The GroupKind's that Skaffold manages (via resource field overwriting) are user configurable via the `resourceSelector:` top level configuration.  The `resourceSelector` configuration allows users to modify and extend which resources and what fields of those resources skaffold modifies.  Currently skaffold only supports `label:` and `.metadata.labels` related modifications.
-(TODO add `resourceSelector` schema overview and allowable inputs)
+
 `resourceSelector` spec (from `pkg/skaffold/schema/latest/config.go`)
 ```
 // ResourceSelector describes user defined filters describing how skaffold should treat objects/fields during rendering.
diff --git a/docs-v2/content/en/schemas/v1.json b/docs-v2/content/en/schemas/v1.json
index ebbad0201..9944007ab 100755
--- a/docs-v2/content/en/schemas/v1.json
+++ b/docs-v2/content/en/schemas/v1.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1alpha1.json b/docs-v2/content/en/schemas/v1alpha1.json
index 0f9fea441..5fbb849d5 100755
--- a/docs-v2/content/en/schemas/v1alpha1.json
+++ b/docs-v2/content/en/schemas/v1alpha1.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1alpha2.json b/docs-v2/content/en/schemas/v1alpha2.json
index b92493a96..19edfa586 100755
--- a/docs-v2/content/en/schemas/v1alpha2.json
+++ b/docs-v2/content/en/schemas/v1alpha2.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs-v2/content/en/schemas/v1alpha3.json b/docs-v2/content/en/schemas/v1alpha3.json
index c1b7dbcf7..41584a00e 100755
--- a/docs-v2/content/en/schemas/v1alpha3.json
+++ b/docs-v2/content/en/schemas/v1alpha3.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs-v2/content/en/schemas/v1alpha4.json b/docs-v2/content/en/schemas/v1alpha4.json
index dac4c3ccd..0410d4665 100755
--- a/docs-v2/content/en/schemas/v1alpha4.json
+++ b/docs-v2/content/en/schemas/v1alpha4.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs-v2/content/en/schemas/v1alpha5.json b/docs-v2/content/en/schemas/v1alpha5.json
index 245109eb9..99ebb8374 100755
--- a/docs-v2/content/en/schemas/v1alpha5.json
+++ b/docs-v2/content/en/schemas/v1alpha5.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs-v2/content/en/schemas/v1beta1.json b/docs-v2/content/en/schemas/v1beta1.json
index 622618453..7a2407555 100755
--- a/docs-v2/content/en/schemas/v1beta1.json
+++ b/docs-v2/content/en/schemas/v1beta1.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs-v2/content/en/schemas/v1beta10.json b/docs-v2/content/en/schemas/v1beta10.json
index 2a20b9ae0..2d65d0ca2 100755
--- a/docs-v2/content/en/schemas/v1beta10.json
+++ b/docs-v2/content/en/schemas/v1beta10.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta11.json b/docs-v2/content/en/schemas/v1beta11.json
index 60576d3e2..aa4822481 100755
--- a/docs-v2/content/en/schemas/v1beta11.json
+++ b/docs-v2/content/en/schemas/v1beta11.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta12.json b/docs-v2/content/en/schemas/v1beta12.json
index 2f9caf439..3337b8d8e 100755
--- a/docs-v2/content/en/schemas/v1beta12.json
+++ b/docs-v2/content/en/schemas/v1beta12.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta13.json b/docs-v2/content/en/schemas/v1beta13.json
index ca5645e18..2b7bb3988 100755
--- a/docs-v2/content/en/schemas/v1beta13.json
+++ b/docs-v2/content/en/schemas/v1beta13.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta14.json b/docs-v2/content/en/schemas/v1beta14.json
index 36b134186..442042ffc 100755
--- a/docs-v2/content/en/schemas/v1beta14.json
+++ b/docs-v2/content/en/schemas/v1beta14.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta15.json b/docs-v2/content/en/schemas/v1beta15.json
index 901a3af95..c519d1f68 100755
--- a/docs-v2/content/en/schemas/v1beta15.json
+++ b/docs-v2/content/en/schemas/v1beta15.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta16.json b/docs-v2/content/en/schemas/v1beta16.json
index a8f852db2..32f211c9c 100755
--- a/docs-v2/content/en/schemas/v1beta16.json
+++ b/docs-v2/content/en/schemas/v1beta16.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta17.json b/docs-v2/content/en/schemas/v1beta17.json
index 27d89a55d..50b50d2d3 100755
--- a/docs-v2/content/en/schemas/v1beta17.json
+++ b/docs-v2/content/en/schemas/v1beta17.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta2.json b/docs-v2/content/en/schemas/v1beta2.json
index b59b39267..1a4e0826a 100755
--- a/docs-v2/content/en/schemas/v1beta2.json
+++ b/docs-v2/content/en/schemas/v1beta2.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs-v2/content/en/schemas/v1beta3.json b/docs-v2/content/en/schemas/v1beta3.json
index 4a2ce2d23..5e78cc3bf 100755
--- a/docs-v2/content/en/schemas/v1beta3.json
+++ b/docs-v2/content/en/schemas/v1beta3.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs-v2/content/en/schemas/v1beta4.json b/docs-v2/content/en/schemas/v1beta4.json
index bddbdb439..acf089346 100755
--- a/docs-v2/content/en/schemas/v1beta4.json
+++ b/docs-v2/content/en/schemas/v1beta4.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta5.json b/docs-v2/content/en/schemas/v1beta5.json
index 1e0a06cb8..447a90447 100755
--- a/docs-v2/content/en/schemas/v1beta5.json
+++ b/docs-v2/content/en/schemas/v1beta5.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta6.json b/docs-v2/content/en/schemas/v1beta6.json
index 686d97918..5a37281ab 100755
--- a/docs-v2/content/en/schemas/v1beta6.json
+++ b/docs-v2/content/en/schemas/v1beta6.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta7.json b/docs-v2/content/en/schemas/v1beta7.json
index a43bdf52d..f26d8f818 100755
--- a/docs-v2/content/en/schemas/v1beta7.json
+++ b/docs-v2/content/en/schemas/v1beta7.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta8.json b/docs-v2/content/en/schemas/v1beta8.json
index 8d6d7acb9..60d0ac0bc 100755
--- a/docs-v2/content/en/schemas/v1beta8.json
+++ b/docs-v2/content/en/schemas/v1beta8.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v1beta9.json b/docs-v2/content/en/schemas/v1beta9.json
index 121af8e0b..125e20cbd 100755
--- a/docs-v2/content/en/schemas/v1beta9.json
+++ b/docs-v2/content/en/schemas/v1beta9.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2alpha1.json b/docs-v2/content/en/schemas/v2alpha1.json
index 46b0f6f41..618f4bb3a 100755
--- a/docs-v2/content/en/schemas/v2alpha1.json
+++ b/docs-v2/content/en/schemas/v2alpha1.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2alpha2.json b/docs-v2/content/en/schemas/v2alpha2.json
index cdeb4216a..12f4615ef 100755
--- a/docs-v2/content/en/schemas/v2alpha2.json
+++ b/docs-v2/content/en/schemas/v2alpha2.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2alpha3.json b/docs-v2/content/en/schemas/v2alpha3.json
index e78661b64..b50b8941c 100755
--- a/docs-v2/content/en/schemas/v2alpha3.json
+++ b/docs-v2/content/en/schemas/v2alpha3.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2alpha4.json b/docs-v2/content/en/schemas/v2alpha4.json
index e78661b64..b50b8941c 100755
--- a/docs-v2/content/en/schemas/v2alpha4.json
+++ b/docs-v2/content/en/schemas/v2alpha4.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta1.json b/docs-v2/content/en/schemas/v2beta1.json
index a363b0067..87bc3010a 100755
--- a/docs-v2/content/en/schemas/v2beta1.json
+++ b/docs-v2/content/en/schemas/v2beta1.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta10.json b/docs-v2/content/en/schemas/v2beta10.json
index 5cb88d65d..8eb56c497 100755
--- a/docs-v2/content/en/schemas/v2beta10.json
+++ b/docs-v2/content/en/schemas/v2beta10.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta11.json b/docs-v2/content/en/schemas/v2beta11.json
index ef941e997..a6a6fb3a1 100755
--- a/docs-v2/content/en/schemas/v2beta11.json
+++ b/docs-v2/content/en/schemas/v2beta11.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta12.json b/docs-v2/content/en/schemas/v2beta12.json
index ab1d946db..a2160d48d 100755
--- a/docs-v2/content/en/schemas/v2beta12.json
+++ b/docs-v2/content/en/schemas/v2beta12.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta13.json b/docs-v2/content/en/schemas/v2beta13.json
index 86e4a41b1..cf206fc93 100755
--- a/docs-v2/content/en/schemas/v2beta13.json
+++ b/docs-v2/content/en/schemas/v2beta13.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta14.json b/docs-v2/content/en/schemas/v2beta14.json
index 4ae552cd9..928397e02 100755
--- a/docs-v2/content/en/schemas/v2beta14.json
+++ b/docs-v2/content/en/schemas/v2beta14.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta15.json b/docs-v2/content/en/schemas/v2beta15.json
index f4f20af5f..3da3f4186 100755
--- a/docs-v2/content/en/schemas/v2beta15.json
+++ b/docs-v2/content/en/schemas/v2beta15.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta16.json b/docs-v2/content/en/schemas/v2beta16.json
index b613e0357..d7d24fde0 100755
--- a/docs-v2/content/en/schemas/v2beta16.json
+++ b/docs-v2/content/en/schemas/v2beta16.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta17.json b/docs-v2/content/en/schemas/v2beta17.json
index 193b8fcf4..bd39aa3d6 100755
--- a/docs-v2/content/en/schemas/v2beta17.json
+++ b/docs-v2/content/en/schemas/v2beta17.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta18.json b/docs-v2/content/en/schemas/v2beta18.json
index 6301fcb73..dab07fc43 100755
--- a/docs-v2/content/en/schemas/v2beta18.json
+++ b/docs-v2/content/en/schemas/v2beta18.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta19.json b/docs-v2/content/en/schemas/v2beta19.json
index 542a4758c..b87d8309c 100755
--- a/docs-v2/content/en/schemas/v2beta19.json
+++ b/docs-v2/content/en/schemas/v2beta19.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta2.json b/docs-v2/content/en/schemas/v2beta2.json
index a363b0067..87bc3010a 100755
--- a/docs-v2/content/en/schemas/v2beta2.json
+++ b/docs-v2/content/en/schemas/v2beta2.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta20.json b/docs-v2/content/en/schemas/v2beta20.json
index 75ccd3267..bd4bec2b4 100755
--- a/docs-v2/content/en/schemas/v2beta20.json
+++ b/docs-v2/content/en/schemas/v2beta20.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta21.json b/docs-v2/content/en/schemas/v2beta21.json
index 73ea3161a..5982e735e 100755
--- a/docs-v2/content/en/schemas/v2beta21.json
+++ b/docs-v2/content/en/schemas/v2beta21.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta22.json b/docs-v2/content/en/schemas/v2beta22.json
index 8c5154a31..c5b13ee73 100755
--- a/docs-v2/content/en/schemas/v2beta22.json
+++ b/docs-v2/content/en/schemas/v2beta22.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta23.json b/docs-v2/content/en/schemas/v2beta23.json
index c2ee4c867..934191a4f 100755
--- a/docs-v2/content/en/schemas/v2beta23.json
+++ b/docs-v2/content/en/schemas/v2beta23.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta24.json b/docs-v2/content/en/schemas/v2beta24.json
index ba6b09f69..486803e58 100755
--- a/docs-v2/content/en/schemas/v2beta24.json
+++ b/docs-v2/content/en/schemas/v2beta24.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta25.json b/docs-v2/content/en/schemas/v2beta25.json
index ead77da54..78d68cd90 100755
--- a/docs-v2/content/en/schemas/v2beta25.json
+++ b/docs-v2/content/en/schemas/v2beta25.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta26.json b/docs-v2/content/en/schemas/v2beta26.json
index 858f9442f..a2c25cc49 100755
--- a/docs-v2/content/en/schemas/v2beta26.json
+++ b/docs-v2/content/en/schemas/v2beta26.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta27.json b/docs-v2/content/en/schemas/v2beta27.json
index 142ee1736..b4912ae3a 100755
--- a/docs-v2/content/en/schemas/v2beta27.json
+++ b/docs-v2/content/en/schemas/v2beta27.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta28.json b/docs-v2/content/en/schemas/v2beta28.json
index 1f3b065f0..91d89277a 100755
--- a/docs-v2/content/en/schemas/v2beta28.json
+++ b/docs-v2/content/en/schemas/v2beta28.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta29.json b/docs-v2/content/en/schemas/v2beta29.json
index 0987a243d..c8511f1ba 100755
--- a/docs-v2/content/en/schemas/v2beta29.json
+++ b/docs-v2/content/en/schemas/v2beta29.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta3.json b/docs-v2/content/en/schemas/v2beta3.json
index 7a4d3940d..0b8cfef15 100755
--- a/docs-v2/content/en/schemas/v2beta3.json
+++ b/docs-v2/content/en/schemas/v2beta3.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta4.json b/docs-v2/content/en/schemas/v2beta4.json
index 089a5542b..87be70ae0 100755
--- a/docs-v2/content/en/schemas/v2beta4.json
+++ b/docs-v2/content/en/schemas/v2beta4.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta5.json b/docs-v2/content/en/schemas/v2beta5.json
index 3b21687be..4923f0081 100755
--- a/docs-v2/content/en/schemas/v2beta5.json
+++ b/docs-v2/content/en/schemas/v2beta5.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta6.json b/docs-v2/content/en/schemas/v2beta6.json
index 4ff879ae3..6a64ea7bc 100755
--- a/docs-v2/content/en/schemas/v2beta6.json
+++ b/docs-v2/content/en/schemas/v2beta6.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta7.json b/docs-v2/content/en/schemas/v2beta7.json
index 318fff010..cd5fc4919 100755
--- a/docs-v2/content/en/schemas/v2beta7.json
+++ b/docs-v2/content/en/schemas/v2beta7.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta8.json b/docs-v2/content/en/schemas/v2beta8.json
index cec36efc7..b1a39168c 100755
--- a/docs-v2/content/en/schemas/v2beta8.json
+++ b/docs-v2/content/en/schemas/v2beta8.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v2beta9.json b/docs-v2/content/en/schemas/v2beta9.json
index fdcfd906e..3f286d0cc 100755
--- a/docs-v2/content/en/schemas/v2beta9.json
+++ b/docs-v2/content/en/schemas/v2beta9.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v3.json b/docs-v2/content/en/schemas/v3.json
index 8906adca7..6b897f887 100755
--- a/docs-v2/content/en/schemas/v3.json
+++ b/docs-v2/content/en/schemas/v3.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v3alpha1.json b/docs-v2/content/en/schemas/v3alpha1.json
index 8906adca7..6b897f887 100755
--- a/docs-v2/content/en/schemas/v3alpha1.json
+++ b/docs-v2/content/en/schemas/v3alpha1.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs-v2/content/en/schemas/v4beta1.json b/docs-v2/content/en/schemas/v4beta1.json
index 926eb860d..d4458277d 100755
--- a/docs-v2/content/en/schemas/v4beta1.json
+++ b/docs-v2/content/en/schemas/v4beta1.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1.json b/docs/content/en/schemas/v1.json
index ebbad0201..9944007ab 100755
--- a/docs/content/en/schemas/v1.json
+++ b/docs/content/en/schemas/v1.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1alpha1.json b/docs/content/en/schemas/v1alpha1.json
index 0f9fea441..5fbb849d5 100755
--- a/docs/content/en/schemas/v1alpha1.json
+++ b/docs/content/en/schemas/v1alpha1.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "properties": {
diff --git a/docs/content/en/schemas/v1alpha2.json b/docs/content/en/schemas/v1alpha2.json
index b92493a96..19edfa586 100755
--- a/docs/content/en/schemas/v1alpha2.json
+++ b/docs/content/en/schemas/v1alpha2.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs/content/en/schemas/v1alpha3.json b/docs/content/en/schemas/v1alpha3.json
index c1b7dbcf7..41584a00e 100755
--- a/docs/content/en/schemas/v1alpha3.json
+++ b/docs/content/en/schemas/v1alpha3.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs/content/en/schemas/v1alpha4.json b/docs/content/en/schemas/v1alpha4.json
index dac4c3ccd..0410d4665 100755
--- a/docs/content/en/schemas/v1alpha4.json
+++ b/docs/content/en/schemas/v1alpha4.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs/content/en/schemas/v1alpha5.json b/docs/content/en/schemas/v1alpha5.json
index 245109eb9..99ebb8374 100755
--- a/docs/content/en/schemas/v1alpha5.json
+++ b/docs/content/en/schemas/v1alpha5.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs/content/en/schemas/v1beta1.json b/docs/content/en/schemas/v1beta1.json
index 622618453..7a2407555 100755
--- a/docs/content/en/schemas/v1beta1.json
+++ b/docs/content/en/schemas/v1beta1.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs/content/en/schemas/v1beta10.json b/docs/content/en/schemas/v1beta10.json
index 2a20b9ae0..2d65d0ca2 100755
--- a/docs/content/en/schemas/v1beta10.json
+++ b/docs/content/en/schemas/v1beta10.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta11.json b/docs/content/en/schemas/v1beta11.json
index 60576d3e2..aa4822481 100755
--- a/docs/content/en/schemas/v1beta11.json
+++ b/docs/content/en/schemas/v1beta11.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta12.json b/docs/content/en/schemas/v1beta12.json
index 2f9caf439..3337b8d8e 100755
--- a/docs/content/en/schemas/v1beta12.json
+++ b/docs/content/en/schemas/v1beta12.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta13.json b/docs/content/en/schemas/v1beta13.json
index ca5645e18..2b7bb3988 100755
--- a/docs/content/en/schemas/v1beta13.json
+++ b/docs/content/en/schemas/v1beta13.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta14.json b/docs/content/en/schemas/v1beta14.json
index 36b134186..442042ffc 100755
--- a/docs/content/en/schemas/v1beta14.json
+++ b/docs/content/en/schemas/v1beta14.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta15.json b/docs/content/en/schemas/v1beta15.json
index 901a3af95..c519d1f68 100755
--- a/docs/content/en/schemas/v1beta15.json
+++ b/docs/content/en/schemas/v1beta15.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta16.json b/docs/content/en/schemas/v1beta16.json
index a8f852db2..32f211c9c 100755
--- a/docs/content/en/schemas/v1beta16.json
+++ b/docs/content/en/schemas/v1beta16.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta17.json b/docs/content/en/schemas/v1beta17.json
index 27d89a55d..50b50d2d3 100755
--- a/docs/content/en/schemas/v1beta17.json
+++ b/docs/content/en/schemas/v1beta17.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta2.json b/docs/content/en/schemas/v1beta2.json
index b59b39267..1a4e0826a 100755
--- a/docs/content/en/schemas/v1beta2.json
+++ b/docs/content/en/schemas/v1beta2.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs/content/en/schemas/v1beta3.json b/docs/content/en/schemas/v1beta3.json
index 4a2ce2d23..5e78cc3bf 100755
--- a/docs/content/en/schemas/v1beta3.json
+++ b/docs/content/en/schemas/v1beta3.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Artifact": {
       "type": "object",
diff --git a/docs/content/en/schemas/v1beta4.json b/docs/content/en/schemas/v1beta4.json
index bddbdb439..acf089346 100755
--- a/docs/content/en/schemas/v1beta4.json
+++ b/docs/content/en/schemas/v1beta4.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta5.json b/docs/content/en/schemas/v1beta5.json
index 1e0a06cb8..447a90447 100755
--- a/docs/content/en/schemas/v1beta5.json
+++ b/docs/content/en/schemas/v1beta5.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta6.json b/docs/content/en/schemas/v1beta6.json
index 686d97918..5a37281ab 100755
--- a/docs/content/en/schemas/v1beta6.json
+++ b/docs/content/en/schemas/v1beta6.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta7.json b/docs/content/en/schemas/v1beta7.json
index a43bdf52d..f26d8f818 100755
--- a/docs/content/en/schemas/v1beta7.json
+++ b/docs/content/en/schemas/v1beta7.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta8.json b/docs/content/en/schemas/v1beta8.json
index 8d6d7acb9..60d0ac0bc 100755
--- a/docs/content/en/schemas/v1beta8.json
+++ b/docs/content/en/schemas/v1beta8.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v1beta9.json b/docs/content/en/schemas/v1beta9.json
index 121af8e0b..125e20cbd 100755
--- a/docs/content/en/schemas/v1beta9.json
+++ b/docs/content/en/schemas/v1beta9.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2alpha1.json b/docs/content/en/schemas/v2alpha1.json
index 46b0f6f41..618f4bb3a 100755
--- a/docs/content/en/schemas/v2alpha1.json
+++ b/docs/content/en/schemas/v2alpha1.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2alpha2.json b/docs/content/en/schemas/v2alpha2.json
index cdeb4216a..12f4615ef 100755
--- a/docs/content/en/schemas/v2alpha2.json
+++ b/docs/content/en/schemas/v2alpha2.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2alpha3.json b/docs/content/en/schemas/v2alpha3.json
index e78661b64..b50b8941c 100755
--- a/docs/content/en/schemas/v2alpha3.json
+++ b/docs/content/en/schemas/v2alpha3.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2alpha4.json b/docs/content/en/schemas/v2alpha4.json
index e78661b64..b50b8941c 100755
--- a/docs/content/en/schemas/v2alpha4.json
+++ b/docs/content/en/schemas/v2alpha4.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta1.json b/docs/content/en/schemas/v2beta1.json
index a363b0067..87bc3010a 100755
--- a/docs/content/en/schemas/v2beta1.json
+++ b/docs/content/en/schemas/v2beta1.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta10.json b/docs/content/en/schemas/v2beta10.json
index 5cb88d65d..8eb56c497 100755
--- a/docs/content/en/schemas/v2beta10.json
+++ b/docs/content/en/schemas/v2beta10.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta11.json b/docs/content/en/schemas/v2beta11.json
index ef941e997..a6a6fb3a1 100755
--- a/docs/content/en/schemas/v2beta11.json
+++ b/docs/content/en/schemas/v2beta11.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta12.json b/docs/content/en/schemas/v2beta12.json
index ab1d946db..a2160d48d 100755
--- a/docs/content/en/schemas/v2beta12.json
+++ b/docs/content/en/schemas/v2beta12.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta13.json b/docs/content/en/schemas/v2beta13.json
index 86e4a41b1..cf206fc93 100755
--- a/docs/content/en/schemas/v2beta13.json
+++ b/docs/content/en/schemas/v2beta13.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta14.json b/docs/content/en/schemas/v2beta14.json
index 4ae552cd9..928397e02 100755
--- a/docs/content/en/schemas/v2beta14.json
+++ b/docs/content/en/schemas/v2beta14.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta15.json b/docs/content/en/schemas/v2beta15.json
index f4f20af5f..3da3f4186 100755
--- a/docs/content/en/schemas/v2beta15.json
+++ b/docs/content/en/schemas/v2beta15.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta16.json b/docs/content/en/schemas/v2beta16.json
index b613e0357..d7d24fde0 100755
--- a/docs/content/en/schemas/v2beta16.json
+++ b/docs/content/en/schemas/v2beta16.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta17.json b/docs/content/en/schemas/v2beta17.json
index 193b8fcf4..bd39aa3d6 100755
--- a/docs/content/en/schemas/v2beta17.json
+++ b/docs/content/en/schemas/v2beta17.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta18.json b/docs/content/en/schemas/v2beta18.json
index 6301fcb73..dab07fc43 100755
--- a/docs/content/en/schemas/v2beta18.json
+++ b/docs/content/en/schemas/v2beta18.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta19.json b/docs/content/en/schemas/v2beta19.json
index 542a4758c..b87d8309c 100755
--- a/docs/content/en/schemas/v2beta19.json
+++ b/docs/content/en/schemas/v2beta19.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta2.json b/docs/content/en/schemas/v2beta2.json
index a363b0067..87bc3010a 100755
--- a/docs/content/en/schemas/v2beta2.json
+++ b/docs/content/en/schemas/v2beta2.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta20.json b/docs/content/en/schemas/v2beta20.json
index 75ccd3267..bd4bec2b4 100755
--- a/docs/content/en/schemas/v2beta20.json
+++ b/docs/content/en/schemas/v2beta20.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta21.json b/docs/content/en/schemas/v2beta21.json
index 73ea3161a..5982e735e 100755
--- a/docs/content/en/schemas/v2beta21.json
+++ b/docs/content/en/schemas/v2beta21.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta22.json b/docs/content/en/schemas/v2beta22.json
index 8c5154a31..c5b13ee73 100755
--- a/docs/content/en/schemas/v2beta22.json
+++ b/docs/content/en/schemas/v2beta22.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta23.json b/docs/content/en/schemas/v2beta23.json
index c2ee4c867..934191a4f 100755
--- a/docs/content/en/schemas/v2beta23.json
+++ b/docs/content/en/schemas/v2beta23.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta24.json b/docs/content/en/schemas/v2beta24.json
index ba6b09f69..486803e58 100755
--- a/docs/content/en/schemas/v2beta24.json
+++ b/docs/content/en/schemas/v2beta24.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta25.json b/docs/content/en/schemas/v2beta25.json
index ead77da54..78d68cd90 100755
--- a/docs/content/en/schemas/v2beta25.json
+++ b/docs/content/en/schemas/v2beta25.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta26.json b/docs/content/en/schemas/v2beta26.json
index 858f9442f..a2c25cc49 100755
--- a/docs/content/en/schemas/v2beta26.json
+++ b/docs/content/en/schemas/v2beta26.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta27.json b/docs/content/en/schemas/v2beta27.json
index 142ee1736..b4912ae3a 100755
--- a/docs/content/en/schemas/v2beta27.json
+++ b/docs/content/en/schemas/v2beta27.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta28.json b/docs/content/en/schemas/v2beta28.json
index 1f3b065f0..91d89277a 100755
--- a/docs/content/en/schemas/v2beta28.json
+++ b/docs/content/en/schemas/v2beta28.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta29.json b/docs/content/en/schemas/v2beta29.json
index 0987a243d..c8511f1ba 100755
--- a/docs/content/en/schemas/v2beta29.json
+++ b/docs/content/en/schemas/v2beta29.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta3.json b/docs/content/en/schemas/v2beta3.json
index 7a4d3940d..0b8cfef15 100755
--- a/docs/content/en/schemas/v2beta3.json
+++ b/docs/content/en/schemas/v2beta3.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta4.json b/docs/content/en/schemas/v2beta4.json
index 089a5542b..87be70ae0 100755
--- a/docs/content/en/schemas/v2beta4.json
+++ b/docs/content/en/schemas/v2beta4.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta5.json b/docs/content/en/schemas/v2beta5.json
index 3b21687be..4923f0081 100755
--- a/docs/content/en/schemas/v2beta5.json
+++ b/docs/content/en/schemas/v2beta5.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta6.json b/docs/content/en/schemas/v2beta6.json
index 4ff879ae3..6a64ea7bc 100755
--- a/docs/content/en/schemas/v2beta6.json
+++ b/docs/content/en/schemas/v2beta6.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta7.json b/docs/content/en/schemas/v2beta7.json
index 318fff010..cd5fc4919 100755
--- a/docs/content/en/schemas/v2beta7.json
+++ b/docs/content/en/schemas/v2beta7.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta8.json b/docs/content/en/schemas/v2beta8.json
index cec36efc7..b1a39168c 100755
--- a/docs/content/en/schemas/v2beta8.json
+++ b/docs/content/en/schemas/v2beta8.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/docs/content/en/schemas/v2beta9.json b/docs/content/en/schemas/v2beta9.json
index fdcfd906e..3f286d0cc 100755
--- a/docs/content/en/schemas/v2beta9.json
+++ b/docs/content/en/schemas/v2beta9.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/SkaffoldConfig"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "Activation": {
       "properties": {
diff --git a/examples/bazel/.bazelrc b/examples/bazel/.bazelrc
deleted file mode 100644
index 680549907..000000000
--- a/examples/bazel/.bazelrc
+++ /dev/null
@@ -1,8 +0,0 @@
-# The following flags are set to test use of new features for python toolchains
-# These flags will only work with Bazel 0.25.0 or above.
-build --incompatible_use_python_toolchains
-build --host_force_python=PY2
-test --incompatible_use_python_toolchains
-test --host_force_python=PY2
-run --incompatible_use_python_toolchains
-run --host_force_python=PY2
diff --git a/examples/bazel/WORKSPACE b/examples/bazel/WORKSPACE
index 5637093ed..3b5a76e11 100644
--- a/examples/bazel/WORKSPACE
+++ b/examples/bazel/WORKSPACE
@@ -4,9 +4,8 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
 http_archive(
     name = "io_bazel_rules_docker",
-    sha256 = "4521794f0fba2e20f3bf15846ab5e01d5332e587e9ce81629c7f96c793bb7036",
-    strip_prefix = "rules_docker-0.14.4",
-    urls = ["https://github.com/bazelbuild/rules_docker/releases/download/v0.14.4/rules_docker-v0.14.4.tar.gz"],
+    sha256 = "b1e80761a8a8243d03ebca8845e9cc1ba6c82ce7c5179ce2b295cd36f7e394bf",
+    urls = ["https://github.com/bazelbuild/rules_docker/releases/download/v0.25.0/rules_docker-v0.25.0.tar.gz"],
 )
 
 http_archive(
@@ -18,9 +17,10 @@ http_archive(
     ],
 )
 
-load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains")
+load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
 
 go_rules_dependencies()
+
 go_register_toolchains(
     go_version = "1.14.4",
 )
@@ -39,13 +39,9 @@ load(
 
 container_deps()
 
-load("@io_bazel_rules_docker//repositories:pip_repositories.bzl", "pip_deps")
-
-pip_deps()
-
 load(
     "@io_bazel_rules_docker//go:image.bzl",
     _go_image_repos = "repositories",
 )
 
-_go_image_repos()
\ No newline at end of file
+_go_image_repos()
diff --git a/hack/schemas/main.go b/hack/schemas/main.go
index 2e369af0b..98ffbf688 100644
--- a/hack/schemas/main.go
+++ b/hack/schemas/main.go
@@ -37,7 +37,7 @@ import (
 )
 
 const (
-	version7  = "http://json-schema-org/draft-07/schema#"
+	version7  = "http://json-schema.org/draft-07/schema#"
 	defPrefix = "#/definitions/"
 )
 
diff --git a/integration/examples/bazel/.bazelrc b/integration/examples/bazel/.bazelrc
deleted file mode 100644
index 680549907..000000000
--- a/integration/examples/bazel/.bazelrc
+++ /dev/null
@@ -1,8 +0,0 @@
-# The following flags are set to test use of new features for python toolchains
-# These flags will only work with Bazel 0.25.0 or above.
-build --incompatible_use_python_toolchains
-build --host_force_python=PY2
-test --incompatible_use_python_toolchains
-test --host_force_python=PY2
-run --incompatible_use_python_toolchains
-run --host_force_python=PY2
diff --git a/integration/examples/bazel/WORKSPACE b/integration/examples/bazel/WORKSPACE
index 5637093ed..3b5a76e11 100644
--- a/integration/examples/bazel/WORKSPACE
+++ b/integration/examples/bazel/WORKSPACE
@@ -4,9 +4,8 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
 http_archive(
     name = "io_bazel_rules_docker",
-    sha256 = "4521794f0fba2e20f3bf15846ab5e01d5332e587e9ce81629c7f96c793bb7036",
-    strip_prefix = "rules_docker-0.14.4",
-    urls = ["https://github.com/bazelbuild/rules_docker/releases/download/v0.14.4/rules_docker-v0.14.4.tar.gz"],
+    sha256 = "b1e80761a8a8243d03ebca8845e9cc1ba6c82ce7c5179ce2b295cd36f7e394bf",
+    urls = ["https://github.com/bazelbuild/rules_docker/releases/download/v0.25.0/rules_docker-v0.25.0.tar.gz"],
 )
 
 http_archive(
@@ -18,9 +17,10 @@ http_archive(
     ],
 )
 
-load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains")
+load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
 
 go_rules_dependencies()
+
 go_register_toolchains(
     go_version = "1.14.4",
 )
@@ -39,13 +39,9 @@ load(
 
 container_deps()
 
-load("@io_bazel_rules_docker//repositories:pip_repositories.bzl", "pip_deps")
-
-pip_deps()
-
 load(
     "@io_bazel_rules_docker//go:image.bzl",
     _go_image_repos = "repositories",
 )
 
-_go_image_repos()
\ No newline at end of file
+_go_image_repos()
diff --git a/pkg/skaffold/deploy/util/util.go b/pkg/skaffold/deploy/util/util.go
index d55ee9db6..b69636154 100644
--- a/pkg/skaffold/deploy/util/util.go
+++ b/pkg/skaffold/deploy/util/util.go
@@ -18,7 +18,6 @@ package util
 
 import (
 	"context"
-	"errors"
 	"fmt"
 	"io"
 	"os"
@@ -38,7 +37,6 @@ import (
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/kubernetes"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/kubernetes/manifest"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/output/log"
-	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util/stringset"
 )
 
@@ -106,10 +104,15 @@ func ConsolidateNamespaces(original, new []string) []string {
 }
 
 // GetHydrationDir points to the directory where the manifest rendering happens. By default, it is set to "<WORKDIR>/.kpt-pipeline".
-func GetHydrationDir(opts config.SkaffoldOptions, workingDir string, promptIfNeeded bool) (string, error) {
+func GetHydrationDir(opts config.SkaffoldOptions, workingDir string, promptIfNeeded bool, isKptRendererOrDeployerUsed bool) (string, error) {
 	var hydratedDir string
 	var err error
 
+	if !isKptRendererOrDeployerUsed {
+		log.Entry(context.TODO()).Info("no kpt renderer or deployer found, skipping hydrated-dir creation")
+		return "", nil
+	}
+
 	if opts.HydrationDir == constants.DefaultHydrationDir {
 		hydratedDir = filepath.Join(workingDir, constants.DefaultHydrationDir)
 		promptIfNeeded = false
@@ -164,37 +167,6 @@ func GroupVersionResource(disco discovery.DiscoveryInterface, gvk schema.GroupVe
 	return false, schema.GroupVersionResource{}, fmt.Errorf("could not find resource for %s", gvk.String())
 }
 
-func GetManifestsFromHydrationDir(ctx context.Context, opts config.SkaffoldOptions) (manifest.ManifestList, error) {
-	workDir, err := util.RealWorkDir()
-	if err != nil {
-		return nil, fmt.Errorf("getting working directory: %w", err)
-	}
-	hydrationDir, err := GetHydrationDir(config.SkaffoldOptions{HydrationDir: opts.HydrationDir, AssumeYes: opts.AssumeYes},
-		workDir,
-		true)
-	if err != nil {
-		return nil, fmt.Errorf("getting render output path: %w", err)
-	}
-	// TODO(aaron-prindle) verify that using manifests.yaml here will work in all cases
-	hydratedManifestPath := filepath.Join(hydrationDir, "manifests.yaml")
-	if _, err := os.Stat(hydratedManifestPath); errors.Is(err, os.ErrNotExist) {
-		log.Entry(ctx).Warn(fmt.Errorf("unable to find manifests, attempted location %s: %w", hydratedManifestPath, err))
-		return nil, nil
-	}
-
-	f, err := os.Open(hydratedManifestPath)
-	if err != nil {
-		return nil, fmt.Errorf("opening hydrated manifest at %s: %w", hydratedManifestPath, err)
-	}
-	defer f.Close()
-
-	manifests, err := manifest.Load(f)
-	if err != nil {
-		return nil, fmt.Errorf("parsing manifests file into manifest list object: %w", err)
-	}
-	return manifests, nil
-}
-
 func GetManifestsFromHydratedManifests(ctx context.Context, hydratedManifests []string) (manifest.ManifestList, error) {
 	var manifests manifest.ManifestList
 	for _, path := range hydratedManifests {
diff --git a/pkg/skaffold/helm/args.go b/pkg/skaffold/helm/args.go
index 46ce47267..2c05e967a 100644
--- a/pkg/skaffold/helm/args.go
+++ b/pkg/skaffold/helm/args.go
@@ -52,13 +52,17 @@ func ConstructOverrideArgs(r *latest.HelmRelease, builds []graph.Artifact, args
 
 	envMap := map[string]string{}
 	for idx, b := range builds {
-		suffix := ""
+		idxSuffix := ""
+		// replace commonly used image name chars that are illegal helm template chars "/" & "-" with "_"
+		namePrefix := strings.ReplaceAll(strings.ReplaceAll(b.ImageName, "-", "_"), "/", "_")
+
 		if idx > 0 {
-			suffix = strconv.Itoa(idx + 1)
+			idxSuffix = strconv.Itoa(idx + 1)
 		}
 
 		for k, v := range envVarForImage(b.ImageName, b.Tag) {
-			envMap[k+suffix] = v
+			envMap[k+idxSuffix] = v
+			envMap["."+namePrefix+"."+k] = v
 		}
 	}
 	log.Entry(context.TODO()).Debugf("EnvVarMap: %+v\n", envMap)
@@ -131,8 +135,9 @@ func envVarForImage(imageName string, digest string) map[string]string {
 		customMap["DIGEST_HEX"] = digest
 	}
 
-	// IMAGE_DOMAIN and IMAGE_REPO_NO_DOMAIN added for v2beta* 'helm+explicitRegistry' -> v3alpha* compatibility
+	// IMAGE_DOMAIN and IMAGE_REPO_NO_DOMAIN added for v2beta* 'helm+explicitRegistry' -> v3alpha* and beyond compatibility
 	customMap["IMAGE_DOMAIN"] = ref.Domain
 	customMap["IMAGE_REPO_NO_DOMAIN"] = strings.TrimPrefix(ref.BaseName, ref.Domain+"/")
+	customMap["IMAGE_FULLY_QUALIFIED"] = digest
 	return customMap
 }
diff --git a/pkg/skaffold/runner/new.go b/pkg/skaffold/runner/new.go
index 274c50820..1d4d77a50 100644
--- a/pkg/skaffold/runner/new.go
+++ b/pkg/skaffold/runner/new.go
@@ -74,7 +74,7 @@ func NewForConfig(ctx context.Context, runCtx *runcontext.RunContext) (*Skaffold
 
 	var deployer deploy.Deployer
 
-	hydrationDir, err := util.GetHydrationDir(runCtx.Opts, runCtx.WorkingDir, true)
+	hydrationDir, err := util.GetHydrationDir(runCtx.Opts, runCtx.WorkingDir, true, isKptRendererOrDeployerUsed(runCtx.Pipelines))
 
 	if err != nil {
 		return nil, fmt.Errorf("getting render output path: %w", err)
@@ -253,3 +253,21 @@ func getTester(ctx context.Context, cfg test.Config, isLocalImage func(imageName
 
 	return tester, nil
 }
+
+func isKptRendererOrDeployerUsed(pipelines runcontext.Pipelines) bool {
+	for _, configName := range pipelines.AllOrderedConfigNames() {
+		pipeline := pipelines.GetForConfigName(configName)
+		renderConfig := pipeline.Render
+		deployConfig := pipeline.Deploy
+
+		if renderConfig.Validate != nil || renderConfig.Transform != nil || renderConfig.Kpt != nil {
+			return true
+		}
+
+		if deployConfig.KptDeploy != nil {
+			return true
+		}
+	}
+
+	return false
+}
diff --git a/pkg/skaffold/runner/runcontext/context.go b/pkg/skaffold/runner/runcontext/context.go
index a2d3a55a6..4eab76015 100644
--- a/pkg/skaffold/runner/runcontext/context.go
+++ b/pkg/skaffold/runner/runcontext/context.go
@@ -261,6 +261,18 @@ func (rc *RunContext) GetNamespace() string {
 	if rc.Opts.Namespace != "" {
 		return rc.Opts.Namespace
 	}
+	var defaultNamespace string
+	for _, p := range rc.GetPipelines() {
+		if p.Deploy.KubectlDeploy != nil && p.Deploy.KubectlDeploy.DefaultNamespace != nil {
+			if defaultNamespace != "" {
+				log.Entry(context.TODO()).Warn("multiple deploy.kubectl.defaultNamespace values set, only last pipeline's value will be used")
+			}
+			defaultNamespace = *p.Deploy.KubectlDeploy.DefaultNamespace
+		}
+	}
+	if defaultNamespace != "" {
+		return defaultNamespace
+	}
 	b, err := (&util.Commander{}).RunCmdOut(context.Background(), exec.Command("kubectl", "config", "view", "--minify", "-o", "jsonpath='{..namespace}'"))
 	if err != nil {
 		return rc.Opts.Namespace
diff --git a/pkg/skaffold/schema/profiles.go b/pkg/skaffold/schema/profiles.go
index c3407677b..e42ac6aa3 100644
--- a/pkg/skaffold/schema/profiles.go
+++ b/pkg/skaffold/schema/profiles.go
@@ -275,7 +275,6 @@ func applyProfile(config *latest.SkaffoldConfig, fieldsOverrodeByProfile map[str
 		return err
 	}
 
-	var patches []yamlpatch.Operation
 	for i, patch := range profile.Patches {
 		// Default patch operation to `replace`
 		op := patch.Op
@@ -295,11 +294,12 @@ func applyProfile(config *latest.SkaffoldConfig, fieldsOverrodeByProfile map[str
 			Value: value,
 		}
 
-		if !tryPatch(patch, buf) {
+		updated, valid := tryPatch(patch, buf)
+		buf = updated
+		if !valid {
 			return fmt.Errorf("invalid path: %s", patch.Path)
 		}
 
-		patches = append(patches, patch)
 		// TODO(aaron-prindle) we can ignore - op:'remove' - patch profiles as there is no corresponding schema object for them (it is removed already)
 		yamlOverrideInfo := configlocations.YAMLOverrideInfo{
 			ProfileName:    profile.Name,
@@ -314,7 +314,6 @@ func applyProfile(config *latest.SkaffoldConfig, fieldsOverrodeByProfile map[str
 		}
 	}
 
-	buf, err = yamlpatch.Patch(patches).Apply(buf)
 	if err != nil {
 		return err
 	}
@@ -326,15 +325,15 @@ func applyProfile(config *latest.SkaffoldConfig, fieldsOverrodeByProfile map[str
 // tryPatch is here to verify patches one by one before we
 // apply them because yamlpatch.Patch is known to panic when a path
 // is not valid.
-func tryPatch(patch yamlpatch.Operation, buf []byte) (valid bool) {
+func tryPatch(patch yamlpatch.Operation, buf []byte) (patched []byte, valid bool) {
 	defer func() {
 		if errPanic := recover(); errPanic != nil {
 			valid = false
 		}
 	}()
 
-	_, err := yamlpatch.Patch([]yamlpatch.Operation{patch}).Apply(buf)
-	return err == nil
+	updated, err := yamlpatch.Patch([]yamlpatch.Operation{patch}).Apply(buf)
+	return updated, err == nil
 }
 
 func profilesByName(profiles []latest.Profile) map[string]latest.Profile {
diff --git a/pkg/skaffold/schema/util/util.go b/pkg/skaffold/schema/util/util.go
index 765478876..153733670 100644
--- a/pkg/skaffold/schema/util/util.go
+++ b/pkg/skaffold/schema/util/util.go
@@ -92,45 +92,34 @@ func (m *FlatMap) UnmarshalYAML(unmarshal func(interface{}) error) error {
 		return err
 	}
 	result := make(map[string]string)
-	if err := buildFlatMap(obj, result, ""); err != nil {
-		return err
-	}
+	buildFlatMap(obj, result, "")
 	*m = result
 	return nil
 }
 
-func buildFlatMap(obj map[string]interface{}, result map[string]string, currK string) (err error) {
-	var prevK string
-	for k, v := range obj {
-		prevK = currK
-		if currK == "" {
-			currK = fmt.Sprintf("%v", k)
-		} else {
-			currK = fmt.Sprintf("%v.%v", currK, k)
-		}
+func buildFlatList(list []interface{}, result map[string]string, parentK string) {
+	for idx, item := range list {
+		currK := fmt.Sprintf("%v[%d]", parentK, idx)
+		processItem(item, result, currK)
+	}
+}
 
-		switch v := v.(type) {
-		case map[string]interface{}:
-			if err = buildFlatMap(v, result, currK); err != nil {
-				return
-			}
-		case []interface{}:
-			for idx, i := range v {
-				if m, ok := i.(map[string]interface{}); ok {
-					currIdx := fmt.Sprintf("%v[%d]", currK, idx)
-					if err = buildFlatMap(m, result, currIdx); err != nil {
-						return
-					}
-				}
-			}
-		case string:
-			result[currK] = v
-		default:
-			result[currK] = fmt.Sprintf("%v", v)
-		}
-		currK = prevK
+func buildFlatMap(obj map[string]interface{}, result map[string]string, parentK string) {
+	for key, item := range obj {
+		currK := fmt.Sprintf("%v%v", parentK, key)
+		processItem(item, result, currK)
+	}
+}
+
+func processItem(item interface{}, result map[string]string, currK string) {
+	switch v := item.(type) {
+	case map[string]interface{}:
+		buildFlatMap(v, result, fmt.Sprintf("%v.", currK))
+	case []interface{}:
+		buildFlatList(v, result, currK)
+	default:
+		result[currK] = fmt.Sprintf("%v", v)
 	}
-	return err
 }
 
 func marshalInlineYaml(in interface{}) ([]byte, error) {
diff --git a/pkg/skaffold/schema/v2beta29/upgrade.go b/pkg/skaffold/schema/v2beta29/upgrade.go
index 02c06b303..1df297a2a 100644
--- a/pkg/skaffold/schema/v2beta29/upgrade.go
+++ b/pkg/skaffold/schema/v2beta29/upgrade.go
@@ -19,6 +19,7 @@ package v2beta29
 import (
 	"context"
 	"encoding/json"
+	"fmt"
 	"strings"
 
 	"github.com/pkg/errors"
@@ -118,16 +119,30 @@ func upgradeOnePipeline(oldPipeline, newPipeline interface{}) error {
 			if oldPL.Deploy.HelmDeploy.Releases[i].ImageStrategy.HelmConventionConfig != nil {
 				// is 'helm' imageStrategy
 				for k, v := range aos {
-					svs[k+".repository"] = v
-					svs[k+".tag"] = v
+					if svts == nil {
+						svts = map[string]string{}
+					}
+
+					// replace commonly used image name chars that are illegal helm template chars "/" & "-" with "_"
+					validV := strings.ReplaceAll(strings.ReplaceAll(v, "-", "_"), "/", "_")
+
+					svts[k+".tag"] = fmt.Sprintf("{{.%s.IMAGE_TAG_}}@{{.%s.IMAGE_DIGEST}}", validV, validV)
+					svts[k+".repository"] = fmt.Sprintf("{{.%s.IMAGE_REPO}}", validV)
 					if oldPL.Deploy.HelmDeploy.Releases[i].ImageStrategy.HelmConventionConfig.ExplicitRegistry {
-						svs[k+".registry"] = v
+						// is 'helm' imageStrategy + explicitRegistry
+						svts[k+".registry"] = fmt.Sprintf("{{.%s.IMAGE_DOMAIN_}}", validV)
+						svts[k+".repository"] = fmt.Sprintf("{{.%s.IMAGE_REPO_NO_DOMAIN}}", validV)
 					}
 				}
 			} else {
 				// is 'fqn' imageStrategy
 				for k, v := range aos {
-					svs[k] = v
+					if svts == nil {
+						svts = map[string]string{}
+					}
+					// replace commonly used image name chars that are illegal helm template chars "/" & "-" with "_"
+					validV := strings.ReplaceAll(strings.ReplaceAll(v, "-", "_"), "/", "_")
+					svts[k] = fmt.Sprintf("{{.%s.IMAGE_FULLY_QUALIFIED}}", validV)
 				}
 			}
 			newPL.Render.Helm.Releases[i].SetValues = svs


Test patch:
diff --git a/.github/workflows/unit-tests-darwin.yml b/.github/workflows/unit-tests-darwin.yml
index 86bd7f243..c19771bdf 100644
--- a/.github/workflows/unit-tests-darwin.yml
+++ b/.github/workflows/unit-tests-darwin.yml
@@ -42,7 +42,7 @@ jobs:
         restore-keys: |
           ${{ runner.os }}-go-
 
-    # Skip integration tests for `docs`-only changes (only works for PR-based dev workflows like Skaffold's).
+    # Skip tests for `docs`-only changes (only works for PR-based dev workflows like Skaffold's).
     # NOTE: grep output is stored in env var with `|| true` as the run command cannot fail or action will fail
     - name: Check if only docs changes were made in this PR
       run: |
@@ -54,7 +54,7 @@ jobs:
     - name: Run unit tests
       if: ${{ env.NON_DOCS_FILES_CHANGED != 0 }}
       run: |
-        make coverage
+        make unit-tests
 
     - name: Run diagnostics tests
       if: ${{ env.NON_DOCS_FILES_CHANGED != 0 }}
diff --git a/.github/workflows/linters-checks-and-unit-tests-linux.yml b/.github/workflows/unit-tests-linux.yml
similarity index 77%
rename from .github/workflows/linters-checks-and-unit-tests-linux.yml
rename to .github/workflows/unit-tests-linux.yml
index 6255115df..a88ec746f 100644
--- a/.github/workflows/linters-checks-and-unit-tests-linux.yml
+++ b/.github/workflows/unit-tests-linux.yml
@@ -1,4 +1,4 @@
-name: PR linters, checks, and unit tests (linux)
+name: unit tests (linux)
 
 # Triggers the workflow on push or pull request events
 on: [push, pull_request]
@@ -10,9 +10,8 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
-
   build:
-    name: PR linters, checks, and unit tests (linux)
+    name: unit tests (linux)
     runs-on: ubuntu-latest
     steps:
     - name: Set up Go
@@ -26,15 +25,7 @@ jobs:
       with:
         fetch-depth: 0
 
-    - name: Run make linters
-      run: |
-        make linters
-
-    - name: Run make checks
-      run: |
-        make checks
-
-    # Skip integration tests for `docs`-only changes (only works for PR-based dev workflows like Skaffold's).
+    # Skip tests for `docs`-only changes (only works for PR-based dev workflows like Skaffold's).
     # NOTE: grep output is stored in env var with `|| true` as the run command cannot fail or action will fail
     - name: Check if only docs changes were made in this PR
       run: |
@@ -51,4 +42,4 @@ jobs:
     - name: Run diagnostics tests
       if: ${{ env.NON_DOCS_FILES_CHANGED != 0 }}
       run: |
-        make coverage
+        make -f Makefile.diag coverage
diff --git a/hack/schemas/testdata/inline-anyof/output.json b/hack/schemas/testdata/inline-anyof/output.json
index baaf9dd67..7869590c2 100644
--- a/hack/schemas/testdata/inline-anyof/output.json
+++ b/hack/schemas/testdata/inline-anyof/output.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/TestStruct"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "TestStruct": {
       "required": [
diff --git a/hack/schemas/testdata/inline-hybrid/output.json b/hack/schemas/testdata/inline-hybrid/output.json
index 58e33bf03..eb208d876 100644
--- a/hack/schemas/testdata/inline-hybrid/output.json
+++ b/hack/schemas/testdata/inline-hybrid/output.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/TestStruct"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "TestStruct": {
       "required": [
diff --git a/hack/schemas/testdata/inline-skiptrim/output.json b/hack/schemas/testdata/inline-skiptrim/output.json
index d2c90ecd8..65a522c28 100644
--- a/hack/schemas/testdata/inline-skiptrim/output.json
+++ b/hack/schemas/testdata/inline-skiptrim/output.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/TestStruct"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "AnotherTestStruct": {
       "properties": {
diff --git a/hack/schemas/testdata/inline/output.json b/hack/schemas/testdata/inline/output.json
index ad4cf076b..53ca9dd14 100644
--- a/hack/schemas/testdata/inline/output.json
+++ b/hack/schemas/testdata/inline/output.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/TestStruct"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "TestStruct": {
       "required": [
diff --git a/hack/schemas/testdata/integer/output.json b/hack/schemas/testdata/integer/output.json
index d48b531b8..d23a19b85 100644
--- a/hack/schemas/testdata/integer/output.json
+++ b/hack/schemas/testdata/integer/output.json
@@ -5,7 +5,7 @@
       "$ref": "#/definitions/TestStruct"
     }
   ],
-  "$schema": "http://json-schema-org/draft-07/schema#",
+  "$schema": "http://json-schema.org/draft-07/schema#",
   "definitions": {
     "TestStruct": {
       "properties": {
diff --git a/integration/deploy_test.go b/integration/deploy_test.go
index b71d17009..95f701f43 100644
--- a/integration/deploy_test.go
+++ b/integration/deploy_test.go
@@ -126,7 +126,7 @@ func TestDeployTailDefaultNamespace(t *testing.T) {
 	// `--default-repo=` is used to cancel the default repo that is set by default.
 	out := skaffold.Deploy("--tail", "--images", "busybox:latest", "--default-repo=").InDir("testdata/deploy-hello-tail").RunLive(t)
 
-	defer skaffold.Delete().InDir("testdata/deploy-hello-tail").RunBackground(t)
+	defer skaffold.Delete().InDir("testdata/deploy-hello-tail").Run(t)
 	WaitForLogs(t, out, "Hello world!")
 }
 
diff --git a/integration/dev_test.go b/integration/dev_test.go
index 9d986292a..48ca30c32 100644
--- a/integration/dev_test.go
+++ b/integration/dev_test.go
@@ -288,7 +288,7 @@ func TestDevPortForwardDefaultNamespace(t *testing.T) {
 
 	rpcAddr := randomPort()
 	skaffold.Dev("--status-check=false", "--port-forward", "--rpc-port", rpcAddr).InDir("examples/microservices").RunBackground(t)
-	defer skaffold.Delete().InDir("examples/microservices").RunBackground(t)
+	defer skaffold.Delete().InDir("examples/microservices").Run(t)
 	_, entries := apiEvents(t, rpcAddr)
 
 	// No namespace was provided to `skaffold dev`, so we assume "default"
diff --git a/integration/housekeeping_messages_test.go b/integration/housekeeping_messages_test.go
index 99a442c13..d08c37f76 100644
--- a/integration/housekeeping_messages_test.go
+++ b/integration/housekeeping_messages_test.go
@@ -35,5 +35,5 @@ func TestHouseKeepingMessagesShownForDev(t *testing.T) {
 	file := testutil.TempFile(t, "config", nil)
 	out := skaffold.Run("-c", file, "--update-check=true").InDir("examples/getting-started").RunOrFailOutput(t)
 	testutil.CheckContains(t, "Help improve Skaffold", string(out))
-	skaffold.Delete().InDir("examples/getting-started")
+	skaffold.Delete().InDir("examples/getting-started").Run(t)
 }
diff --git a/integration/multiplatform_test.go b/integration/multiplatform_test.go
index 2b9fda980..6bfc4332c 100644
--- a/integration/multiplatform_test.go
+++ b/integration/multiplatform_test.go
@@ -162,7 +162,7 @@ func TestMultiplatformWithDevAndDebug(t *testing.T) {
 			expectedPlatforms := expectedPlatformsForRunningCluster(test.expectedPlatforms)
 
 			test.command(args...).InDir(test.dir).InNs(ns.Name).RunBackground(t)
-			defer skaffold.Delete().InDir(test.dir).InNs(ns.Name).RunBackground(t)
+			defer skaffold.Delete().InDir(test.dir).InNs(ns.Name).Run(t)
 
 			for _, image := range test.images {
 				client.WaitForPodsReady(image.pod)
diff --git a/integration/render_test.go b/integration/render_test.go
index 4549f277c..1394bfa07 100644
--- a/integration/render_test.go
+++ b/integration/render_test.go
@@ -22,6 +22,7 @@ import (
 	"fmt"
 	"os"
 	"path"
+	"path/filepath"
 	"regexp"
 	"testing"
 
@@ -705,3 +706,134 @@ spec:
 		})
 	}
 }
+
+func TestRenderHydrationDirCreation(t *testing.T) {
+	MarkIntegrationTest(t, CanRunWithoutGcp)
+	const hydrationDir = "hydration-dir"
+
+	tests := []struct {
+		description              string
+		shouldCreateHydrationDir bool
+		config                   string
+		manifest                 string
+	}{
+		{
+			description:              "project with kpt renderer should create hydration dir",
+			shouldCreateHydrationDir: true,
+			config: `
+apiVersion: skaffold/v4beta1
+kind: Config
+
+build:
+  artifacts: []
+manifests:
+  kpt: []
+`,
+			manifest: `
+apiVersion: v1
+kind: Pod
+metadata:
+  name: getting-started
+spec:
+  containers:
+    - name: getting-started
+      image: skaffold-example`,
+		},
+		{
+			description:              "project with kpt deployer should create hydration dir",
+			shouldCreateHydrationDir: true,
+			config: `
+apiVersion: skaffold/v4beta1
+kind: Config
+
+build:
+  artifacts: []
+manifests:
+  kpt: []
+deploy:
+  kpt: {}
+`,
+			manifest: `
+apiVersion: v1
+kind: Pod
+metadata:
+  name: getting-started
+spec:
+  containers:
+    - name: getting-started
+      image: skaffold-example`,
+		},
+		{
+			description:              "project with rawYaml and transform should create hydration dir (uses kpt renderer)",
+			shouldCreateHydrationDir: true,
+			config: `
+apiVersion: skaffold/v4beta1
+kind: Config
+
+build:
+  artifacts: []
+manifests:
+  rawYaml:
+    - k8s/k8s-pod.yaml
+  transform:
+    - name: set-annotations
+      configMap:
+        - "author:fake-author"
+`,
+			manifest: `
+apiVersion: v1
+kind: Pod
+metadata:
+  name: getting-started
+spec:
+  containers:
+    - name: getting-started
+      image: skaffold-example`,
+		},
+		{
+			description:              "project without kpt should not create hydration dir",
+			shouldCreateHydrationDir: false,
+			config: `
+apiVersion: skaffold/v4beta1
+kind: Config
+
+build:
+  artifacts: []
+manifests:
+  rawYaml:
+    - k8s/k8s-pod.yaml
+`,
+			manifest: `
+apiVersion: v1
+kind: Pod
+metadata:
+  name: getting-started
+spec:
+  containers:
+  - name: getting-started
+    image: skaffold-example`,
+		},
+	}
+
+	for _, test := range tests {
+		testutil.Run(t, test.description, func(t *testutil.T) {
+			tmpDir := t.NewTempDir()
+			tmpDir.Mkdir("k8s")
+			tmpDir.Write("skaffold.yaml", test.config)
+			tmpDir.Write("k8s/k8s-pod.yaml", test.manifest)
+			tmpDir.Chdir()
+
+			args := []string{"--hydration-dir", hydrationDir}
+
+			skaffold.Render(args...).RunOrFail(t.T)
+
+			_, err := os.Stat(filepath.Join(tmpDir.Root(), hydrationDir))
+
+			if test.shouldCreateHydrationDir {
+				t.CheckFalse(os.IsNotExist(err))
+			} else {
+				t.CheckTrue(os.IsNotExist(err))
+			}
+		})
+	}
+}
diff --git a/integration/sync_test.go b/integration/sync_test.go
index 1ac582835..7e806c481 100644
--- a/integration/sync_test.go
+++ b/integration/sync_test.go
@@ -25,6 +25,8 @@ import (
 	"testing"
 	"time"
 
+	"github.com/google/uuid"
+	yamlpatch "github.com/krishicks/yaml-patch"
 	"k8s.io/apimachinery/pkg/util/wait"
 
 	"github.com/GoogleContainerTools/skaffold/integration/skaffold"
@@ -61,9 +63,6 @@ func TestDevSync(t *testing.T) {
 		t.Run(test.description, func(t *testing.T) {
 			MarkIntegrationTest(t, CanRunWithoutGcp)
 
-			// Run skaffold build first to fail quickly on a build failure
-			skaffold.Build().InDir("testdata/file-sync").WithConfig(test.config).RunOrFail(t)
-
 			ns, client := SetupNamespace(t)
 
 			skaffold.Dev("--trigger", test.trigger).InDir("testdata/file-sync").WithConfig(test.config).InNs(ns.Name).RunBackground(t)
@@ -86,22 +85,41 @@ func TestDevSyncDefaultNamespace(t *testing.T) {
 	for _, test := range syncTests {
 		t.Run(test.description, func(t *testing.T) {
 			MarkIntegrationTest(t, CanRunWithoutGcp)
+			manifest, err := os.ReadFile("testdata/file-sync/pod.yaml")
+			defer os.WriteFile("testdata/file-sync/pod.yaml", manifest, 0644)
+			if err != nil {
+				t.Fatal("Failed to read from file-sync/pod.yaml file.")
+			}
+			id := "test-file-sync-" + uuid.New().String()
+			ops := []byte(
+				`---
+- op: replace
+  path: /metadata/name
+  value: ` + id)
+
+			patch, err := yamlpatch.DecodePatch(ops)
+			if err != nil {
+				t.Fatal(err)
+			}
 
-			// Run skaffold build first to fail quickly on a build failure
-			skaffold.Build().InDir("testdata/file-sync").WithConfig(test.config).RunOrFail(t)
+			nm, err := patch.Apply(manifest)
+			if err != nil {
+				t.Fatal(err)
+			}
+			os.WriteFile("testdata/file-sync/pod.yaml", nm, 0644)
 
 			_, client := DefaultNamespace(t)
 
 			skaffold.Dev("--trigger", test.trigger).InDir("testdata/file-sync").WithConfig(test.config).RunBackground(t)
-			defer skaffold.Delete().InDir("testdata/file-sync").WithConfig(test.config).RunBackground(t)
+			defer skaffold.Delete().InDir("testdata/file-sync").WithConfig(test.config).Run(t)
 
-			client.WaitForPodsReady("test-file-sync")
+			client.WaitForPodsReady(id)
 
 			os.WriteFile("testdata/file-sync/foo", []byte("foo"), 0644)
 			defer func() { os.Truncate("testdata/file-sync/foo", 0) }()
 
-			err := wait.PollImmediate(time.Millisecond*500, 1*time.Minute, func() (bool, error) {
-				out, _ := exec.Command("kubectl", "exec", "test-file-sync", "--", "cat", "foo").Output()
+			err = wait.PollImmediate(time.Millisecond*500, 1*time.Minute, func() (bool, error) {
+				out, _ := exec.Command("kubectl", "exec", id, "--", "cat", "foo").Output()
 				return string(out) == "foo", nil
 			})
 			failNowIfError(t, err)
@@ -133,9 +151,6 @@ func TestDevAutoSync(t *testing.T) {
 		t.Run(test.description, func(t *testing.T) {
 			MarkIntegrationTest(t, CanRunWithoutGcp)
 
-			// Run skaffold build first to fail quickly on a build failure
-			skaffold.Build().WithConfig(test.configFile).InDir(dir).RunOrFail(t)
-
 			ns, client := SetupNamespace(t)
 
 			output := skaffold.Dev("--trigger", "notify").WithConfig(test.configFile).InDir(dir).InNs(ns.Name).RunLive(t)
diff --git a/integration/testdata/helm-multi-config/skaffold/app1/skaffold.yml b/integration/testdata/helm-multi-config/skaffold/app1/skaffold.yml
index 3e7afcc70..5324b10be 100644
--- a/integration/testdata/helm-multi-config/skaffold/app1/skaffold.yml
+++ b/integration/testdata/helm-multi-config/skaffold/app1/skaffold.yml
@@ -14,6 +14,6 @@ manifests:
       - chartPath: ../../charts/app
         createNamespace: true
         name: app1
-        setValues:
-          image.repository: app1
-          image.tag: app1
+        setValueTemplates:
+          image.repository: '{{.app1.IMAGE_REPO}}'
+          image.tag: "{{.app1.IMAGE_TAG}}@{{.app1.IMAGE_DIGEST}}"
diff --git a/integration/testdata/helm-multi-config/skaffold/app2/skaffold.yml b/integration/testdata/helm-multi-config/skaffold/app2/skaffold.yml
index 062c31102..eac7e2063 100644
--- a/integration/testdata/helm-multi-config/skaffold/app2/skaffold.yml
+++ b/integration/testdata/helm-multi-config/skaffold/app2/skaffold.yml
@@ -14,6 +14,6 @@ manifests:
       - chartPath: ../../charts/app
         createNamespace: true
         name: app2
-        setValues:
-          image.repository: app2
-          image.tag: app2
\ No newline at end of file
+        setValueTemplates:
+          image.repository: '{{.app2.IMAGE_REPO}}'
+          image.tag: "{{.app2.IMAGE_TAG}}@{{.app2.IMAGE_DIGEST}}"
\ No newline at end of file
diff --git a/pkg/skaffold/deploy/util/util_test.go b/pkg/skaffold/deploy/util/util_test.go
index 191a66214..f9573b768 100644
--- a/pkg/skaffold/deploy/util/util_test.go
+++ b/pkg/skaffold/deploy/util/util_test.go
@@ -112,7 +112,7 @@ func TestGetHydrationDir_Default(t *testing.T) {
 		tmpDir.Chdir()
 		actual, err := GetHydrationDir(
 			config.SkaffoldOptions{HydrationDir: constants.DefaultHydrationDir, AssumeYes: true},
-			tmpDir.Root(), false)
+			tmpDir.Root(), false, true)
 		t.CheckNoError(err)
 		t.CheckDeepEqual(filepath.Join(tmpDir.Root(), ".kpt-pipeline"), actual)
 	})
@@ -124,7 +124,7 @@ func TestGetHydrationDir_CustomHydrationDir(t *testing.T) {
 		tmpDir.Chdir()
 		expected := filepath.Join(tmpDir.Root(), "test-hydration")
 		actual, err := GetHydrationDir(
-			config.SkaffoldOptions{HydrationDir: expected, AssumeYes: true}, "", false)
+			config.SkaffoldOptions{HydrationDir: expected, AssumeYes: true}, "", false, true)
 		t.CheckNoError(err)
 		t.CheckDeepEqual(expected, actual)
 		_, err = os.Stat(actual)
diff --git a/pkg/skaffold/schema/profiles_test.go b/pkg/skaffold/schema/profiles_test.go
index 776e79a12..0a8b534aa 100644
--- a/pkg/skaffold/schema/profiles_test.go
+++ b/pkg/skaffold/schema/profiles_test.go
@@ -54,6 +54,14 @@ profiles:
       image: second
       docker:
         dockerfile: Dockerfile.second
+  - op: add
+    path: /build/artifacts/-
+    value:
+      image: third
+  - op: replace
+    path: /build/artifacts/2
+    value:
+      image: third-replaced
   - op: remove
     path: /manifests
 `
@@ -74,6 +82,7 @@ profiles:
 		t.CheckDeepEqual("replacement", skaffoldConfig.Build.Artifacts[0].ImageName)
 		t.CheckDeepEqual("Dockerfile.DEV", skaffoldConfig.Build.Artifacts[0].DockerArtifact.DockerfilePath)
 		t.CheckDeepEqual("Dockerfile.second", skaffoldConfig.Build.Artifacts[1].DockerArtifact.DockerfilePath)
+		t.CheckDeepEqual("third-replaced", skaffoldConfig.Build.Artifacts[2].ImageName)
 		t.CheckDeepEqual(latest.DeployConfig{}, skaffoldConfig.Deploy)
 	})
 }
diff --git a/pkg/skaffold/schema/util/util_test.go b/pkg/skaffold/schema/util/util_test.go
index 9a4a41623..269ab39b1 100644
--- a/pkg/skaffold/schema/util/util_test.go
+++ b/pkg/skaffold/schema/util/util_test.go
@@ -174,3 +174,71 @@ values.val3[0].val9: foo4
   values.val3[0].val9: foo4
 `, string(out))
 }
+
+func TestFlatMap_UnmarshalYAMLNestedArrays(t *testing.T) {
+	inputYaml := `
+name: nameValue
+configs:
+  name: configName
+  defaults:
+    - prop1: bar1
+      prop2: foo1
+    - prop1: bar2
+      prop2: foo2
+  mixlist:
+    - prop1: bar3
+      prop2:
+       - foo3
+    - element2
+  matrix:
+    - - i1
+      - i2
+    - - j1
+      - j2
+`
+
+	expected := `name: nameValue
+configs.name: configName
+configs.defaults[0].prop1: bar1
+configs.defaults[0].prop2: foo1
+configs.defaults[1].prop1: bar2
+configs.defaults[1].prop2: foo2
+configs.mixlist[0].prop1: bar3
+configs.mixlist[0].prop2[0]: foo3
+configs.mixlist[1]: element2
+configs.matrix[0][0]: i1
+configs.matrix[0][1]: i2
+configs.matrix[1][0]: j1
+configs.matrix[1][1]: j2
+`
+	inputFlatmap := &FlatMap{}
+	expectedFlatmap := &FlatMap{}
+
+	err := yaml.Unmarshal([]byte(inputYaml), &inputFlatmap)
+	testutil.CheckError(t, false, err)
+
+	err = yaml.Unmarshal([]byte(expected), &expectedFlatmap)
+	testutil.CheckError(t, false, err)
+
+	testutil.CheckDeepEqual(t, *inputFlatmap, *expectedFlatmap)
+
+	out, err := yaml.Marshal(struct {
+		M *FlatMap `yaml:"value,omitempty"`
+	}{inputFlatmap})
+
+	testutil.CheckErrorAndDeepEqual(t, false, err, `value:
+  configs.defaults[0].prop1: bar1
+  configs.defaults[0].prop2: foo1
+  configs.defaults[1].prop1: bar2
+  configs.defaults[1].prop2: foo2
+  configs.matrix[0][0]: i1
+  configs.matrix[0][1]: i2
+  configs.matrix[1][0]: j1
+  configs.matrix[1][1]: j2
+  configs.mixlist[0].prop1: bar3
+  configs.mixlist[0].prop2[0]: foo3
+  configs.mixlist[1]: element2
+  configs.name: configName
+  name: nameValue
+`, string(out))
+}