Repository: glasskube/glasskube (go)

Issue:
CLI update check shows wrong version for PackageOperator
**Describe the bug**
When running the update check with the CLI, the new version for the package operator is shown as the version of the locally used CLI.

**To Reproduce**
Steps to reproduce the behavior:
1. Run `glasskube version --skip-update-check=false` 
2. Newest version for the PackageOperator is shown as `dev` instead of `0.17.0`
```
📣 A newer version of Glasskube is available: dev → 0.17.0
📘 Release notes: https://github.com/glasskube/glasskube/releases/tag/v0.17.0

❗ Glasskube PackageOperator needs to be updated: 0.16.0 -> dev
💡 Please run `glasskube bootstrap` again to update Glasskube PackageOperator
```

**Expected behavior**
The newest version for glasskube should be shown. Same as for the CLI.
`❗ Glasskube PackageOperator needs to be updated: 0.16.0 -> 0.17.0`

**Cluster Info (please complete the following information):**
 - Type: Kubernetes
 - Version: v1.29.2
 - Provider: kind

**Glasskube Info (please complete the following information):**
 - Package Operator version: v0.16.0
 - CLI version: dev (https://github.com/glasskube/glasskube/commit/31cfe95d2088d3c0166e04b000af4f5a315db03d)

Pull request description:
fix(cli): show a different operator version warning in dev mode
<!-- Thanks for creating this pull request 🤗 Please make sure you followed the conventional commit -->

<!-- If this pull request closes an issue, please mention the issue number below -->
Closes #1121 

## 📑 Description
<!-- Add a brief description of the pr -->

## ✅ Checks
- [ ] My code requires changes to the documentation
- [ ] I have updated the documentation as required

## ℹ Additional Information
<!-- Any additional information like breaking changes, dependencies added, screenshots, comparisons between new and old behavior, etc. -->

Patch:
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 804ef16..f30d946 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -35,7 +35,7 @@ jobs:
       - name: Install dependencies
         run: npm ci
       - run: make all
-      - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6
+      - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
         with:
           name: artifacts-${{ runner.os }}-${{ runner.arch }}
           path: dist/
diff --git a/cmd/glasskube/cmd/install.go b/cmd/glasskube/cmd/install.go
index 9559d69..fb07a14 100644
--- a/cmd/glasskube/cmd/install.go
+++ b/cmd/glasskube/cmd/install.go
@@ -147,10 +147,15 @@ var installCmd = &cobra.Command{
 		} else {
 			var name string
 			if len(args) != 2 {
-				fmt.Fprintf(os.Stderr, "%v has scope Namespaced. Please enter a name (default %v):\n", packageName, packageName)
-				name = cliutils.GetInputStr("name")
-				if name == "" {
+				if installCmdOptions.Yes {
+					fmt.Fprintf(os.Stderr, "Name not specified. Using default name: %v\n", packageName)
 					name = packageName
+				} else {
+					fmt.Fprintf(os.Stderr, "%v has scope Namespaced. Please enter a name (default %v):\n", packageName, packageName)
+					name = cliutils.GetInputStr("name")
+					if name == "" {
+						name = packageName
+					}
 				}
 			} else {
 				name = args[1]
diff --git a/go.mod b/go.mod
index 6183dcd..bc5bfdf 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/glasskube/glasskube
 go 1.23.0
 
 require (
-	github.com/Masterminds/semver/v3 v3.2.1
+	github.com/Masterminds/semver/v3 v3.3.0
 	github.com/denisbrodbeck/machineid v1.0.1
 	github.com/evanphx/json-patch/v5 v5.9.0
 	github.com/fatih/color v1.17.0
@@ -14,9 +14,9 @@ require (
 	github.com/google/go-containerregistry v0.20.2
 	github.com/gorilla/mux v1.8.1
 	github.com/invopop/jsonschema v0.12.0
-	github.com/onsi/ginkgo/v2 v2.20.1
-	github.com/onsi/gomega v1.34.1
-	github.com/posthog/posthog-go v1.2.19
+	github.com/onsi/ginkgo/v2 v2.20.2
+	github.com/onsi/gomega v1.34.2
+	github.com/posthog/posthog-go v1.2.21
 	github.com/schollz/progressbar/v3 v3.14.6
 	github.com/spf13/cobra v1.8.1
 	github.com/yuin/goldmark v1.7.4
@@ -54,7 +54,7 @@ require (
 	github.com/google/gnostic-models v0.6.8 // indirect
 	github.com/google/go-cmp v0.6.0 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect
+	github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 // indirect
 	github.com/google/uuid v1.6.0 // indirect
 	github.com/gorilla/websocket v1.5.1 // indirect
 	github.com/imdario/mergo v0.3.16 // indirect
@@ -84,7 +84,7 @@ require (
 	golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
 	golang.org/x/net v0.28.0 // indirect
 	golang.org/x/oauth2 v0.21.0 // indirect
-	golang.org/x/sys v0.23.0 // indirect
+	golang.org/x/sys v0.24.0 // indirect
 	golang.org/x/text v0.17.0 // indirect
 	golang.org/x/time v0.5.0 // indirect
 	golang.org/x/tools v0.24.0 // indirect
diff --git a/go.sum b/go.sum
index 9187e10..c2644f1 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,5 @@
-github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
-github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
+github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0=
+github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
@@ -67,8 +67,8 @@ github.com/google/go-containerregistry v0.20.2/go.mod h1:z38EKdKh4h7IP2gSfUUqEva
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
 github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k=
-github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
+github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA=
+github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
 github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
@@ -112,10 +112,10 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
-github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo=
-github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI=
-github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
-github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
+github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4=
+github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag=
+github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8=
+github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc=
 github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -123,8 +123,8 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/posthog/posthog-go v1.2.19 h1:0udGG2do4LjOzE0D/ik7S3uM2wwFKwzSqswBfdcQ1y4=
-github.com/posthog/posthog-go v1.2.19/go.mod h1:uYC2l1Yktc8E+9FAHJ9QZG4vQf/NHJPD800Hsm7DzoM=
+github.com/posthog/posthog-go v1.2.21 h1:p2ea0l+Qwtk+VC2LCAI87Dz36vwj9i+QHw5s6CpRikA=
+github.com/posthog/posthog-go v1.2.21/go.mod h1:uYC2l1Yktc8E+9FAHJ9QZG4vQf/NHJPD800Hsm7DzoM=
 github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE=
 github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho=
 github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
@@ -186,8 +186,8 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM=
-golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
+golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
 golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
 golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
diff --git a/internal/cliutils/versionutil.go b/internal/cliutils/versionutil.go
index 3d83e9a..e7a5eb9 100644
--- a/internal/cliutils/versionutil.go
+++ b/internal/cliutils/versionutil.go
@@ -15,7 +15,9 @@ func CheckPackageOperatorVersion(ctx context.Context) error {
 	if err != nil {
 		return err
 	}
-	if operatorVersion[1:] != config.Version {
+	if config.IsDevBuild() && operatorVersion != "" {
+		fmt.Fprintf(os.Stderr, "❗ Glasskube CLI version is dev but the operator version is %s\n", operatorVersion[1:])
+	} else if operatorVersion[1:] != config.Version {
 		fmt.Fprintf(os.Stderr, "❗ Glasskube PackageOperator needs to be updated: %s -> %s\n", operatorVersion[1:], config.Version)
 		fmt.Fprintf(os.Stderr, "💡 Please run `glasskube bootstrap` again to update Glasskube PackageOperator\n")
 	}
diff --git a/internal/manifestvalues/resolver.go b/internal/manifestvalues/resolver.go
index 1c34a8a..5841bab 100644
--- a/internal/manifestvalues/resolver.go
+++ b/internal/manifestvalues/resolver.go
@@ -2,7 +2,6 @@ package manifestvalues
 
 import (
 	"context"
-	"encoding/base64"
 	"errors"
 	"fmt"
 
@@ -77,10 +76,8 @@ func (r *Resolver) resolveSecretRef(ctx context.Context, ref v1alpha1.ObjectKeyV
 		return "", NewSecretRefError(ref, err)
 	} else if v, ok := c.Data[ref.Key]; !ok {
 		return "", NewSecretRefError(ref, NewKeyError(ref.Key))
-	} else if decoded, err := base64.StdEncoding.DecodeString(string(v)); err != nil {
-		return "", NewSecretRefError(ref, err)
 	} else {
-		return string(decoded), nil
+		return string(v), nil
 	}
 }
 
diff --git a/internal/webhook/packagerepository_webhook.go b/internal/webhook/packagerepository_webhook.go
index 630655a..2ec7597 100644
--- a/internal/webhook/packagerepository_webhook.go
+++ b/internal/webhook/packagerepository_webhook.go
@@ -61,6 +61,8 @@ func (p *PackageRepositoryValidatingWebhook) ValidateUpdate(ctx context.Context,
 			log.Info("validate update", "name", newRepo.Name)
 			if oldRepo.Spec.Url != newRepo.Spec.Url {
 				return nil, p.validateUpdateOrDelete(ctx, oldRepo)
+			} else {
+				return nil, nil
 			}
 		}
 	}
diff --git a/website/docs/04_design/gitops.md b/website/docs/04_integration/gitops.md
similarity index 69%
rename from website/docs/04_design/gitops.md
rename to website/docs/04_integration/gitops.md
index 6390824..b5378fa 100644
--- a/website/docs/04_design/gitops.md
+++ b/website/docs/04_integration/gitops.md
@@ -1,7 +1,7 @@
-# GitOps Integration
+# GitOps
 
-All Glasskube features can be used in GitOps powered environments, as all of the internal logic is built upon custom resource definitions.
-For example, an installation of a clusterpackage is being represented by a `ClusterPackage` custom resource in your cluster. The same
+All Glasskube features can be used in GitOps powered environments, as all the internal logic is built upon custom resource definitions.
+For example, an installation of a cluster package is being represented by a `ClusterPackage` custom resource in your cluster. The same
 goes for `Package` and `PackageRepository` resources.
 
 In our [GitOps template](https://github.com/glasskube/gitops-template) we explain how Glasskube can be set up together with ArgoCD,
diff --git a/website/docs/04_integration/renovate.md b/website/docs/04_integration/renovate.md
new file mode 100644
index 0000000..009edb2
--- /dev/null
+++ b/website/docs/04_integration/renovate.md
@@ -0,0 +1,38 @@
+# Renovate
+
+[Renovate](https://docs.renovatebot.com/) is a popular application that automates dependency updates in various version control systems.
+Developed as an open-source project by Mend and contributors, it integrates deeply into your Git hosting provider,
+in order to detect possible version updates and create pull/merge requests using the providers first-party APIs.
+
+Starting with version [38.45.0](https://github.com/renovatebot/renovate/releases/tag/38.45.0), Renovate supports updating Glasskube package versions.
+To enable Renovate support for Glasskube in your GitOps repository, add the following configuration to your Renovate config file:
+
+```json title="renovate.json"
+"glasskube": {
+    "fileMatch": [
+      // see below
+    ]
+}
+```
+
+Since there is no canonical naming scheme for files containing Glasskube packages in GitOps repositories,
+the manager does not have a default "fileMatch" value, so you have to provider your own.
+For example, if you used our GitOps template to set up your repository, you can use `"^packages/.*\\.yaml$"` as a matcher.
+This will tell Renovate that all files in the `packages` directory (and its subdirectories) that end with `.yaml` may contain glasskube resources.
+The full configuration section should look something like this:
+
+```json title="renovate.json"
+"glasskube": {
+    "fileMatch": [
+      "^packages/.*\\.yaml$"
+    ]
+}
+```
+
+Check out our GitOps template to see the Renovate integration in action: [`glasskube/gitops-template`](https://github.com/glasskube/gitops-template).
+
+The Renovate integration for Glasskube supports scenarios with multiple repositories, but all repositories must be present in the repository.
+Furthermore, authenticated repositories are not yet supported.
+
+At Glasskube we use Renovate in almost all of our repositories, and we highly recommend that you install it in your GitOps repository.
+Check out the [Renovate documentation](https://docs.renovatebot.com/getting-started/installing-onboarding/) for instructions.
diff --git a/website/docs/04_design/dependency-management.md b/website/docs/05_design/dependency-management.md
similarity index 100%
rename from website/docs/04_design/dependency-management.md
rename to website/docs/05_design/dependency-management.md
diff --git a/website/docs/04_design/package-config.md b/website/docs/05_design/package-config.md
similarity index 100%
rename from website/docs/04_design/package-config.md
rename to website/docs/05_design/package-config.md
diff --git a/website/docs/04_design/repositories.mdx b/website/docs/05_design/repositories.mdx
similarity index 100%
rename from website/docs/04_design/repositories.mdx
rename to website/docs/05_design/repositories.mdx
diff --git a/website/docs/04_design/telemetry.md b/website/docs/05_design/telemetry.md
similarity index 100%
rename from website/docs/04_design/telemetry.md
rename to website/docs/05_design/telemetry.md
diff --git a/website/docs/05_comparisons/01_helm.md b/website/docs/06_comparisons/01_helm.md
similarity index 100%
rename from website/docs/05_comparisons/01_helm.md
rename to website/docs/06_comparisons/01_helm.md
diff --git a/website/docs/05_comparisons/02_timoni.md b/website/docs/06_comparisons/02_timoni.md
similarity index 100%
rename from website/docs/05_comparisons/02_timoni.md
rename to website/docs/06_comparisons/02_timoni.md
diff --git a/website/docs/05_comparisons/03_olm.md b/website/docs/06_comparisons/03_olm.md
similarity index 100%
rename from website/docs/05_comparisons/03_olm.md
rename to website/docs/06_comparisons/03_olm.md
diff --git a/website/docs/index.md b/website/docs/index.md
index d1a3b2d..a68d7f2 100644
--- a/website/docs/index.md
+++ b/website/docs/index.md
@@ -151,6 +151,17 @@ Shows additional information about the given package.
 Opens the default entrypoint of the given package.
 Use `glasskube open <package> <entrypoint>` to open a specific entrypoint.
 
+### `glasskube auto-update`
+
+Update autopilot for packages where automatic updates are enabled.
+Use the `enable` and `disable` subcommands to enable/disable automatic updates for some or all packages.
+Examples:
+
+- `glasskube auto-update enable` (Enable automatic updates for all packages)
+- `glasskube auto-update disable foo bar` (Disable automatic updates for packages "foo" and "bar")
+
+For more information check out `glasskube help auto-update` and `glasskube help auto-update enable`.
+
 ### `glasskube repo`
 
 Manages the package repositories of the cluster. `glasskube repo list` lists the currently configured repositories,
diff --git a/website/package-lock.json b/website/package-lock.json
index 1867a2d..03ecf52 100644
--- a/website/package-lock.json
+++ b/website/package-lock.json
@@ -20,8 +20,8 @@
         "@fortawesome/free-regular-svg-icons": "^6.5.1",
         "@fortawesome/free-solid-svg-icons": "^6.5.1",
         "@fortawesome/react-fontawesome": "^0.2.0",
-        "@getcanary/docusaurus-theme-search-pagefind": "^0.0.12",
-        "@getcanary/web": "^0.0.99",
+        "@getcanary/docusaurus-theme-search-pagefind": "^0.0.13",
+        "@getcanary/web": "^0.0.101",
         "@giscus/react": "^3.0.0",
         "@lottiefiles/react-lottie-player": "^3.5.3",
         "@mdx-js/react": "^3.0.0",
@@ -3353,9 +3353,9 @@
       }
     },
     "node_modules/@getcanary/docusaurus-theme-search-pagefind": {
-      "version": "0.0.12",
-      "resolved": "https://registry.npmjs.org/@getcanary/docusaurus-theme-search-pagefind/-/docusaurus-theme-search-pagefind-0.0.12.tgz",
-      "integrity": "sha512-qh71Qj9sftD5matV98Yj02NtzimhB7N+GyDIuzyuSUFGaCW67sc3DYslPqZLb+t1PgtdmA5E2IvksU8UtqT8KA==",
+      "version": "0.0.13",
+      "resolved": "https://registry.npmjs.org/@getcanary/docusaurus-theme-search-pagefind/-/docusaurus-theme-search-pagefind-0.0.13.tgz",
+      "integrity": "sha512-w/Jz4q98cJQQtTAq8KCDI1jAW1HnHpsYpFoXaIjplLt+RoBiUKkCXocxDEI0yfKzRtmkH77dvf6LyJIdqMDWZg==",
       "license": "MIT",
       "dependencies": {
         "cli-progress": "^3.12.0",
@@ -3370,9 +3370,10 @@
       }
     },
     "node_modules/@getcanary/web": {
-      "version": "0.0.99",
-      "resolved": "https://registry.npmjs.org/@getcanary/web/-/web-0.0.99.tgz",
-      "integrity": "sha512-Z7Zcevpgk75lhTymHaqrqxGx7i9CHfOZllt8q+F5QfNc7PX6trOvT1JrG42VR02K5oFBAYEUYSm0VEZ6PpoJqg==",
+      "version": "0.0.101",
+      "resolved": "https://registry.npmjs.org/@getcanary/web/-/web-0.0.101.tgz",
+      "integrity": "sha512-/GeoSpVKq0w2HmjeF855zOeKE8a6cFcdtAsLHC0/ATJTkrAjAuAaTn5We0WX2w0UGBdzHuc94bYXJCklbTEoCg==",
+      "license": "MIT",
       "dependencies": {
         "@floating-ui/dom": "^1.6.8",
         "@lit-labs/observers": "^2.0.2",
@@ -3687,65 +3688,60 @@
       }
     },
     "node_modules/@pagefind/darwin-arm64": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.1.0.tgz",
-      "integrity": "sha512-SLsXNLtSilGZjvqis8sX42fBWsWAVkcDh1oerxwqbac84HbiwxpxOC2jm8hRwcR0Z55HPZPWO77XeRix/8GwTg==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.1.1.tgz",
+      "integrity": "sha512-tZ9tysUmQpFs2EqWG2+E1gc+opDAhSyZSsgKmFzhnWfkK02YHZhvL5XJXEZDqYy3s1FAKhwjTg8XDxneuBlDZQ==",
       "cpu": [
         "arm64"
       ],
-      "license": "MIT",
       "optional": true,
       "os": [
         "darwin"
       ]
     },
     "node_modules/@pagefind/darwin-x64": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.1.0.tgz",
-      "integrity": "sha512-QjQSE/L5oS1C8N8GdljGaWtjCBMgMtfrPAoiCmINTu9Y9dp0ggAyXvF8K7Qg3VyIMYJ6v8vg2PN7Z3b+AaAqUA==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.1.1.tgz",
+      "integrity": "sha512-ChohLQ39dLwaxQv0jIQB/SavP3TM5K5ENfDTqIdzLkmfs3+JlzSDyQKcJFjTHYcCzQOZVeieeGq8PdqvLJxJxQ==",
       "cpu": [
         "x64"
       ],
-      "license": "MIT",
       "optional": true,
       "os": [
         "darwin"
       ]
     },
     "node_modules/@pagefind/linux-arm64": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.1.0.tgz",
-      "integrity": "sha512-8zjYCa2BtNEL7KnXtysPtBELCyv5DSQ4yHeK/nsEq6w4ToAMTBl0K06khqxdSGgjMSwwrxvLzq3so0LC5Q14dA==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.1.1.tgz",
+      "integrity": "sha512-H5P6wDoCoAbdsWp0Zx0DxnLUrwTGWGLu/VI1rcN2CyFdY2EGSvPQsbGBMrseKRNuIrJDFtxHHHyjZ7UbzaM9EA==",
       "cpu": [
         "arm64"
       ],
-      "license": "MIT",
       "optional": true,
       "os": [
         "linux"
       ]
     },
     "node_modules/@pagefind/linux-x64": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.1.0.tgz",
-      "integrity": "sha512-4lsg6VB7A6PWTwaP8oSmXV4O9H0IHX7AlwTDcfyT+YJo/sPXOVjqycD5cdBgqNLfUk8B9bkWcTDCRmJbHrKeCw==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.1.1.tgz",
+      "integrity": "sha512-yJs7tTYbL2MI3HT+ngs9E1BfUbY9M4/YzA0yEM5xBo4Xl8Yu8Qg2xZTOQ1/F6gwvMrjCUFo8EoACs6LRDhtMrQ==",
       "cpu": [
         "x64"
       ],
-      "license": "MIT",
       "optional": true,
       "os": [
         "linux"
       ]
     },
     "node_modules/@pagefind/windows-x64": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.1.0.tgz",
-      "integrity": "sha512-OboCM76BcMKT9IoSfZuFhiqMRgTde8x4qDDvKulFmycgiJrlL5WnIqBHJLQxZq+o2KyZpoHF97iwsGAm8c32sQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.1.1.tgz",
+      "integrity": "sha512-b7/qPqgIl+lMzkQ8fJt51SfguB396xbIIR+VZ3YrL2tLuyifDJ1wL5mEm+ddmHxJ2Fki340paPcDan9en5OmAw==",
       "cpu": [
         "x64"
       ],
-      "license": "MIT",
       "optional": true,
       "os": [
         "win32"
@@ -3811,6 +3807,13 @@
       "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==",
       "license": "MIT"
     },
+    "node_modules/@rtsao/scc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@sideway/address": {
       "version": "4.1.5",
       "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
@@ -8826,9 +8829,9 @@
       }
     },
     "node_modules/eslint-module-utils": {
-      "version": "2.8.2",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.2.tgz",
-      "integrity": "sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==",
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.9.0.tgz",
+      "integrity": "sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8854,27 +8857,28 @@
       }
     },
     "node_modules/eslint-plugin-import": {
-      "version": "2.29.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
-      "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
+      "version": "2.30.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz",
+      "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "array-includes": "^3.1.7",
-        "array.prototype.findlastindex": "^1.2.3",
+        "@rtsao/scc": "^1.1.0",
+        "array-includes": "^3.1.8",
+        "array.prototype.findlastindex": "^1.2.5",
         "array.prototype.flat": "^1.3.2",
         "array.prototype.flatmap": "^1.3.2",
         "debug": "^3.2.7",
         "doctrine": "^2.1.0",
         "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.8.0",
-        "hasown": "^2.0.0",
-        "is-core-module": "^2.13.1",
+        "eslint-module-utils": "^2.9.0",
+        "hasown": "^2.0.2",
+        "is-core-module": "^2.15.1",
         "is-glob": "^4.0.3",
         "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.7",
-        "object.groupby": "^1.0.1",
-        "object.values": "^1.1.7",
+        "object.fromentries": "^2.0.8",
+        "object.groupby": "^1.0.3",
+        "object.values": "^1.2.0",
         "semver": "^6.3.1",
         "tsconfig-paths": "^3.15.0"
       },
@@ -8950,9 +8954,9 @@
       }
     },
     "node_modules/eslint-plugin-react": {
-      "version": "7.35.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz",
-      "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==",
+      "version": "7.35.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.2.tgz",
+      "integrity": "sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -15698,19 +15702,18 @@
       }
     },
     "node_modules/pagefind": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.1.0.tgz",
-      "integrity": "sha512-1nmj0/vfYcMxNEQj0YDRp6bTVv9hI7HLdPhK/vBBYlrnwjATndQvHyicj5Y7pUHrpCFZpFnLVQXIF829tpFmaw==",
-      "license": "MIT",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.1.1.tgz",
+      "integrity": "sha512-U2YR0dQN5B2fbIXrLtt/UXNS0yWSSYfePaad1KcBPTi0p+zRtsVjwmoPaMQgTks5DnHNbmDxyJUL5TGaLljK3A==",
       "bin": {
         "pagefind": "lib/runner/bin.cjs"
       },
       "optionalDependencies": {
-        "@pagefind/darwin-arm64": "1.1.0",
-        "@pagefind/darwin-x64": "1.1.0",
-        "@pagefind/linux-arm64": "1.1.0",
-        "@pagefind/linux-x64": "1.1.0",
-        "@pagefind/windows-x64": "1.1.0"
+        "@pagefind/darwin-arm64": "1.1.1",
+        "@pagefind/darwin-x64": "1.1.1",
+        "@pagefind/linux-arm64": "1.1.1",
+        "@pagefind/linux-x64": "1.1.1",
+        "@pagefind/windows-x64": "1.1.1"
       }
     },
     "node_modules/param-case": {
diff --git a/website/package.json b/website/package.json
index bc48709..605374e 100644
--- a/website/package.json
+++ b/website/package.json
@@ -30,8 +30,8 @@
     "@fortawesome/free-regular-svg-icons": "^6.5.1",
     "@fortawesome/free-solid-svg-icons": "^6.5.1",
     "@fortawesome/react-fontawesome": "^0.2.0",
-    "@getcanary/docusaurus-theme-search-pagefind": "^0.0.12",
-    "@getcanary/web": "^0.0.99",
+    "@getcanary/docusaurus-theme-search-pagefind": "^0.0.13",
+    "@getcanary/web": "^0.0.101",
     "@giscus/react": "^3.0.0",
     "@lottiefiles/react-lottie-player": "^3.5.3",
     "@mdx-js/react": "^3.0.0",
diff --git a/website/sidebars.ts b/website/sidebars.ts
index 2d9eadd..1e627f7 100644
--- a/website/sidebars.ts
+++ b/website/sidebars.ts
@@ -34,13 +34,23 @@ const sidebars: SidebarsConfig = {
         },
       ],
     },
+    {
+      type: 'category',
+      label: 'Integration',
+      items: [
+        {
+          type: 'autogenerated',
+          dirName: '04_integration',
+        },
+      ],
+    },
     {
       type: 'category',
       label: 'Design',
       items: [
         {
           type: 'autogenerated',
-          dirName: '04_design',
+          dirName: '05_design',
         },
       ],
     },
@@ -50,7 +60,7 @@ const sidebars: SidebarsConfig = {
       items: [
         {
           type: 'autogenerated',
-          dirName: '05_comparisons',
+          dirName: '06_comparisons',
         },
       ],
     },


Test patch:
diff --git a/internal/manifestvalues/resolver_test.go b/internal/manifestvalues/resolver_test.go
index 5d3b115..a7a015c 100644
--- a/internal/manifestvalues/resolver_test.go
+++ b/internal/manifestvalues/resolver_test.go
@@ -2,7 +2,6 @@ package manifestvalues
 
 import (
 	"context"
-	"encoding/base64"
 
 	"github.com/glasskube/glasskube/api/v1alpha1"
 	"github.com/glasskube/glasskube/internal/adapter/controllerruntime"
@@ -60,7 +59,7 @@ var _ = Describe("resolver", func() {
 	It("should resolve Secret reference value", func(ctx context.Context) {
 		resolver := newTestResolver(&corev1.Secret{
 			ObjectMeta: metav1.ObjectMeta{Name: "test", Namespace: "test"},
-			Data:       map[string][]byte{"test": []byte(base64.StdEncoding.EncodeToString([]byte("test")))},
+			Data:       map[string][]byte{"test": []byte("test")},
 		})
 		result, err := resolver.Resolve(ctx, map[string]v1alpha1.ValueConfiguration{
 			"test": {
@@ -89,7 +88,7 @@ var _ = Describe("resolver", func() {
 			},
 			&corev1.Secret{
 				ObjectMeta: metav1.ObjectMeta{Name: "test", Namespace: "test"},
-				Data:       map[string][]byte{"test": []byte(base64.StdEncoding.EncodeToString([]byte("test")))},
+				Data:       map[string][]byte{"test": []byte("test")},
 			},
 		)
 		result, err := resolver.Resolve(ctx, map[string]v1alpha1.ValueConfiguration{
diff --git a/internal/webhook/packagerepository_webhook_test.go b/internal/webhook/packagerepository_webhook_test.go
index e63f6b7..60343ca 100644
--- a/internal/webhook/packagerepository_webhook_test.go
+++ b/internal/webhook/packagerepository_webhook_test.go
@@ -102,5 +102,12 @@ var _ = Describe("PackageRepositoryValidatingWebhook", Ordered, func() {
 				Expect(err).To(MatchError(ErrPackagesInstalled))
 			})
 		})
+		When("url not changed", func() {
+			It("should not return an error", func(ctx context.Context) {
+				webhook := newPackageRepositoryValidatingWebhook(&glasskubev1Repo, &hinterseerv1Package, &hinterseerv1PackageInfo)
+				_, err := webhook.ValidateUpdate(ctx, &glasskubev1Repo, &glasskubev1Repo)
+				Expect(err).NotTo(HaveOccurred())
+			})
+		})
 	})
 })