diff --git a/CHANGELOG.md b/CHANGELOG.md
index 469484baca74e667fbc0cc6d9a99f8367376d117..ed19c0c9d79a6ee664c4aa8327a5f6e9c9a31b8f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,26 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 
 ---
 
+## [8.6.1-bb.0] (2024-12-06)
+
+### Changed
+
+- ironbank/gitlab/gitlab/gitlab-webservice (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/certificates (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/gitaly (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-base (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-container-registry (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-exporter (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-mailroom (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-pages (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-shell (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-sidekiq (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-toolbox (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-webservice (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-workhorse (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/gitlab/gitlab/kubectl (source) 17.5.2 -> 17.6.1
+- registry1.dso.mil/ironbank/opensource/postgres/postgresql (source) 14.14 -> 14.15
+
 ## [8.5.2-bb.0] (2024-11-19)
 
 ### Changed
diff --git a/README.md b/README.md
index 55003243f11e92859659831f5317acae4b402b96..5d8caca81a8abf910b4fe88b637156760835cec0 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,14 @@
 <!-- Warning: Do not manually edit this file. See notes on gluon + helm-docs at the end of this file for more information. -->
 # gitlab
 
-![Version: 8.5.2-bb.0](https://img.shields.io/badge/Version-8.5.2--bb.0-informational?style=flat-square) ![AppVersion: 17.5.2](https://img.shields.io/badge/AppVersion-17.5.2-informational?style=flat-square) ![Maintenance Track: bb_integrated](https://img.shields.io/badge/Maintenance_Track-bb_integrated-green?style=flat-square)
+![Version: 8.6.1-bb.0](https://img.shields.io/badge/Version-8.6.1--bb.0-informational?style=flat-square) ![AppVersion: 17.6.1](https://img.shields.io/badge/AppVersion-17.6.1-informational?style=flat-square) ![Maintenance Track: bb_integrated](https://img.shields.io/badge/Maintenance_Track-bb_integrated-green?style=flat-square)
 
 GitLab is the most comprehensive AI-powered DevSecOps Platform.
 
 ## Upstream References
 - <https://about.gitlab.com/>
 
-* <https://gitlab.com/gitlab-org/charts/gitlab>
+- <https://gitlab.com/gitlab-org/charts/gitlab>
 
 ## Upstream Release Notes
 
@@ -48,7 +48,7 @@ helm install gitlab chart/
 | global.image | object | `{}` |  |
 | global.pod.labels | object | `{}` |  |
 | global.edition | string | `"ee"` |  |
-| global.gitlabVersion | string | `"17.5.2"` |  |
+| global.gitlabVersion | string | `"17.6.1"` |  |
 | global.application.create | bool | `false` |  |
 | global.application.links | list | `[]` |  |
 | global.application.allowClusterRoles | bool | `true` |  |
@@ -362,7 +362,7 @@ helm install gitlab chart/
 | global.workhorse.tls.enabled | bool | `false` |  |
 | global.webservice.workerTimeout | int | `60` |  |
 | global.certificates.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/certificates"` |  |
-| global.certificates.image.tag | string | `"17.5.2"` |  |
+| global.certificates.image.tag | string | `"17.6.1"` |  |
 | global.certificates.image.pullSecrets[0].name | string | `"private-registry"` |  |
 | global.certificates.init.securityContext.capabilities.drop[0] | string | `"ALL"` |  |
 | global.certificates.init.securityContext.runAsUser | int | `65534` |  |
@@ -399,13 +399,13 @@ helm install gitlab chart/
 | global.certificates.customCAs[29].secret | string | `"ca-certs-dod-trust-anchors-self-signed"` |  |
 | global.certificates.customCAs[30].secret | string | `"ca-certs-eca"` |  |
 | global.kubectl.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/kubectl"` |  |
-| global.kubectl.image.tag | string | `"17.5.2"` |  |
+| global.kubectl.image.tag | string | `"17.6.1"` |  |
 | global.kubectl.image.pullSecrets[0].name | string | `"private-registry"` |  |
 | global.kubectl.securityContext.runAsUser | int | `65534` |  |
 | global.kubectl.securityContext.fsGroup | int | `65534` |  |
 | global.kubectl.securityContext.seccompProfile.type | string | `"RuntimeDefault"` |  |
 | global.gitlabBase.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-base"` |  |
-| global.gitlabBase.image.tag | string | `"17.5.2"` |  |
+| global.gitlabBase.image.tag | string | `"17.6.1"` |  |
 | global.gitlabBase.image.pullSecrets[0].name | string | `"private-registry"` |  |
 | global.serviceAccount.enabled | bool | `true` |  |
 | global.serviceAccount.create | bool | `true` |  |
@@ -682,6 +682,7 @@ helm install gitlab chart/
 | prometheus.serverFiles."prometheus.yml".scrape_configs[4].relabel_configs[6].target_label | string | `"kubernetes_name"` |  |
 | redis.global.imagePullSecrets[0] | string | `"private-registry"` |  |
 | redis.install | bool | `true` |  |
+| redis.image.tag | string | `"6.2.16-debian-12-r1"` |  |
 | redis.auth.existingSecret | string | `"gitlab-redis-secret"` |  |
 | redis.auth.existingSecretKey | string | `"secret"` |  |
 | redis.auth.usePasswordFiles | bool | `true` |  |
@@ -747,7 +748,7 @@ helm install gitlab chart/
 | postgresql.resources.requests.memory | string | `"500Mi"` |  |
 | postgresql.image.registry | string | `"registry1.dso.mil"` |  |
 | postgresql.image.repository | string | `"ironbank/opensource/postgres/postgresql"` |  |
-| postgresql.image.tag | string | `"14.14"` |  |
+| postgresql.image.tag | string | `"14.15"` |  |
 | postgresql.image.pullSecrets[0] | string | `"private-registry"` |  |
 | postgresql.auth.username | string | `"gitlab"` |  |
 | postgresql.auth.password | string | `"bogus-satisfy-upgrade"` |  |
@@ -790,7 +791,7 @@ helm install gitlab chart/
 | registry.resources.requests.cpu | string | `"200m"` |  |
 | registry.resources.requests.memory | string | `"1024Mi"` |  |
 | registry.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-container-registry"` |  |
-| registry.image.tag | string | `"17.5.2"` |  |
+| registry.image.tag | string | `"17.6.1"` |  |
 | registry.image.pullSecrets[0].name | string | `"private-registry"` |  |
 | registry.ingress.enabled | bool | `false` |  |
 | registry.metrics.enabled | bool | `true` |  |
@@ -850,7 +851,7 @@ helm install gitlab chart/
 | gitlab.toolbox.replicas | int | `1` |  |
 | gitlab.toolbox.antiAffinityLabels.matchLabels.app | string | `"gitaly"` |  |
 | gitlab.toolbox.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-toolbox"` |  |
-| gitlab.toolbox.image.tag | string | `"17.5.2"` |  |
+| gitlab.toolbox.image.tag | string | `"17.6.1"` |  |
 | gitlab.toolbox.image.pullSecrets[0].name | string | `"private-registry"` |  |
 | gitlab.toolbox.init.resources.requests.cpu | string | `"200m"` |  |
 | gitlab.toolbox.init.resources.requests.memory | string | `"200Mi"` |  |
@@ -887,7 +888,7 @@ helm install gitlab chart/
 | gitlab.gitlab-exporter.resources.requests.memory | string | `"200Mi"` |  |
 | gitlab.gitlab-exporter.capabilities.drop[0] | string | `"ALL"` |  |
 | gitlab.gitlab-exporter.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-exporter"` |  |
-| gitlab.gitlab-exporter.image.tag | string | `"17.5.2"` |  |
+| gitlab.gitlab-exporter.image.tag | string | `"17.6.1"` |  |
 | gitlab.gitlab-exporter.image.pullSecrets[0].name | string | `"private-registry"` |  |
 | gitlab.gitlab-exporter.metrics.enabled | bool | `true` |  |
 | gitlab.gitlab-exporter.metrics.port | int | `9168` |  |
@@ -909,7 +910,7 @@ helm install gitlab chart/
 | gitlab.migrations.resources.requests.cpu | string | `"500m"` |  |
 | gitlab.migrations.resources.requests.memory | string | `"1.5G"` |  |
 | gitlab.migrations.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-toolbox"` |  |
-| gitlab.migrations.image.tag | string | `"17.5.2"` |  |
+| gitlab.migrations.image.tag | string | `"17.6.1"` |  |
 | gitlab.migrations.image.pullSecrets[0].name | string | `"private-registry"` |  |
 | gitlab.migrations.securityContext.runAsUser | int | `1000` |  |
 | gitlab.migrations.securityContext.runAsGroup | int | `1000` |  |
@@ -933,14 +934,14 @@ helm install gitlab chart/
 | gitlab.webservice.resources.requests.cpu | string | `"300m"` |  |
 | gitlab.webservice.resources.requests.memory | string | `"2.5G"` |  |
 | gitlab.webservice.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-webservice"` |  |
-| gitlab.webservice.image.tag | string | `"17.5.2"` |  |
+| gitlab.webservice.image.tag | string | `"17.6.1"` |  |
 | gitlab.webservice.image.pullSecrets[0].name | string | `"private-registry"` |  |
 | gitlab.webservice.workhorse.resources.limits.cpu | string | `"600m"` |  |
 | gitlab.webservice.workhorse.resources.limits.memory | string | `"2.5G"` |  |
 | gitlab.webservice.workhorse.resources.requests.cpu | string | `"600m"` |  |
 | gitlab.webservice.workhorse.resources.requests.memory | string | `"2.5G"` |  |
 | gitlab.webservice.workhorse.image | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-workhorse"` |  |
-| gitlab.webservice.workhorse.tag | string | `"17.5.2"` |  |
+| gitlab.webservice.workhorse.tag | string | `"17.6.1"` |  |
 | gitlab.webservice.workhorse.pullSecrets[0].name | string | `"private-registry"` |  |
 | gitlab.webservice.workhorse.metrics.enabled | bool | `true` |  |
 | gitlab.webservice.workhorse.metrics.serviceMonitor.enabled | bool | `true` |  |
@@ -951,7 +952,7 @@ helm install gitlab chart/
 | gitlab.webservice.metrics.serviceMonitor.enabled | bool | `true` |  |
 | gitlab.webservice.helmTests.enabled | bool | `false` |  |
 | gitlab.sidekiq.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-sidekiq"` |  |
-| gitlab.sidekiq.image.tag | string | `"17.5.2"` |  |
+| gitlab.sidekiq.image.tag | string | `"17.6.1"` |  |
 | gitlab.sidekiq.image.pullSecrets[0].name | string | `"private-registry"` |  |
 | gitlab.sidekiq.init.resources.limits.cpu | string | `"200m"` |  |
 | gitlab.sidekiq.init.resources.limits.memory | string | `"200Mi"` |  |
@@ -969,7 +970,7 @@ helm install gitlab chart/
 | gitlab.sidekiq.containerSecurityContext.runAsGroup | int | `1000` |  |
 | gitlab.sidekiq.containerSecurityContext.capabilities.drop[0] | string | `"ALL"` |  |
 | gitlab.gitaly.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitaly"` |  |
-| gitlab.gitaly.image.tag | string | `"17.5.2"` |  |
+| gitlab.gitaly.image.tag | string | `"17.6.1"` |  |
 | gitlab.gitaly.image.pullSecrets[0].name | string | `"private-registry"` |  |
 | gitlab.gitaly.init.resources.limits.cpu | string | `"200m"` |  |
 | gitlab.gitaly.init.resources.limits.memory | string | `"200Mi"` |  |
@@ -989,7 +990,7 @@ helm install gitlab chart/
 | gitlab.gitaly.containerSecurityContext.runAsGroup | int | `1000` |  |
 | gitlab.gitaly.containerSecurityContext.capabilities.drop[0] | string | `"ALL"` |  |
 | gitlab.gitlab-shell.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-shell"` |  |
-| gitlab.gitlab-shell.image.tag | string | `"17.5.2"` |  |
+| gitlab.gitlab-shell.image.tag | string | `"17.6.1"` |  |
 | gitlab.gitlab-shell.image.pullSecrets[0].name | string | `"private-registry"` |  |
 | gitlab.gitlab-shell.init.resources.limits.cpu | string | `"200m"` |  |
 | gitlab.gitlab-shell.init.resources.limits.memory | string | `"200Mi"` |  |
@@ -1007,15 +1008,15 @@ helm install gitlab chart/
 | gitlab.gitlab-shell.containerSecurityContext.runAsGroup | int | `1000` |  |
 | gitlab.gitlab-shell.containerSecurityContext.capabilities.drop[0] | string | `"ALL"` |  |
 | gitlab.mailroom.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-mailroom"` |  |
-| gitlab.mailroom.image.tag | string | `"17.5.2"` |  |
+| gitlab.mailroom.image.tag | string | `"17.6.1"` |  |
 | gitlab.mailroom.image.pullSecrets[0].name | string | `"private-registry"` |  |
 | gitlab.mailroom.containerSecurityContext.capabilities.drop[0] | string | `"ALL"` |  |
 | gitlab.gitlab-pages.service.customDomains.type | string | `"ClusterIP"` |  |
 | gitlab.gitlab-pages.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-pages"` |  |
-| gitlab.gitlab-pages.image.tag | string | `"17.5.2"` |  |
+| gitlab.gitlab-pages.image.tag | string | `"17.6.1"` |  |
 | gitlab.gitlab-pages.containerSecurityContext.capabilities.drop[0] | string | `"ALL"` |  |
 | gitlab.praefect.image.repository | string | `"registry1.dso.mil/ironbank/gitlab/gitlab/gitaly"` |  |
-| gitlab.praefect.image.tag | string | `"17.5.2"` |  |
+| gitlab.praefect.image.tag | string | `"17.6.1"` |  |
 | gitlab.praefect.init.resources.limits.cpu | string | `"200m"` |  |
 | gitlab.praefect.init.resources.limits.memory | string | `"200Mi"` |  |
 | gitlab.praefect.init.resources.requests.cpu | string | `"200m"` |  |
diff --git a/chart/.gitlab-ci.yml b/chart/.gitlab-ci.yml
index cd9a2830b353290cf40d1e03f6eaa42f2254ce5b..c363492f062ae9c8ccebd499208ff1e04487ecf6 100644
--- a/chart/.gitlab-ci.yml
+++ b/chart/.gitlab-ci.yml
@@ -37,7 +37,7 @@ variables:
   # AUTO_DEVOPS_DOMAIN: domain.example.com
   GIT_CLONE_PATH: $CI_BUILDS_DIR/gitlab
   HELM_MAX_HISTORY: 20
-  TEST_BACKUP_PREFIX: "1708639806_2024_02_22_16.10.0-pre"
+  TEST_BACKUP_PREFIX: "1730017433_2024_10_27_17.6.0-pre"
   NAMESPACE: $KUBE_NAMESPACE
   REVIEW_REF_PREFIX: ""
   ISSUE_BOT_LABELS_EXTRA: "group::distribution,type::maintenance,maintenance::pipelines"
@@ -45,12 +45,13 @@ variables:
   CANONICAL_PROJECT_PATH: 'gitlab-org/charts/gitlab'
   SECURITY_PROJECT_PATH: 'gitlab-org/security/charts/gitlab'
   DEV_PROJECT_PATH: 'gitlab/charts/gitlab'
-  QA_FULL_SUITE_OPTIONS: '--tag ~smoke --tag ~blocking --tag ~skip_live_env --tag ~orchestrated --tag ~transient'
-  QA_SANITY_SUITE_OPTIONS: '--tag smoke --tag blocking --tag ~skip_live_env --tag ~orchestrated'
+  QA_FULL_SUITE_OPTIONS: '--tag ~smoke --tag ~skip_live_env --tag ~orchestrated --tag ~transient'
+  QA_SANITY_SUITE_OPTIONS: '--tag smoke --tag ~skip_live_env --tag ~orchestrated'
+  GITLAB_QA_ADMIN_ACCESS_TOKEN: $GITLAB_ADMIN_TOKEN
   DEBIAN_VERSION: bookworm
   RUBY_VERSION: "3.1.5"
   CI_TOOLS_VERSION: "4.22.0"
-  GITLAB_QA_VERSION: "14.17.0"
+  GITLAB_QA_VERSION: "14.20.0"
   # STRICT_VERSIONS is used in RSpecs to ensure exact version match for tools like "helm" and "kubectl"
   STRICT_VERSIONS: "true"
   KUBE_CRD_SCHEMA_URL: "https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/v3/apis__apiextensions.k8s.io__v1_openapi.json"
@@ -88,6 +89,22 @@ include:
   - local: '/.gitlab/ci/rules.gitlab-ci.yml'
   - local: '/.gitlab/ci/review-apps.gitlab-ci.yml'
   - local: '/.gitlab/ci/operator.gitlab-ci.yml'
+  - local: '/.gitlab/ci/environments/gke130-arm.gitlab-ci.yml'
+    rules:
+      # pipeline-defined variables are not available, so we're hardwiring present value of:
+      #  * $CANONICAL_PROJECT_PATH
+      #
+      # CANONICAL_DEFAULT_BRANCH_PIPELINE
+      - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == "gitlab-org/charts/gitlab" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
+      # CANONICAL_MR_PIPELINE
+      - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == "gitlab-org/charts/gitlab" && $CI_PIPELINE_SOURCE == "merge_request_event"'
+      # CANONICAL_FEATURE_BRANCH_PIPELINE
+      #  Allow in triggered pipelines
+      - if: '$CI_PROJECT_PATH == "gitlab-org/charts/gitlab" && $CI_PIPELINE_SOURCE == "pipeline" && $TEST_BRANCH == "true"'
+  - local: '/.gitlab/ci/environments/gke129.gitlab-ci.yml'
+  - local: '/.gitlab/ci/environments/gke130.gitlab-ci.yml'
+  - local: '/.gitlab/ci/environments/eks.gitlab-ci.yml'
+  - local: '/.gitlab/ci/environments/eks130.gitlab-ci.yml'
   - template: Jobs/Dependency-Scanning.latest.gitlab-ci.yml
   - template: Jobs/Secret-Detection.latest.gitlab-ci.yml
   - template: Jobs/SAST.latest.gitlab-ci.yml
@@ -204,10 +221,10 @@ lint_package:
     - if: '$PIPELINE_TYPE == "NIGHTLY_PIPELINE"'
   needs: ['lint_package']
 
-"Validate 1.27.5":
+"Validate 1.28.3":
   extends: .kubeconform
   variables:
-    KUBE_VERSION: "1.27.5"
+    KUBE_VERSION: "1.28.3"
     HELM_SETTINGS: |
       global:
         ingress:
@@ -220,23 +237,23 @@ lint_package:
           cronJob:
             apiVersion: batch/v1
 
-"Validate 1.28.3":
-  extends: .kubeconform
-  variables:
-    KUBE_VERSION: "1.28.3"
-    HELM_SETTINGS: !reference ["Validate 1.27.5", variables, HELM_SETTINGS]
-
 "Validate 1.29.4":
   extends: .kubeconform
   variables:
     KUBE_VERSION: "1.29.4"
-    HELM_SETTINGS: !reference ["Validate 1.27.5", variables, HELM_SETTINGS]
+    HELM_SETTINGS: !reference ["Validate 1.28.3", variables, HELM_SETTINGS]
 
 "Validate 1.30.1":
   extends: .kubeconform
   variables:
     KUBE_VERSION: "1.30.1"
-    HELM_SETTINGS: !reference ["Validate 1.27.5", variables, HELM_SETTINGS]
+    HELM_SETTINGS: !reference ["Validate 1.28.3", variables, HELM_SETTINGS]
+
+"Validate 1.31.1":
+  extends: .kubeconform
+  variables:
+    KUBE_VERSION: "1.31.1"
+    HELM_SETTINGS: !reference ["Validate 1.28.3", variables, HELM_SETTINGS]
 
 approve_cluster_tests:
   stage: approve-review-apps
@@ -320,24 +337,6 @@ pin_image_versions:
     - if: '$PIPELINE_TYPE =~ /FEATURE_BRANCH_PIPELINE$/'
     - if: '$PIPELINE_TYPE == "QA_KNAPSACK_UPDATE_PIPELINE"'
 
-.review_gke127_common_vars: &review_gke127_common_vars
-  DNS_PROVIDER: "google"
-  AGENT_NAME: "gke127-ci-cluster"
-  KUBE_INGRESS_BASE_DOMAIN: "cloud-native-v127.helm-charts.win"
-  KUBE_NAMESPACE: "helm-charts-win"
-
-.review_gke129_common_vars: &review_gke129_common_vars
-  DNS_PROVIDER: "google"
-  AGENT_NAME: "gke129-ci-cluster"
-  KUBE_INGRESS_BASE_DOMAIN: "cloud-native-v129.helm-charts.win"
-  KUBE_NAMESPACE: "helm-charts-win"
-
-.review_eks_common_vars: &review_eks_common_vars
-  DNS_PROVIDER: "aws"
-  AGENT_NAME: "eks129-ci-cluster"
-  KUBE_INGRESS_BASE_DOMAIN: "sandbox.eks.helm-charts.win"
-  KUBE_NAMESPACE: "eks-helm-charts-win"
-
 # Jobs using auto_stop_in that exit with a failure will not execute the on_stop
 # action. We get frequent failures during review_* jobs. Their accompanying
 # partially deployed environments then hang around forever which may eventually
@@ -352,85 +351,6 @@ pin_image_versions:
 # $REVIEW_APPS_AUTO_STOP_IN expires. The actual deployment is left to the
 # associated review_* job.
 
-create_review_gke127:
-  stage: review
-  image: busybox
-  variables:
-    <<: *review_gke127_common_vars
-    GIT_STRATEGY: none
-  script:
-    - echo "Configuring gke127_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA to automatically stop in $REVIEW_APPS_AUTO_STOP_IN."
-  environment:
-    name: gke127_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
-    on_stop: stop_review_gke127
-    auto_stop_in: $REVIEW_APPS_AUTO_STOP_IN
-    action: start
-
-review_gke127:
-  variables:
-    <<: *review_gke127_common_vars
-  extends: .review_template
-  environment:
-    name: gke127_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
-    on_stop: stop_review_gke127
-    auto_stop_in: "${REVIEW_APPS_AUTO_STOP_IN}"
-    action: access
-
-# See comments in create_review_gke127.
-create_review_gke129:
-  stage: review
-  image: busybox
-  variables:
-    <<: *review_gke129_common_vars
-    GIT_STRATEGY: none
-  script:
-    - echo "Configuring gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA to automatically stop in $REVIEW_APPS_AUTO_STOP_IN."
-  environment:
-    name: gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
-    on_stop: stop_review_gke129
-    auto_stop_in: $REVIEW_APPS_AUTO_STOP_IN
-    action: start
-
-review_gke129:
-  variables:
-    <<: *review_gke129_common_vars
-  extends: .review_template
-  environment:
-    name: gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
-    on_stop: stop_review_gke129
-    auto_stop_in: "${REVIEW_APPS_AUTO_STOP_IN}"
-    action: access
-
-# See comments in create_review_gke127.
-create_review_eks:
-  stage: review
-  image: busybox
-  variables:
-    <<: *review_eks_common_vars
-    GIT_STRATEGY: none
-  script:
-    - echo "Configuring eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA to automatically stop in $REVIEW_APPS_AUTO_STOP_IN."
-  environment:
-    name: eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    on_stop: stop_review_eks
-    auto_stop_in: $REVIEW_APPS_AUTO_STOP_IN
-    action: start
-
-review_eks:
-  variables:
-    <<: *review_eks_common_vars
-  extends: .review_template
-  environment:
-    name: eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
-    on_stop: stop_review_eks
-    auto_stop_in: "${REVIEW_APPS_AUTO_STOP_IN}"
-    action: access
-
 .stop_review_template:
   stage: review
   variables:
@@ -449,30 +369,6 @@ review_eks:
   rules:
     - !reference [.review_template, rules]
 
-stop_review_gke127:
-  variables:
-    <<:  *review_gke127_common_vars
-  extends: .stop_review_template
-  environment:
-    name: gke127_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    action: stop
-
-stop_review_gke129:
-  variables:
-    <<:  *review_gke129_common_vars
-  extends: .stop_review_template
-  environment:
-    name: gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    action: stop
-
-stop_review_eks:
-  variables:
-    <<: *review_eks_common_vars
-  extends: .stop_review_template
-  environment:
-    name: eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    action: stop
-
 rubocop:
   image: ruby:3.1-alpine
   stage: prepare
@@ -624,54 +520,6 @@ review-docs-cleanup:
     - if: '$PIPELINE_TYPE =~ /FEATURE_BRANCH_PIPELINE$/'
     - if: '$PIPELINE_TYPE == "QA_KNAPSACK_UPDATE_PIPELINE"'
 
-review_specs_gke127:
-  extends: .specs
-  variables:
-    <<: *review_gke127_common_vars
-    VARIABLES_FILE: "variables/review_gke127"
-    RSPEC_TAGS: type:feature
-  environment:
-    name: gke127_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    url: https://gitlab-$CI_ENVIRONENMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
-    on_stop: stop_review_gke127
-    action: access
-  rules:
-    - !reference [.rule:skip_if_no_cluster]
-    - !reference [.specs, rules]
-  needs: ['review_gke127']
-
-review_specs_gke129:
-  extends: .specs
-  variables:
-    <<: *review_gke129_common_vars
-    VARIABLES_FILE: "variables/review_gke129"
-    RSPEC_TAGS: type:feature
-  environment:
-    name: gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    url: https://gitlab-$CI_ENVIRONENMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
-    on_stop: stop_review_gke129
-    action: access
-  rules:
-    - !reference [.rule:skip_if_no_cluster]
-    - !reference [.specs, rules]
-  needs: ['review_gke129']
-
-review_specs_eks:
-  extends: .specs
-  variables:
-    <<:  *review_eks_common_vars
-    VARIABLES_FILE: "variables/review_eks"
-    RSPEC_TAGS: type:feature
-  environment:
-    name: eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
-    on_stop: stop_review_eks
-    action: access
-  rules:
-    - !reference [.rule:skip_if_no_cluster]
-    - !reference [.specs, rules]
-  needs: ['review_eks']
-
 specs_without_cluster:
   extends: .specs
   variables:
@@ -801,7 +649,7 @@ release_package:
 .qa_branch:
   extends:
     - .qa
-  parallel: 7
+  parallel: 5
   rules:
     - !reference [.rule:skip_if_no_cluster]
     - if: '$PIPELINE_TYPE =~ /DEFAULT_BRANCH_PIPELINE$/'
@@ -810,49 +658,7 @@ release_package:
     - if: '$PIPELINE_TYPE =~ /FEATURE_BRANCH_PIPELINE$/'
     - if: '$PIPELINE_TYPE == "QA_KNAPSACK_UPDATE_PIPELINE"'
 
-# QA jobs for Smoke and Blocking E2E suites
-
-qa_gke127:
-  extends: .qa_branch
-  variables:
-    VARIABLES_FILE: "variables/review_gke127"
-    TEST_SUITE: $QA_SANITY_SUITE_OPTIONS
-  environment:
-    name: gke127_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    on_stop: stop_review_gke127
-    action: access
-  needs:
-    - review_gke127
-    - job: review_specs_gke127
-      artifacts: false
-
-qa_gke129:
-  extends: .qa_branch
-  variables:
-    VARIABLES_FILE: "variables/review_gke129"
-    TEST_SUITE: $QA_SANITY_SUITE_OPTIONS
-  environment:
-    name: gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    on_stop: stop_review_gke129
-    action: access
-  needs:
-    - review_gke129
-    - job: review_specs_gke129
-      artifacts: false
-
-qa_eks:
-  extends: .qa_branch
-  variables:
-    VARIABLES_FILE: "variables/review_eks"
-    TEST_SUITE: $QA_SANITY_SUITE_OPTIONS
-  environment:
-    name: eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    on_stop: stop_review_eks
-    action: access
-  needs:
-    - review_eks
-    - job: review_specs_eks
-      artifacts: false
+# QA jobs for Smoke E2E suites
 
 # QA jobs for Full E2E suites
 
@@ -864,54 +670,6 @@ qa_eks:
     paths:
     - variables
 
-qa_gke127_full_suite_manual_trigger:
-  extends: .qa_full_suite_manual_trigger
-  script: echo 'The job will trigger Full E2E suite against GKE127'
-
-qa_gke129_full_suite_manual_trigger:
-  extends: .qa_full_suite_manual_trigger
-  script: echo 'The job will trigger Full E2E suite against GKE129'
-
-qa_gke127_manual_full_suite:
-  extends: .qa_branch
-  parallel: 7
-  variables:
-    VARIABLES_FILE: "variables/review_gke127"
-    TEST_SUITE: $QA_FULL_SUITE_OPTIONS
-  environment:
-    name: gke127_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    on_stop: stop_review_gke127
-    action: access
-  needs: [ "qa_gke127_full_suite_manual_trigger"]
-
-qa_gke129_manual_full_suite:
-  extends: .qa_branch
-  parallel: 7
-  variables:
-    VARIABLES_FILE: "variables/review_gke129"
-    TEST_SUITE: $QA_FULL_SUITE_OPTIONS
-  environment:
-    name: gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    on_stop: stop_review_gke129
-    action: access
-  needs: [ "qa_gke129_full_suite_manual_trigger"]
-
-qa_eks_full_suite_manual_trigger:
-  extends: .qa_full_suite_manual_trigger
-  script: echo 'The job will trigger Full E2E suite against EKS'
-
-qa_eks_manual_full_suite:
-  extends: .qa_branch
-  parallel: 7
-  variables:
-    VARIABLES_FILE: "variables/review_eks"
-    TEST_SUITE: $QA_FULL_SUITE_OPTIONS
-  environment:
-    name: eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-    on_stop: stop_review_eks
-    action: access
-  needs: [ "qa_eks_full_suite_manual_trigger"]
-
 knapsack-qa-report:
   image:
     name: registry.gitlab.com/gitlab-org/gitlab/gitlab-ee-qa:master
diff --git a/chart/.gitlab/ci/environments/eks.gitlab-ci.yml b/chart/.gitlab/ci/environments/eks.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6964b490b7a4a5f2914d9ad409cddfdb05c29d3a
--- /dev/null
+++ b/chart/.gitlab/ci/environments/eks.gitlab-ci.yml
@@ -0,0 +1,85 @@
+.review_eks_common_vars: &review_eks_common_vars
+  DNS_PROVIDER: "aws"
+  AGENT_NAME: "eks129-ci-cluster"
+  KUBE_INGRESS_BASE_DOMAIN: "sandbox.eks.helm-charts.win"
+  KUBE_NAMESPACE: "eks-helm-charts-win"
+
+create_review_eks:
+  stage: review
+  image: busybox
+  variables:
+    <<: *review_eks_common_vars
+    GIT_STRATEGY: none
+  script:
+    - echo "Configuring eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA to automatically stop in $REVIEW_APPS_AUTO_STOP_IN."
+  environment:
+    name: eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    on_stop: stop_review_eks
+    auto_stop_in: $REVIEW_APPS_AUTO_STOP_IN
+    action: start
+
+review_eks:
+  variables:
+    <<: *review_eks_common_vars
+  extends: .review_template
+  environment:
+    name: eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
+    on_stop: stop_review_eks
+    auto_stop_in: "${REVIEW_APPS_AUTO_STOP_IN}"
+    action: access
+
+stop_review_eks:
+  variables:
+    <<: *review_eks_common_vars
+  extends: .stop_review_template
+  environment:
+    name: eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    action: stop
+
+review_specs_eks:
+  extends: .specs
+  variables:
+    <<:  *review_eks_common_vars
+    VARIABLES_FILE: "variables/review_eks"
+    RSPEC_TAGS: type:feature
+  environment:
+    name: eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
+    on_stop: stop_review_eks
+    action: access
+  rules:
+    - !reference [.rule:skip_if_no_cluster]
+    - !reference [.specs, rules]
+  needs: ['review_eks']
+
+qa_eks:
+  extends: .qa_branch
+  variables:
+    VARIABLES_FILE: "variables/review_eks"
+    TEST_SUITE: $QA_SANITY_SUITE_OPTIONS
+  environment:
+    name: eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    on_stop: stop_review_eks
+    action: access
+  needs:
+    - review_eks
+    - job: review_specs_eks
+      artifacts: false
+
+qa_eks_full_suite_manual_trigger:
+  extends: .qa_full_suite_manual_trigger
+  script: echo 'The job will trigger Full E2E suite against EKS'
+
+qa_eks_manual_full_suite:
+  extends: .qa_branch
+  parallel: 7
+  variables:
+    VARIABLES_FILE: "variables/review_eks"
+    TEST_SUITE: $QA_FULL_SUITE_OPTIONS
+  environment:
+    name: eks129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    on_stop: stop_review_eks
+    action: access
+  needs: [ "qa_eks_full_suite_manual_trigger"]
+
diff --git a/chart/.gitlab/ci/environments/eks130.gitlab-ci.yml b/chart/.gitlab/ci/environments/eks130.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..30eccdb9b41ed62313294972e8dbccadba3161c1
--- /dev/null
+++ b/chart/.gitlab/ci/environments/eks130.gitlab-ci.yml
@@ -0,0 +1,84 @@
+.review_eks130_common_vars: &review_eks130_common_vars
+  DNS_PROVIDER: "aws"
+  AGENT_NAME: "eks130-ci-cluster"
+  KUBE_INGRESS_BASE_DOMAIN: "sandbox.eks.helm-charts.win"
+  KUBE_NAMESPACE: "eks-helm-charts-win"
+
+create_review_eks130:
+  stage: review
+  image: busybox
+  variables:
+    <<: *review_eks130_common_vars
+    GIT_STRATEGY: none
+  script:
+    - echo "Configuring eks130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA to automatically stop in $REVIEW_APPS_AUTO_STOP_IN."
+  environment:
+    name: eks130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    on_stop: stop_review_eks130
+    auto_stop_in: $REVIEW_APPS_AUTO_STOP_IN
+    action: start
+
+review_eks130:
+  variables:
+    <<: *review_eks130_common_vars
+  extends: .review_template
+  environment:
+    name: eks130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
+    on_stop: stop_review_eks130
+    auto_stop_in: "${REVIEW_APPS_AUTO_STOP_IN}"
+    action: access
+
+stop_review_eks130:
+  variables:
+    <<: *review_eks130_common_vars
+  extends: .stop_review_template
+  environment:
+    name: eks130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    action: stop
+
+review_specs_eks130:
+  extends: .specs
+  variables:
+    <<: *review_eks130_common_vars
+    VARIABLES_FILE: "variables/review_eks130"
+    RSPEC_TAGS: type:feature
+  environment:
+    name: eks130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
+    on_stop: stop_review_eks130
+    action: access
+  rules:
+    - !reference [.rule:skip_if_no_cluster]
+    - !reference [.specs, rules]
+  needs: ["review_eks130"]
+
+qa_eks130:
+  extends: .qa_branch
+  variables:
+    VARIABLES_FILE: "variables/review_eks130"
+    TEST_SUITE: $QA_SANITY_SUITE_OPTIONS
+  environment:
+    name: eks130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    on_stop: stop_review_eks130
+    action: access
+  needs:
+    - review_eks130
+    - job: review_specs_eks130
+      artifacts: false
+
+qa_eks130_full_suite_manual_trigger:
+  extends: .qa_full_suite_manual_trigger
+  script: echo 'The job will trigger Full E2E suite against EKS 130'
+
+qa_eks130_manual_full_suite:
+  extends: .qa_branch
+  parallel: 7
+  variables:
+    VARIABLES_FILE: "variables/review_eks130"
+    TEST_SUITE: $QA_FULL_SUITE_OPTIONS
+  environment:
+    name: eks130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    on_stop: stop_review_eks130
+    action: access
+  needs: ["qa_eks130_full_suite_manual_trigger"]
diff --git a/chart/.gitlab/ci/environments/gke129.gitlab-ci.yml b/chart/.gitlab/ci/environments/gke129.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..39f9fc462490b327580521c1a4c2945a942896c3
--- /dev/null
+++ b/chart/.gitlab/ci/environments/gke129.gitlab-ci.yml
@@ -0,0 +1,87 @@
+
+.review_gke129_common_vars: &review_gke129_common_vars
+  DNS_PROVIDER: "google"
+  AGENT_NAME: "gke129-ci-cluster"
+  KUBE_INGRESS_BASE_DOMAIN: "cloud-native-v129.helm-charts.win"
+  KUBE_NAMESPACE: "helm-charts-win"
+
+create_review_gke129:
+  stage: review
+  image: busybox
+  variables:
+    <<: *review_gke129_common_vars
+    GIT_STRATEGY: none
+  script:
+    - echo "Configuring gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA to automatically stop in $REVIEW_APPS_AUTO_STOP_IN."
+  environment:
+    name: gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
+    on_stop: stop_review_gke129
+    auto_stop_in: $REVIEW_APPS_AUTO_STOP_IN
+    action: start
+
+review_gke129:
+  variables:
+    <<: *review_gke129_common_vars
+  extends: .review_template
+  environment:
+    name: gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
+    on_stop: stop_review_gke129
+    auto_stop_in: "${REVIEW_APPS_AUTO_STOP_IN}"
+    action: access
+
+stop_review_gke129:
+  variables:
+    <<:  *review_gke129_common_vars
+  extends: .stop_review_template
+  environment:
+    name: gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    action: stop
+
+review_specs_gke129:
+  extends: .specs
+  variables:
+    <<: *review_gke129_common_vars
+    VARIABLES_FILE: "variables/review_gke129"
+    RSPEC_TAGS: type:feature
+  environment:
+    name: gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    url: https://gitlab-$CI_ENVIRONENMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
+    on_stop: stop_review_gke129
+    action: access
+  rules:
+    - !reference [.rule:skip_if_no_cluster]
+    - !reference [.specs, rules]
+  needs: ['review_gke129']
+
+qa_gke129:
+  extends: .qa_branch
+  variables:
+    VARIABLES_FILE: "variables/review_gke129"
+    TEST_SUITE: $QA_SANITY_SUITE_OPTIONS
+  environment:
+    name: gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    on_stop: stop_review_gke129
+    action: access
+  needs:
+    - review_gke129
+    - job: review_specs_gke129
+      artifacts: false
+
+qa_gke129_full_suite_manual_trigger:
+  extends: .qa_full_suite_manual_trigger
+  script: echo 'The job will trigger Full E2E suite against GKE129'
+
+qa_gke129_manual_full_suite:
+  extends: .qa_branch
+  parallel: 7
+  variables:
+    VARIABLES_FILE: "variables/review_gke129"
+    TEST_SUITE: $QA_FULL_SUITE_OPTIONS
+  environment:
+    name: gke129_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    on_stop: stop_review_gke129
+    action: access
+  needs: [ "qa_gke129_full_suite_manual_trigger"]
+
diff --git a/chart/.gitlab/ci/environments/gke130-arm.gitlab-ci.yml b/chart/.gitlab/ci/environments/gke130-arm.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1126fceea4aa281093ab4ec2eeef602f9de659b6
--- /dev/null
+++ b/chart/.gitlab/ci/environments/gke130-arm.gitlab-ci.yml
@@ -0,0 +1,98 @@
+.review_gke130a_common_vars: &review_gke130a_common_vars
+  DNS_PROVIDER: "google"
+  AGENT_NAME: "gke130-ci-cluster"
+  KUBE_INGRESS_BASE_DOMAIN: "cloud-native-v130.helm-charts.win"
+  KUBE_NAMESPACE: "helm-charts-win"
+  DEPLOY_MULTIARCH: "true"
+
+create_review_gke130a:
+  stage: review
+  image: busybox
+  variables:
+    <<: *review_gke130a_common_vars
+    GIT_STRATEGY: none
+  script:
+    - echo "Configuring gke130_review/a-$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA to automatically stop in $REVIEW_APPS_AUTO_STOP_IN."
+  environment: &gke130a_environment
+    name: &gke130a_name gke130_review/a-$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
+    on_stop: stop_review_gke130a
+    auto_stop_in: $REVIEW_APPS_AUTO_STOP_IN
+    action: start
+
+review_gke130a:
+  variables:
+    <<: *review_gke130a_common_vars
+  extends: .review_template
+  environment:
+    <<: *gke130a_environment
+    action: access
+  # initially allow arm64 failures
+  allow_failure: true
+  rules:
+    # Initially we only execute for:
+    # * MRs and Default branch 
+    # * Triggered pipelines (from CNG)
+    - if: '$PIPELINE_TYPE == "CANONICAL_FEATURE_BRANCH_PIPELINE" && $CI_PIPELINE_SOURCE == "pipeline" && $TEST_BRANCH == "true"'
+    - if: '$PIPELINE_TYPE != "CANONICAL_MR_PIPELINE" && $PIPELINE_TYPE != "CANONICAL_DEFAULT_BRANCH_PIPELINE"'
+      when: never
+    - !reference [.review_template, rules]
+
+stop_review_gke130a:
+  variables:
+    <<: *review_gke130a_common_vars
+  extends: .stop_review_template
+  # initially allow arm64 failures
+  allow_failure: true
+  environment:
+    # name: gke130_review/a-$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    name: *gke130a_name
+    action: stop
+
+review_specs_gke130a:
+  extends: .specs
+  variables:
+    <<: *review_gke130a_common_vars
+    VARIABLES_FILE: "variables/review_gke130a"
+    RSPEC_TAGS: type:feature
+  # initially allow arm64 failures
+  allow_failure: true
+  environment:
+    <<: *gke130a_environment
+    action: access
+  rules:
+    - !reference [.rule:skip_if_no_cluster]
+    - !reference [.specs, rules]
+  needs: ["review_gke130a"]
+
+qa_gke130a:
+  extends: .qa_branch
+  variables:
+    VARIABLES_FILE: "variables/review_gke130a"
+    TEST_SUITE: $QA_SANITY_SUITE_OPTIONS
+  # initially allow arm64 failures
+  allow_failure: true
+  environment:
+    <<: *gke130a_environment
+    action: access
+  needs:
+    - review_gke130a
+    - job: review_specs_gke130a
+      artifacts: false
+
+qa_gke130a_full_suite_manual_trigger:
+  extends: .qa_full_suite_manual_trigger
+  script: echo 'The job will trigger Full E2E suite against GKE130'
+
+qa_gke130a_manual_full_suite:
+  extends: .qa_branch
+  parallel: 7
+  variables:
+    VARIABLES_FILE: "variables/review_gke130a"
+    TEST_SUITE: $QA_FULL_SUITE_OPTIONS
+  # initially allow arm64 failures
+  allow_failure: true
+  environment:
+    <<: *gke130a_environment
+    action: access
+  needs: ["qa_gke130a_full_suite_manual_trigger"]
diff --git a/chart/.gitlab/ci/environments/gke130.gitlab-ci.yml b/chart/.gitlab/ci/environments/gke130.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a5a50883a7ecc383aad07f03f6559921f24981ca
--- /dev/null
+++ b/chart/.gitlab/ci/environments/gke130.gitlab-ci.yml
@@ -0,0 +1,85 @@
+.review_gke130_common_vars: &review_gke130_common_vars
+  DNS_PROVIDER: "google"
+  AGENT_NAME: "gke130-ci-cluster"
+  KUBE_INGRESS_BASE_DOMAIN: "cloud-native-v130.helm-charts.win"
+  KUBE_NAMESPACE: "helm-charts-win"
+
+create_review_gke130:
+  stage: review
+  image: busybox
+  variables:
+    <<: *review_gke130_common_vars
+    GIT_STRATEGY: none
+  script:
+    - echo "Configuring gke130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA to automatically stop in $REVIEW_APPS_AUTO_STOP_IN."
+  environment:
+    name: gke130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
+    on_stop: stop_review_gke130
+    auto_stop_in: $REVIEW_APPS_AUTO_STOP_IN
+    action: start
+
+review_gke130:
+  variables:
+    <<: *review_gke130_common_vars
+  extends: .review_template
+  environment:
+    name: gke130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    url: https://gitlab-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
+    on_stop: stop_review_gke130
+    auto_stop_in: "${REVIEW_APPS_AUTO_STOP_IN}"
+    action: access
+
+stop_review_gke130:
+  variables:
+    <<: *review_gke130_common_vars
+  extends: .stop_review_template
+  environment:
+    name: gke130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    action: stop
+
+review_specs_gke130:
+  extends: .specs
+  variables:
+    <<: *review_gke130_common_vars
+    VARIABLES_FILE: "variables/review_gke130"
+    RSPEC_TAGS: type:feature
+  environment:
+    name: gke130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    url: https://gitlab-$CI_ENVIRONENMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
+    on_stop: stop_review_gke130
+    action: access
+  rules:
+    - !reference [.rule:skip_if_no_cluster]
+    - !reference [.specs, rules]
+  needs: ["review_gke130"]
+
+qa_gke130:
+  extends: .qa_branch
+  variables:
+    VARIABLES_FILE: "variables/review_gke130"
+    TEST_SUITE: $QA_SANITY_SUITE_OPTIONS
+  environment:
+    name: gke130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    on_stop: stop_review_gke130
+    action: access
+  needs:
+    - review_gke130
+    - job: review_specs_gke130
+      artifacts: false
+
+qa_gke130_full_suite_manual_trigger:
+  extends: .qa_full_suite_manual_trigger
+  script: echo 'The job will trigger Full E2E suite against GKE130'
+
+qa_gke130_manual_full_suite:
+  extends: .qa_branch
+  parallel: 7
+  variables:
+    VARIABLES_FILE: "variables/review_gke130"
+    TEST_SUITE: $QA_FULL_SUITE_OPTIONS
+  environment:
+    name: gke130_review/$REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
+    on_stop: stop_review_gke130
+    action: access
+  needs: ["qa_gke130_full_suite_manual_trigger"]
diff --git a/chart/.gitlab/ci/review-apps.gitlab-ci.yml b/chart/.gitlab/ci/review-apps.gitlab-ci.yml
index a6ec4328516a175b074b691aa23afac5ba97cbbd..00974d0da1f880b885b83ee6ddd2f873ed8fea5b 100644
--- a/chart/.gitlab/ci/review-apps.gitlab-ci.yml
+++ b/chart/.gitlab/ci/review-apps.gitlab-ci.yml
@@ -54,16 +54,16 @@ stop_review_vcluster_128:
   extends: .stop_review_app_template
   variables: !reference [review_vcluster_128, variables]
 
-# Kubernetes 1.29
+# Kubernetes 1.31
 
-review_vcluster_129:
+review_vcluster_131:
   extends: .review_app_template
   variables:
-    VCLUSTER_K8S_VERSION: "1.29"
-    VCLUSTER_NAME: vcluster-1-29-${REVIEW_REF_PREFIX}${CI_COMMIT_SHORT_SHA}
+    VCLUSTER_K8S_VERSION: "1.31"
+    VCLUSTER_NAME: vcluster-1-31-${REVIEW_REF_PREFIX}${CI_COMMIT_SHORT_SHA}
   environment:
-    on_stop: stop_review_vcluster_129
+    on_stop: stop_review_vcluster_131
 
-stop_review_vcluster_129:
+stop_review_vcluster_131:
   extends: .stop_review_app_template
-  variables: !reference [review_vcluster_129, variables]
+  variables: !reference [review_vcluster_131, variables]
diff --git a/chart/.helmignore b/chart/.helmignore
index e877c513d5810c9cb2f70938279dfbd4dc858463..a5545c338d9fd988e7bd6c86eb1398353229914e 100644
--- a/chart/.helmignore
+++ b/chart/.helmignore
@@ -43,7 +43,3 @@ changelogs/
 # CHANGELOG.md
 bin/
 spec/
-# dependencies.io
-dependencies.yml
-deps.yml
-dependencies_io/
diff --git a/chart/CHANGELOG.md b/chart/CHANGELOG.md
index c704a29acebaa370c690c84582ad52895207a903..dba20ff8451c898c9b2fbcca30e94d08103962eb 100644
--- a/chart/CHANGELOG.md
+++ b/chart/CHANGELOG.md
@@ -2,6 +2,31 @@
 documentation](doc/development/changelog.md) for instructions on adding your own
 entry.
 
+## 8.6.1 (2024-11-26)
+
+No changes.
+
+## 8.6.0 (2024-11-20)
+
+### Added (2 changes)
+
+- [Support new PAT feature in GitLab Shell](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/7741ec22bdbede136cb8c06e488aa025765a2b0b) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3997))
+- [Add annotations support to mailroom chart](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/46665cd8f93b351bb240cf716c9345e866e915d1) by @loliee ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3946))
+
+### Changed (11 changes)
+
+- [Update Helm release cert-manager to v1.12.14](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/0c024b2dd34be3c2e72360cbf3605987e27878f6) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/4005))
+- [Update dependency gitlab-qa to v14.20.0](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/d58309f363d2490c354620359a4431f7f1eb6ba9) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3992))
+- [Update dependency gitlab-qa to v14.19.2](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/7e84c8fbbdff92cbba243750c7366d56b0fb5a99) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3981))
+- [Update dependency container-registry to v4.13.0-gitlab](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/43a990baa13a5bdd0c4368b0b5e8b76d5c3331ba) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3980))
+- [Update Helm release gitlab-runner to v0.70.3](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/8f17dfb74a2b6fb3daf686da81fb7488c677d276) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3965))
+- [Update dependency container-registry to v4.12.0-gitlab](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/15c6836b1401f90d377c8d3ed53ce22d70f34347) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3970))
+- [Update dependency gitlab-qa to v14.19.1](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/08d2813a4acb78c73f394d6abd857a185ae84ebf) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3962))
+- [Update dependency container-registry to v4.11.0-gitlab](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/3811c509baf363e79227629b1471beea7dc99048) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3961))
+- [Update Helm release gitlab-runner to v0.70.1](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/b82f0a50ae6ec26a79fe9cc307c862c816f3ac78) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3958))
+- [Update Helm release gitlab-runner to v0.70.0](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/ea3833fd35e5d201c96e9da5b4892b610df19781) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3955))
+- [Bump nginx-controller from 1.3.1 to 1.11.2](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/c8f6090ec807dde86d4f6fd92803ada8b125868e) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3901))
+
 ## 8.5.2 (2024-11-12)
 
 ### Changed (1 change)
@@ -39,6 +64,14 @@ No changes.
 
 - [Remove 'ci_jwt_signing_key' secret migrated to ApplicationSetting](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/b23acb2484f63ebb7e0f461033f5a3542519b3c9) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3910))
 
+## 8.4.4 (2024-11-12)
+
+No changes.
+
+## 8.4.3 (2024-10-22)
+
+No changes.
+
 ## 8.4.2 (2024-10-09)
 
 No changes.
@@ -65,6 +98,14 @@ No changes.
 - [Update Helm release cert-manager to v1.12.13](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/e45d38f61348f8fae9c824a58a9e3551b91a7d5b) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3876))
 - [Update dependency container-registry to v4.7.0-gitlab](https://gitlab.com/gitlab-org/charts/gitlab/-/commit/9da185ee884ef15ce5be7f032d734bfa654ef630) ([merge request](https://gitlab.com/gitlab-org/charts/gitlab/-/merge_requests/3872))
 
+## 8.3.7 (2024-11-12)
+
+No changes.
+
+## 8.3.6 (2024-10-22)
+
+No changes.
+
 ## 8.3.5 (2024-10-09)
 
 No changes.
diff --git a/chart/CONTRIBUTING.md b/chart/CONTRIBUTING.md
index 94cfdd333c4dbc956fc1d778b6c33c37edaebd85..d0e89a63fb272c70da1a6e4f8a70dd4783f15224 100644
--- a/chart/CONTRIBUTING.md
+++ b/chart/CONTRIBUTING.md
@@ -6,10 +6,10 @@ all contributions. By participating in this project, you agree to abide by the
 
 ## Developer Certificate of Origin + License
 
-By contributing to GitLab B.V., You accept and agree to the following terms and
-conditions for Your present and future Contributions submitted to GitLab B.V.
-Except for the license granted herein to GitLab B.V. and recipients of software
-distributed by GitLab B.V., You reserve all right, title, and interest in and to
+By contributing to GitLab Inc., You accept and agree to the following terms and
+conditions for Your present and future Contributions submitted to GitLab Inc.
+Except for the license granted herein to GitLab Inc. and recipients of software
+distributed by GitLab Inc., You reserve all right, title, and interest in and to
 Your Contributions. All Contributions are subject to the following DCO + License
 terms.
 
diff --git a/chart/Chart.yaml b/chart/Chart.yaml
index ae17710fc6f61e102c17c9437643d9ae186352ad..50394a761ba66172b50c2c2f9c8ecb490ceec2b7 100644
--- a/chart/Chart.yaml
+++ b/chart/Chart.yaml
@@ -1,8 +1,8 @@
 ---
 apiVersion: v1
 name: gitlab
-version: 8.5.2-bb.0
-appVersion: 17.5.2
+version: 8.6.1-bb.0
+appVersion: v17.6.1
 description: GitLab is the most comprehensive AI-powered DevSecOps Platform.
 keywords:
 - gitlab
@@ -16,7 +16,7 @@ maintainers:
 annotations:
   bigbang.dev/maintenanceTrack: bb_integrated
   bigbang.dev/applicationVersions: |
-    - Gitlab: 17.5.2
+    - Gitlab: 17.6.1
   bigbang.dev/upstreamReleaseNotesMarkdown: |
     The [upstream chart's release notes](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/CHANGELOG.md) may help when reviewing this package.
   helm.sh/images: |
@@ -27,44 +27,44 @@ annotations:
       condition: redis.install
       image: registry1.dso.mil/ironbank/bitnami/redis:7.4.1
     - name: alpine-certificates
-      image: registry1.dso.mil/ironbank/gitlab/gitlab/certificates:17.5.2
+      image: registry1.dso.mil/ironbank/gitlab/gitlab/certificates:17.6.1
     - name: cfssl-self-sign
       condition: shared-secrets.enabled
       image: registry1.dso.mil/ironbank/gitlab/gitlab/cfssl-self-sign:1.6.1
     - name: gitaly
-      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitaly:17.5.2
+      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitaly:17.6.1
     - name: gitlab-container-registry
       condition: registry.enabled
-      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-container-registry:17.5.2
+      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-container-registry:17.6.1
     - name: gitlab-shell
-      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-shell:17.5.2
+      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-shell:17.6.1
     - name: gitlab-sidekiq
-      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-sidekiq:17.5.2
+      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-sidekiq:17.6.1
     - name: gitlab-toolbox
-      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-toolbox:17.5.2
+      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-toolbox:17.6.1
     - name: gitlab-webservice
-      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-webservice:17.5.2
+      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-webservice:17.6.1
     - name: gitlab-workhorse
-      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-workhorse:17.5.2
+      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-workhorse:17.6.1
     - name: gitlab-pages
-      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-pages:17.5.2
+      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-pages:17.6.1
     - name: kubectl
-      image: registry1.dso.mil/ironbank/gitlab/gitlab/kubectl:17.5.2
+      image: registry1.dso.mil/ironbank/gitlab/gitlab/kubectl:17.6.1
     - name: mc
       image: registry1.dso.mil/ironbank/opensource/minio/mc:RELEASE.2024-10-02T08-27-28Z
     - name: minio
       image: registry1.dso.mil/ironbank/opensource/minio/minio:RELEASE.2024-06-04T19-20-08Z
     - name: postgresql
       condition: postgresql.install
-      image: registry1.dso.mil/ironbank/opensource/postgres/postgresql:14.14
+      image: registry1.dso.mil/ironbank/opensource/postgres/postgresql:14.15
     - name: ubi9
       condition: upgradeCheck.enabled
       image: registry1.dso.mil/ironbank/redhat/ubi/ubi9:9.5
     - name: gitlab-base
-      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-base:17.5.2
+      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-base:17.6.1
     - name: gitlab-exporter
       condition: gitlab.gitlab-exporter.enabled
-      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-exporter:17.5.2
+      image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-exporter:17.6.1
     - name: bbtests
       condition: bbtests.enabled
       image: registry1.dso.mil/bigbang-ci/gitlab-tester:0.0.4
diff --git a/chart/Kptfile b/chart/Kptfile
index 3fe228d7bb017893b09d66a917e7785f808b9db1..58a33bdcc1bc255e84359e23b857184b42a07c21 100644
--- a/chart/Kptfile
+++ b/chart/Kptfile
@@ -5,7 +5,7 @@ metadata:
 upstream:
   type: git
   git:
-    commit: 444b06a2195c8f8932847de2b727b63cbc3b8836
+    commit: 0a325d09171fcfa4a3e828052cb273f148a8ff04
     repo: https://gitlab.com/gitlab-org/charts/gitlab
     directory: /
-    ref: v8.5.2
+    ref: v8.6.1
diff --git a/chart/LICENSE.md b/chart/LICENSE.md
index 4abe8b8bf03b34cb233a7fafb261a2829e159906..5aa367954311fc949f375c6bc2f0ba8518abae10 100644
--- a/chart/LICENSE.md
+++ b/chart/LICENSE.md
@@ -1,4 +1,4 @@
-Copyright (c) 2011-2017 GitLab B.V.
+Copyright (c) 2011-2017 GitLab Inc.
 
 With regard to the GitLab Software:
 
diff --git a/chart/charts/cert-manager-v1.12.13.tgz b/chart/charts/cert-manager-v1.12.13.tgz
deleted file mode 100644
index ed81e0ef8d2389081985036b3f6a421827ec525a..0000000000000000000000000000000000000000
Binary files a/chart/charts/cert-manager-v1.12.13.tgz and /dev/null differ
diff --git a/chart/charts/cert-manager-v1.12.14.tgz b/chart/charts/cert-manager-v1.12.14.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..56f883c038307ac872b76eace97ff6415a8492b3
Binary files /dev/null and b/chart/charts/cert-manager-v1.12.14.tgz differ
diff --git a/chart/charts/gitlab-runner-0.70.0.tgz b/chart/charts/gitlab-runner-0.70.0.tgz
deleted file mode 100644
index c51c4d362d84c3cf2980bfc0ecb661eff89da86d..0000000000000000000000000000000000000000
Binary files a/chart/charts/gitlab-runner-0.70.0.tgz and /dev/null differ
diff --git a/chart/charts/gitlab-runner-0.71.0.tgz b/chart/charts/gitlab-runner-0.71.0.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..7c208e5223edaec89cfc7f30b682c9a4edd7c3d3
Binary files /dev/null and b/chart/charts/gitlab-runner-0.71.0.tgz differ
diff --git a/chart/charts/gitlab-zoekt-1.4.1.tgz b/chart/charts/gitlab-zoekt-1.4.1.tgz
deleted file mode 100644
index 8cff95488a739795ca4dc190368992fe90d6fddc..0000000000000000000000000000000000000000
Binary files a/chart/charts/gitlab-zoekt-1.4.1.tgz and /dev/null differ
diff --git a/chart/charts/gitlab-zoekt-1.4.2.tgz b/chart/charts/gitlab-zoekt-1.4.2.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..36765395602648d5fb8e5ca4009aa572c38e83bb
Binary files /dev/null and b/chart/charts/gitlab-zoekt-1.4.2.tgz differ
diff --git a/chart/charts/gitlab/charts/geo-logcursor/Chart.yaml b/chart/charts/gitlab/charts/geo-logcursor/Chart.yaml
index ff8226eac6fc2acfc806a1452e28512f1081a157..521189fdafac3e36e847ea1c58f3e2ac9cd3f1e9 100644
--- a/chart/charts/gitlab/charts/geo-logcursor/Chart.yaml
+++ b/chart/charts/gitlab/charts/geo-logcursor/Chart.yaml
@@ -1,7 +1,7 @@
 apiVersion: v1
 name: geo-logcursor
-version: 8.5.2
-appVersion: v17.5.2
+version: 8.6.1
+appVersion: v17.6.1
 description: GitLab Geo logcursor
 keywords:
 - gitlab
diff --git a/chart/charts/gitlab/charts/gitaly/Chart.yaml b/chart/charts/gitlab/charts/gitaly/Chart.yaml
index c0857d1636fc9aadc3ed5eab99c3db0ea7eeb780..011719826a03bf7f5dd0e34e348f73daad67d231 100644
--- a/chart/charts/gitlab/charts/gitaly/Chart.yaml
+++ b/chart/charts/gitlab/charts/gitaly/Chart.yaml
@@ -1,7 +1,7 @@
 apiVersion: v1
 name: gitaly
-version: 8.5.2
-appVersion: 17.5.2
+version: 8.6.1
+appVersion: 17.6.1
 description: Git RPC service for handling all the git calls made by GitLab
 keywords:
 - gitlab
diff --git a/chart/charts/gitlab/charts/gitlab-exporter/Chart.yaml b/chart/charts/gitlab/charts/gitlab-exporter/Chart.yaml
index 36149a2d1d51b24acc78645b901562e24eda29e9..45d9a87a0f1b4240f33e1a5721f15ae6ac67d5bd 100644
--- a/chart/charts/gitlab/charts/gitlab-exporter/Chart.yaml
+++ b/chart/charts/gitlab/charts/gitlab-exporter/Chart.yaml
@@ -1,6 +1,6 @@
 apiVersion: v1
 name: gitlab-exporter
-version: 8.5.2
+version: 8.6.1
 appVersion: 15.0.0
 description: Exporter for GitLab Prometheus metrics (e.g. CI, pull mirrors)
 keywords:
diff --git a/chart/charts/gitlab/charts/gitlab-pages/Chart.yaml b/chart/charts/gitlab/charts/gitlab-pages/Chart.yaml
index a19b7ac5653c12ceab1f74cde4a8de0abaa64656..5b6b1e47edda2d1d141561a849d63c78a3c6509f 100644
--- a/chart/charts/gitlab/charts/gitlab-pages/Chart.yaml
+++ b/chart/charts/gitlab/charts/gitlab-pages/Chart.yaml
@@ -1,7 +1,7 @@
 apiVersion: v1
 name: gitlab-pages
-version: 8.5.2
-appVersion: 17.5.2
+version: 8.6.1
+appVersion: 17.6.1
 description: Daemon for serving static websites from GitLab projects
 keywords:
 - gitlab
diff --git a/chart/charts/gitlab/charts/gitlab-shell/Chart.yaml b/chart/charts/gitlab/charts/gitlab-shell/Chart.yaml
index 422c6befda699ad2acb448d87b46fe7fd36f8b2d..b05e62cf635ec7e69fe438f19f1960c68cfd7993 100644
--- a/chart/charts/gitlab/charts/gitlab-shell/Chart.yaml
+++ b/chart/charts/gitlab/charts/gitlab-shell/Chart.yaml
@@ -1,6 +1,6 @@
 apiVersion: v1
 name: gitlab-shell
-version: 8.5.2
+version: 8.6.1
 appVersion: 14.39.0
 description: sshd for Gitlab
 keywords:
diff --git a/chart/charts/gitlab/charts/gitlab-shell/templates/configmap.yml b/chart/charts/gitlab/charts/gitlab-shell/templates/configmap.yml
index e5f808d2d49488e9004a483ce3802481818d1dcb..de5d51bdedd7a25dd6de6c8183a77779d3acc774 100644
--- a/chart/charts/gitlab/charts/gitlab-shell/templates/configmap.yml
+++ b/chart/charts/gitlab/charts/gitlab-shell/templates/configmap.yml
@@ -99,6 +99,9 @@ data:
     {{- end }}
     lfs:
       pure_ssh_protocol: {{ .Values.config.lfs.pureSSHProtocol }}
+    pat:
+      enabled: {{ .Values.config.pat.enabled }}
+      allowed_scopes: {{- .Values.config.pat.allowedScopes | toYaml | nindent 8 }}
   krb5.conf: |
     {{- .Values.config.gssapi.krb5Config | nindent 4 }}
 # Leave this here - This line denotes end of block to the parser.
diff --git a/chart/charts/gitlab/charts/gitlab-shell/values.schema.json b/chart/charts/gitlab/charts/gitlab-shell/values.schema.json
index 5eb139d47efb78e138e24e4bf285b532e7097be8..df60280a44b8f19988739a145a671c665542f7a9 100644
--- a/chart/charts/gitlab/charts/gitlab-shell/values.schema.json
+++ b/chart/charts/gitlab/charts/gitlab-shell/values.schema.json
@@ -156,6 +156,20 @@
           },
           "title": "LFS related settings",
           "type": "object"
+        },
+        "pat": {
+          "properties": {
+            "enabled": {
+              "title": "Enable PAT using SSH",
+              "type": "boolean"
+            },
+            "allowedScopes": {
+              "title": "An array of scopes allowed for PATs generated with SSH",
+              "type": "array"
+            }
+          },
+          "title": "Personal access token (PAT) related settings",
+          "type": "object"
         }
       },
       "required": [
diff --git a/chart/charts/gitlab/charts/gitlab-shell/values.yaml b/chart/charts/gitlab/charts/gitlab-shell/values.yaml
index c9991b6b2bc44629823e996baf33d9e1e6de3ad7..de740f12deabe862f7119604fda2596b8b703363 100644
--- a/chart/charts/gitlab/charts/gitlab-shell/values.yaml
+++ b/chart/charts/gitlab/charts/gitlab-shell/values.yaml
@@ -150,6 +150,9 @@ config:
     servicePrincipalName: ""
   lfs:
     pureSSHProtocol: false
+  pat:
+    enabled: true
+    allowedScopes: []
 
 ## Allow to overwrite under which User and Group the Pod will be running.
 securityContext:
diff --git a/chart/charts/gitlab/charts/kas/Chart.yaml b/chart/charts/gitlab/charts/kas/Chart.yaml
index 6e187def0f6bb016c0653d6b44b51de035abf06e..da9ed96bca8ec9590d16f237b1ced05beea37d19 100644
--- a/chart/charts/gitlab/charts/kas/Chart.yaml
+++ b/chart/charts/gitlab/charts/kas/Chart.yaml
@@ -1,7 +1,7 @@
 apiVersion: v1
 name: kas
-version: 8.5.2
-appVersion: 17.5.2
+version: 8.6.1
+appVersion: 17.6.1
 description: GitLab Agent Server
 keywords:
 - agent
diff --git a/chart/charts/gitlab/charts/mailroom/Chart.yaml b/chart/charts/gitlab/charts/mailroom/Chart.yaml
index 0a39f4474d2ad443b726b5ccb1311306dab10c66..0d158ca9377d323bde0ab6d9f6fc2e9a42957ff8 100644
--- a/chart/charts/gitlab/charts/mailroom/Chart.yaml
+++ b/chart/charts/gitlab/charts/mailroom/Chart.yaml
@@ -1,7 +1,7 @@
 apiVersion: v1
 name: mailroom
-version: 8.5.2
-appVersion: v17.5.2
+version: 8.6.1
+appVersion: v17.6.1
 description: Handling incoming emails
 keywords:
 - gitlab
diff --git a/chart/charts/gitlab/charts/mailroom/templates/deployment.yaml b/chart/charts/gitlab/charts/mailroom/templates/deployment.yaml
index 24e227ea8c97d1cc9044376c60385347bf1eb833..82968a5273192f584a5d211c8cb0feab2bf3e0b9 100644
--- a/chart/charts/gitlab/charts/mailroom/templates/deployment.yaml
+++ b/chart/charts/gitlab/charts/mailroom/templates/deployment.yaml
@@ -28,6 +28,9 @@ spec:
         {{- include "gitlab.podLabels" . | nindent 8 }}
       annotations:
         checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
+      {{- range $key, $value := .Values.annotations }}
+        {{ $key }}: {{ $value | quote }}
+      {{- end }}
     spec:
       {{- if .Values.tolerations }}
       tolerations:
diff --git a/chart/charts/gitlab/charts/mailroom/values.yaml b/chart/charts/gitlab/charts/mailroom/values.yaml
index 98f68d97c68d4ab4c570e5d6357ca7f153614fcb..4bdad07c357e38dae6b51474f559c0a53ef46318 100644
--- a/chart/charts/gitlab/charts/mailroom/values.yaml
+++ b/chart/charts/gitlab/charts/mailroom/values.yaml
@@ -16,6 +16,8 @@ init:
       cpu: 50m
   containerSecurityContext: {}
 
+annotations: {}
+
 # Tolerations for pod scheduling
 tolerations: []
 
diff --git a/chart/charts/gitlab/charts/migrations/Chart.yaml b/chart/charts/gitlab/charts/migrations/Chart.yaml
index 9dec57d4eaf8b9537b9b240805612d7f97fb43be..ec42ef28a3705e6b4610af193c0c7b87d94383d0 100644
--- a/chart/charts/gitlab/charts/migrations/Chart.yaml
+++ b/chart/charts/gitlab/charts/migrations/Chart.yaml
@@ -1,7 +1,7 @@
 apiVersion: v1
 name: migrations
-version: 8.5.2
-appVersion: v17.5.2
+version: 8.6.1
+appVersion: v17.6.1
 description: Database migrations and other versioning tasks for upgrading Gitlab
 keywords:
 - gitlab
diff --git a/chart/charts/gitlab/charts/praefect/Chart.yaml b/chart/charts/gitlab/charts/praefect/Chart.yaml
index a29c54492d253f12115f09feb6607b2b9b676fb3..58d02e8ab91a9b36f041886dc701ace2c97c34e1 100644
--- a/chart/charts/gitlab/charts/praefect/Chart.yaml
+++ b/chart/charts/gitlab/charts/praefect/Chart.yaml
@@ -1,7 +1,7 @@
 apiVersion: v1
 name: praefect
-version: 8.5.2
-appVersion: 17.5.2
+version: 8.6.1
+appVersion: 17.6.1
 description: Praefect is a router and transaction manager for Gitaly, and a required
   component for running a Gitaly Cluster.
 keywords:
diff --git a/chart/charts/gitlab/charts/sidekiq/Chart.yaml b/chart/charts/gitlab/charts/sidekiq/Chart.yaml
index 8bdfc1f2e5b5490dd2764e9d9cdee14161c149a8..b18430f92273506e0bc0323691b1d24ec7c786f5 100644
--- a/chart/charts/gitlab/charts/sidekiq/Chart.yaml
+++ b/chart/charts/gitlab/charts/sidekiq/Chart.yaml
@@ -1,7 +1,7 @@
 apiVersion: v1
 name: sidekiq
-version: 8.5.2
-appVersion: v17.5.2
+version: 8.6.1
+appVersion: v17.6.1
 description: Gitlab Sidekiq for asynchronous task processing in rails
 keywords:
 - gitlab
diff --git a/chart/charts/gitlab/charts/spamcheck/Chart.yaml b/chart/charts/gitlab/charts/spamcheck/Chart.yaml
index a5bd88b833447595850888f0f8f3feded4b02d01..38c3c32a47e99ec82bba5cd175cbafb32789f59d 100644
--- a/chart/charts/gitlab/charts/spamcheck/Chart.yaml
+++ b/chart/charts/gitlab/charts/spamcheck/Chart.yaml
@@ -1,6 +1,6 @@
 apiVersion: v1
 name: spamcheck
-version: 8.5.2
+version: 8.6.1
 appVersion: 1.2.3
 description: GitLab Anti-Spam Engine
 keywords:
diff --git a/chart/charts/gitlab/charts/toolbox/Chart.yaml b/chart/charts/gitlab/charts/toolbox/Chart.yaml
index 09de07e7ec3ff653b83b3890f90ce87d02d74c70..14c4c16d0809c4b4a6b85df1a0f20c399edd683a 100644
--- a/chart/charts/gitlab/charts/toolbox/Chart.yaml
+++ b/chart/charts/gitlab/charts/toolbox/Chart.yaml
@@ -1,7 +1,7 @@
 apiVersion: v1
 name: toolbox
-version: 8.5.2
-appVersion: v17.5.2
+version: 8.6.1
+appVersion: v17.6.1
 description: For manually running rake tasks through kubectl
 keywords:
 - gitlab
diff --git a/chart/charts/gitlab/charts/webservice/Chart.yaml b/chart/charts/gitlab/charts/webservice/Chart.yaml
index ddb8259db5d9615042702cb82319ac20435bc13d..e8bd7bdeb117814cd177609ebcccf49e30f9f796 100644
--- a/chart/charts/gitlab/charts/webservice/Chart.yaml
+++ b/chart/charts/gitlab/charts/webservice/Chart.yaml
@@ -1,7 +1,7 @@
 apiVersion: v1
 name: webservice
-version: 8.5.2
-appVersion: v17.5.2
+version: 8.6.1
+appVersion: v17.6.1
 description: HTTP server for Gitlab
 keywords:
 - gitlab
diff --git a/chart/charts/registry/Chart.yaml b/chart/charts/registry/Chart.yaml
index b882dd0b60f76d23ad010261f3698ac67ae8a38c..e98ebca5c56dbd00c88468136e8775ffccc56f57 100644
--- a/chart/charts/registry/Chart.yaml
+++ b/chart/charts/registry/Chart.yaml
@@ -1,7 +1,7 @@
 apiVersion: v1
 name: registry
 version: 0.7.0
-appVersion: 'v4.10.0-gitlab'
+appVersion: 'v4.13.0-gitlab'
 description: Stateless, highly scalable application that stores and lets you
   distribute container images
 details: Container Registry component of GitLab
diff --git a/chart/charts/registry/templates/_database.tpl b/chart/charts/registry/templates/_database.tpl
index 1168b6f84b76570b723effda5511c9161150bec1..25af0ab05be6b8d8a447e8fd8a94d6e1245db91c 100644
--- a/chart/charts/registry/templates/_database.tpl
+++ b/chart/charts/registry/templates/_database.tpl
@@ -54,6 +54,22 @@ database:
     maxjobretries: {{ .Values.database.backgroundMigrations.maxJobRetries }}
     {{- end }}
   {{- end }}
+  {{- if .Values.database.loadBalancing.enabled }}
+  loadbalancing:
+    enabled: {{ .Values.database.loadBalancing.enabled }}
+    {{- if .Values.database.loadBalancing.nameserver }}
+    {{-   if .Values.database.loadBalancing.nameserver.host }}
+    nameserver: {{ .Values.database.loadBalancing.nameserver.host | quote }}
+    {{-   end }}
+    {{-   if .Values.database.loadBalancing.nameserver.port }}
+    port: {{ .Values.database.loadBalancing.nameserver.port | int }}
+    {{-   end }}
+    {{- end }}
+    record: {{ .Values.database.loadBalancing.record | required "`database.loadBalancing` requires `record` to be provided." | quote }}
+    {{- if .Values.database.loadBalancing.replicaCheckInterval }}
+    replicacheckinterval: {{ .Values.database.loadBalancing.replicaCheckInterval | quote }}
+    {{- end }}
+  {{- end }}
 {{- end }}
 {{- end -}}
 
diff --git a/chart/charts/registry/templates/_helpers.tpl b/chart/charts/registry/templates/_helpers.tpl
index 38f203cd87f437a92cb6513255c56b69e1a6751c..5cab007211ae1f22b353c48d3eaa20219cb3bf7d 100644
--- a/chart/charts/registry/templates/_helpers.tpl
+++ b/chart/charts/registry/templates/_helpers.tpl
@@ -227,3 +227,14 @@ affinity:
   {{- end -}}
 {{- end -}}
 {{- end }}
+
+{{/*
+Render the standard labels for resources related to the registry migration.
+These differ from the standard labels so the migration related Pod's are not
+matched by the registry PDB and Deployment selectors.
+*/}}
+{{- define "registry.migration.standardLabels" -}}
+{{- $labels := (include "gitlab.standardLabels" .) | fromYaml }}
+{{- $_ := set $labels "app" "registry-migrations" }}
+{{- toYaml $labels }}
+{{- end -}}
diff --git a/chart/charts/registry/templates/migrations-job.yaml b/chart/charts/registry/templates/migrations-job.yaml
index b81d5edb304e29e73959dac3beca0fffb009b711..34d27a0b19ceceb940847f33cdb67d99f9177bcf 100644
--- a/chart/charts/registry/templates/migrations-job.yaml
+++ b/chart/charts/registry/templates/migrations-job.yaml
@@ -7,7 +7,7 @@ metadata:
   name: {{ template "registry.migrations.jobname" . }}
   namespace: {{ .Release.Namespace }}
   labels:
-    {{- include "gitlab.standardLabels" . | nindent 4 }}
+    {{- include "registry.migration.standardLabels" . | nindent 4 }}
     {{- include "gitlab.commonLabels" . | nindent 4 }}
   {{- if .Values.database.migrations.annotations }}
   annotations:
@@ -27,7 +27,7 @@ spec:
       {{-   end }}
       {{- end }}
       labels:
-        {{- include "gitlab.standardLabels" . | nindent 8 }}
+        {{- include "registry.migration.standardLabels" . | nindent 8 }}
         {{- include "gitlab.commonLabels" . | nindent 8 }}
         {{- include "gitlab.podLabels" . | nindent 8 }}
     spec:
diff --git a/chart/charts/registry/values.yaml b/chart/charts/registry/values.yaml
index 6289c4ea062b49d7e95702d5a80d60c46aad9372..919dbc7d676ede5dc526361aca02c52599698f4b 100644
--- a/chart/charts/registry/values.yaml
+++ b/chart/charts/registry/values.yaml
@@ -1,6 +1,6 @@
 image:
   repository: registry.gitlab.com/gitlab-org/build/cng/gitlab-container-registry
-  tag: 'v4.10.0-gitlab'
+  tag: 'v4.13.0-gitlab'
   # pullPolicy: IfNotPresent
 # pullSecrets: []
 
@@ -400,6 +400,11 @@ database:
   name: registry
   sslmode: disable
   ssl: {}
+  # Load balancing settings
+  # WARNING: This is an experimental feature and must not be used in production.
+  # https://gitlab.com/gitlab-org/container-registry/-/blob/master/docs/configuration.md#loadbalancing
+  loadBalancing:
+    enabled: false
   migrations:
     enabled: true
     activeDeadlineSeconds: 3600
diff --git a/chart/doc/charts/gitlab/gitlab-shell/index.md b/chart/doc/charts/gitlab/gitlab-shell/index.md
index cc7b30b2a0f0d636b6bbd7e7f84d5e5a5bb5f4be..746454e104ac5d8da862f7fd5812dce09d1df9aa 100644
--- a/chart/doc/charts/gitlab/gitlab-shell/index.md
+++ b/chart/doc/charts/gitlab/gitlab-shell/index.md
@@ -36,7 +36,7 @@ controlled by `global.shell.port`.
 
 | Parameter                                                | Default                                                                                                                                                                     | Description                                                                                                                                                                                        |
 |----------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `affinity`                             | `{}`                                                       | [Affinity rules](../index.md#affinity) for pod assignment                                                                                                                                                               |
+| `affinity`                                               | `{}`                                                                                                                                                                        | [Affinity rules](../index.md#affinity) for pod assignment                                                                                                                                          |
 | `annotations`                                            |                                                                                                                                                                             | Pod annotations                                                                                                                                                                                    |
 | `podLabels`                                              |                                                                                                                                                                             | Supplemental Pod labels. Will not be used for selectors.                                                                                                                                           |
 | `common.labels`                                          |                                                                                                                                                                             | Supplemental labels that are applied to all objects created by this chart.                                                                                                                         |
@@ -51,13 +51,15 @@ controlled by `global.shell.port`.
 | `config.ciphers`                                         | `[aes128-gcm@openssh.com, chacha20-poly1305@openssh.com, aes256-gcm@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr]`                                                       | Specify the ciphers allowed.                                                                                                                                                                       |
 | `config.kexAlgorithms`                                   | `[curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1]` | Specifies the available KEX (Key Exchange) algorithms.                                                                                                                                             |
 | `config.macs`                                            | `[hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1]`                                                                   | Specifies the available MAC (message authentication code algorithms.                                                                                                                               |
-| `config.publicKeyAlgorithms`                    | `[]`                                                                                                                                                                        | Custom list of public key algorithms. If empty, the default algorithms are used.                                                                                                                   |
+| `config.publicKeyAlgorithms`                             | `[]`                                                                                                                                                                        | Custom list of public key algorithms. If empty, the default algorithms are used.                                                                                                                   |
 | `config.gssapi.enabled`                                  | `false`                                                                                                                                                                     | Enable GSS-API support for the `gitlab-sshd` daemon                                                                                                                                                |
 | `config.gssapi.keytab.secret`                            |                                                                                                                                                                             | The name of a Kubernetes secret holding the keytab for the gssapi-with-mic authentication method                                                                                                   |
 | `config.gssapi.keytab.key`                               | `keytab`                                                                                                                                                                    | Key holding the keytab in the Kubernetes secret                                                                                                                                                    |
 | `config.gssapi.krb5Config`                               |                                                                                                                                                                             | Content of the `/etc/krb5.conf` file in the GitLab Shell container                                                                                                                                 |
 | `config.gssapi.servicePrincipalName`                     |                                                                                                                                                                             | The Kerberos service name to be used by the `gitlab-sshd` daemon                                                                                                                                   |
-| `config.lfs.pureSSHProtocol`                    | `false`                                                                                                                                                                     | Enable LFS Pure SSH protocol support                                                                                                                                                               |
+| `config.lfs.pureSSHProtocol`                             | `false`                                                                                                                                                                     | Enable LFS Pure SSH protocol support                                                                                                                                                               |
+| `config.pat.enabled`                                     | `true`                                                                                                                                                                      | Enable PAT using SSH                                                                                                                                                                               |
+| `config.pat.allowedScopes`                               | `[]`                                                                                                                                                                        | An array of scopes allowed for PATs generated with SSH                                                                                                                                             |
 | `opensshd.supplemental_config`                           |                                                                                                                                                                             | Supplemental configuration, appended to `sshd_config`. Strict alignment to [man page](https://manpages.debian.org/bookworm/openssh-server/sshd_config.5.en.html)                                   |
 | `deployment.livenessProbe.initialDelaySeconds`           | 10                                                                                                                                                                          | Delay before liveness probe is initiated                                                                                                                                                           |
 | `deployment.livenessProbe.periodSeconds`                 | 10                                                                                                                                                                          | How often to perform the liveness probe                                                                                                                                                            |
@@ -93,10 +95,10 @@ controlled by `global.shell.port`.
 | `image.tag`                                              | `master`                                                                                                                                                                    | Shell image tag                                                                                                                                                                                    |
 | `init.image.repository`                                  |                                                                                                                                                                             | initContainer image                                                                                                                                                                                |
 | `init.image.tag`                                         |                                                                                                                                                                             | initContainer image tag                                                                                                                                                                            |
-| `init.containerSecurityContext`                          |                                                                                                                                                                             | initContainer specific [securityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#securitycontext-v1-core)                                                   |
-| `init.containerSecurityContext.allowPrivilegeEscalation` | `false`                                                                                                                                                                     | initContainer specific: Controls whether a process can gain more privileges than its parent process                                                                                      |
-| `init.containerSecurityContext.runAsNonRoot`             | `true`                                                                                                                                                                      | initContainer specific: Controls whether the container runs with a non-root user                                                                                                         |
-| `init.containerSecurityContext.capabilities.drop`        | `[ "ALL" ]`                                                                                                                                                                 | initContainer specific: Removes [Linux capabilities](https://man7.org/linux/man-pages/man7/capabilities.7.html) for the container                                                        |
+| `init.containerSecurityContext`                          |                                                                                                                                                                             | initContainer specific [securityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#securitycontext-v1-core)                                                             |
+| `init.containerSecurityContext.allowPrivilegeEscalation` | `false`                                                                                                                                                                     | initContainer specific: Controls whether a process can gain more privileges than its parent process                                                                                                |
+| `init.containerSecurityContext.runAsNonRoot`             | `true`                                                                                                                                                                      | initContainer specific: Controls whether the container runs with a non-root user                                                                                                                   |
+| `init.containerSecurityContext.capabilities.drop`        | `[ "ALL" ]`                                                                                                                                                                 | initContainer specific: Removes [Linux capabilities](https://man7.org/linux/man-pages/man7/capabilities.7.html) for the container                                                                  |
 | `keda.enabled`                                           | `false`                                                                                                                                                                     | Use [KEDA](https://keda.sh/) `ScaledObjects` instead of `HorizontalPodAutoscalers`                                                                                                                 |
 | `keda.pollingInterval`                                   | `30`                                                                                                                                                                        | The interval to check each trigger on                                                                                                                                                              |
 | `keda.cooldownPeriod`                                    | `300`                                                                                                                                                                       | The period to wait after the last trigger reported active before scaling the resource back to 0                                                                                                    |
@@ -112,7 +114,7 @@ controlled by `global.shell.port`.
 | `priorityClassName`                                      |                                                                                                                                                                             | [Priority class](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) assigned to pods.                                                                               |
 | `replicaCount`                                           | `1`                                                                                                                                                                         | Shell replicas                                                                                                                                                                                     |
 | `serviceLabels`                                          | `{}`                                                                                                                                                                        | Supplemental service labels                                                                                                                                                                        |
-| `service.allocateLoadBalancerNodePorts`         | Not set, to use Kubernetes default value.                                                                                                                                   | Allows to disable NodePort allocation on LoadBalancer service, see the [documentation](https://kubernetes.io/docs/concepts/services-networking/service/#load-balancer-nodeport-allocation)         |
+| `service.allocateLoadBalancerNodePorts`                  | Not set, to use Kubernetes default value.                                                                                                                                   | Allows to disable NodePort allocation on LoadBalancer service, see the [documentation](https://kubernetes.io/docs/concepts/services-networking/service/#load-balancer-nodeport-allocation)         |
 | `service.externalTrafficPolicy`                          | `Cluster`                                                                                                                                                                   | Shell service external traffic policy (Cluster or Local)                                                                                                                                           |
 | `service.internalPort`                                   | `2222`                                                                                                                                                                      | Shell internal port                                                                                                                                                                                |
 | `service.nodePort`                                       |                                                                                                                                                                             | Sets shell nodePort if set                                                                                                                                                                         |
@@ -120,11 +122,11 @@ controlled by `global.shell.port`.
 | `service.type`                                           | `ClusterIP`                                                                                                                                                                 | Shell service type                                                                                                                                                                                 |
 | `service.loadBalancerIP`                                 |                                                                                                                                                                             | IP address to assign to LoadBalancer (if supported)                                                                                                                                                |
 | `service.loadBalancerSourceRanges`                       |                                                                                                                                                                             | List of IP CIDRs allowed access to LoadBalancer (if supported)                                                                                                                                     |
-| `serviceAccount.annotations`                    | `{}`                                                                                                                                                                        | ServiceAccount annotations                                                                                                                                                                         |
-| `serviceAccount.automountServiceAccountToken`   | `false`                                                                                                                                                                     | Indicates whether or not the default ServiceAccount access token should be mounted in pods                                                                                                         |
-| `serviceAccount.create`                         | `false`                                                                                                                                                                     | Indicates whether or not a ServiceAccount should be created                                                                                                                                        |
-| `serviceAccount.enabled`                        | `false`                                                                                                                                                                     | Indicates whether or not to use a ServiceAccount                                                                                                                                                   |
-| `serviceAccount.name`                           |                                                                                                                                                                             | Name of the ServiceAccount. If not set, the full chart name is used                                                                                                                           |
+| `serviceAccount.annotations`                             | `{}`                                                                                                                                                                        | ServiceAccount annotations                                                                                                                                                                         |
+| `serviceAccount.automountServiceAccountToken`            | `false`                                                                                                                                                                     | Indicates whether or not the default ServiceAccount access token should be mounted in pods                                                                                                         |
+| `serviceAccount.create`                                  | `false`                                                                                                                                                                     | Indicates whether or not a ServiceAccount should be created                                                                                                                                        |
+| `serviceAccount.enabled`                                 | `false`                                                                                                                                                                     | Indicates whether or not to use a ServiceAccount                                                                                                                                                   |
+| `serviceAccount.name`                                    |                                                                                                                                                                             | Name of the ServiceAccount. If not set, the full chart name is used                                                                                                                                |
 | `securityContext.fsGroup`                                | `1000`                                                                                                                                                                      | Group ID under which the pod should be started                                                                                                                                                     |
 | `securityContext.runAsUser`                              | `1000`                                                                                                                                                                      | User ID under which the pod should be started                                                                                                                                                      |
 | `securityContext.fsGroupChangePolicy`                    |                                                                                                                                                                             | Policy for changing ownership and permission of the volume (requires Kubernetes 1.23)                                                                                                              |
@@ -137,7 +139,7 @@ controlled by `global.shell.port`.
 | `sshDaemon`                                              | `openssh`                                                                                                                                                                   | Selects which SSH daemon would be run, possible values (`openssh`, `gitlab-sshd`)                                                                                                                  |
 | `tolerations`                                            | `[]`                                                                                                                                                                        | Toleration labels for pod assignment                                                                                                                                                               |
 | `traefik.entrypoint`                                     | `gitlab-shell`                                                                                                                                                              | When using traefik, which traefik entrypoint to use for GitLab Shell. Defaults to `gitlab-shell`                                                                                                   |
-| `traefik.tcpMiddlewares`                        | `[]`                                                                                                                                                                        | When using traefik, which TCP Middlewares to add to IngressRouteTCP resource. No middlewares by default                                                                                            |
+| `traefik.tcpMiddlewares`                                 | `[]`                                                                                                                                                                        | When using traefik, which TCP Middlewares to add to IngressRouteTCP resource. No middlewares by default                                                                                            |
 | `workhorse.serviceName`                                  | `webservice`                                                                                                                                                                | Workhorse service name (by default, Workhorse is a part of the webservice Pods / Service)                                                                                                          |
 | `metrics.enabled`                                        | `false`                                                                                                                                                                     | If a metrics endpoint should be made available for scraping (requires `sshDaemon=gitlab-sshd`).                                                                                                    |
 | `metrics.port`                                           | `9122`                                                                                                                                                                      | Metrics endpoint port                                                                                                                                                                              |
diff --git a/chart/doc/charts/gitlab/mailroom/index.md b/chart/doc/charts/gitlab/mailroom/index.md
index 82ffa038f0eb181a608a00306c90ea8e460b5fe4..d87cd30ae8682fc3cd938b0ba3780bd4fcacd174 100644
--- a/chart/doc/charts/gitlab/mailroom/index.md
+++ b/chart/doc/charts/gitlab/mailroom/index.md
@@ -31,6 +31,8 @@ init:
     requests:
       cpu: 50m
 
+annotations: {}
+
 # Tolerations for pod scheduling
 tolerations: []
 affinity: {}
@@ -81,6 +83,7 @@ serviceAccount:
 | Parameter                              | Description                                                                                                                                                                                        | Default                                                                                                                                                                 |
 | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------                                                                                                              |
 | `affinity`                             | `{}`                                                       | [Affinity rules](../index.md#affinity) for pod assignment                                                                                                                                                               |
+| `annotations`                          | Pod annotations.                                                                                                                                                                                   | `{}`                                                                                                                                                                    |
 | `deployment.strategy`                  | Allows one to configure the update strategy utilized by the deployment                                                                                                                             | `{}`                                                                                                                                                                    |
 | `enabled`                              | Mailroom enablement flag                                                                                                                                                                           | `true`                                                                                                                                                                  |
 | `hpa.behavior`                         | Behavior contains the specifications for up- and downscaling behavior (requires `autoscaling/v2beta2` or higher)                                                                                   | `{scaleDown: {stabilizationWindowSeconds: 300 }}`                                                                                                                       |
diff --git a/chart/doc/charts/globals.md b/chart/doc/charts/globals.md
index 8e3e3e7d40c8aa8ce43a960a317bd5a3d340f612..123be6d1c86f0b492fe9a3d368bccf36fe5bbac6 100644
--- a/chart/doc/charts/globals.md
+++ b/chart/doc/charts/globals.md
@@ -1643,8 +1643,8 @@ kubectl create secret generic <secret_object_name> --from-literal=secretKey=<duo
 
 ### OmniAuth
 
-GitLab can leverage OmniAuth to allow users to sign in using Twitter, GitHub, Google,
-and other popular services. Expanded documentation can be found in the [OmniAuth documentation](https://docs.gitlab.com/ee/integration/omniauth.html)
+GitLab can leverage OmniAuth to allow users to sign in using GitHub, Google,
+and other popular services. Expanded documentation can be found in the [OmniAuth documentation](https://docs.gitlab.com/ee/integration/omniauth.html#configure-common-settings)
 for GitLab.
 
 ```yaml
@@ -1666,20 +1666,20 @@ omniauth:
   # - name: group_saml
 ```
 
-| Name                      | Type    | Default     | Description |
-|:------------------------- |:-------:|:----------- |:----------- |
-| `allowBypassTwoFactor`    |         |             | Allows users to log in with the specified providers without two factor authentication. Can be set to `true`, `false`, or an array of providers. See [Bypassing two factor authentication](https://docs.gitlab.com/ee/integration/omniauth.html#bypassing-two-factor-authentication). |
-| `allowSingleSignOn`       | Array | `['saml']`     | Enable the automatic creation of accounts when signing in with OmniAuth. Input the [name of the OmniAuth Provider](https://docs.gitlab.com/ee/integration/omniauth.html#supported-providers). |
-| `autoLinkLdapUser`        | Boolean | `false`     | Can be used if you have LDAP / ActiveDirectory integration enabled. When enabled, users automatically created through OmniAuth will be linked to their LDAP entry as well. |
-| `autoLinkSamlUser`        | Boolean | `false`     | Can be used if you have SAML integration enabled. When enabled, users automatically created through OmniAuth will be linked to their SAML entry as well. |
-| `autoLinkUser`            |         |             | Allows users authenticating via an OmniAuth provider to be automatically linked to a current GitLab user if their emails match. Can be set to `true`, `false`, or an array of providers. |
-| `autoSignInWithProvider`  |         | `nil`       | Single provider name allowed to automatically sign in. This should match the name of the provider, such as `saml` or `google_oauth2`. |
-| `blockAutoCreatedUsers`   | Boolean | `true`      | If `true` auto created users will be blocked by default and will have to be unblocked by an administrator before they are able to sign in. |
-| `enabled`                 | Boolean | `false`     | Enable / disable the use of OmniAuth with GitLab. |
-| `externalProviders`       |         | `[]`        | You can define which OmniAuth providers you want to be `external`, so that all users **creating accounts, or logging in via these providers** will be unable to access internal projects. You will need to use the full name of the provider, like `google_oauth2` for Google. See [Configure OmniAuth Providers as External](https://docs.gitlab.com/ee/integration/omniauth.html#configure-omniauth-providers-as-external). |
-| `providers`               |         | `[]`        | [See below](#providers). |
-| `syncProfileAttributes`   |         | `['email']` | List of profile attributes to sync from the provider upon login. See [Keep OmniAuth user profiles up to date](https://docs.gitlab.com/ee/integration/omniauth.html#keep-omniauth-user-profiles-up-to-date) for options. |
-| `syncProfileFromProvider` |         | `[]`        | List of provider names that GitLab should automatically sync profile information from. Entries should match the name of the provider, such as `saml` or `google_oauth2`. See [Keep OmniAuth user profiles up to date](https://docs.gitlab.com/ee/integration/omniauth.html#keep-omniauth-user-profiles-up-to-date). |
+| Name                      | Type    | Default     |
+|:------------------------- |:-------:|:----------- |
+| `allowBypassTwoFactor`    | Boolean or Array |   `false` |
+| `allowSingleSignOn`       | Boolean or Array   | `['saml']`  |
+| `autoLinkLdapUser`        | Boolean | `false`     | 
+| `autoLinkSamlUser`        | Boolean | `false`     |
+| `autoLinkUser`            | Boolean or Array | `false` |
+| `autoSignInWithProvider`  |         | `nil`       |
+| `blockAutoCreatedUsers`   | Boolean | `true`      |
+| `enabled`                 | Boolean | `false`     |
+| `externalProviders`       |         | `[]`        |
+| `providers`               |         | `[]`        |
+| `syncProfileAttributes`   |         | `['email']` |
+| `syncProfileFromProvider` |         | `[]`        |
 
 #### providers
 
diff --git a/chart/doc/charts/registry/index.md b/chart/doc/charts/registry/index.md
index f9d7c6d8d8d917fd80708facf878295000b8490f..7f7de4421bde49c846243769cb0b5d4f9674cad0 100644
--- a/chart/doc/charts/registry/index.md
+++ b/chart/doc/charts/registry/index.md
@@ -76,7 +76,7 @@ registry:
       interval: 24h
       dryrun: false
   image:
-    tag: 'v4.10.0-gitlab'
+    tag: 'v4.13.0-gitlab'
     pullPolicy: IfNotPresent
   annotations:
   service:
@@ -186,7 +186,7 @@ If you chose to deploy this chart as a standalone, remove the `registry` at the
 | `image.pullPolicy`                                       |                                                                      | Pull policy for the registry image                                                                                                                                                                                                                                                                                                                 |
 | `image.pullSecrets`                                      |                                                                      | Secrets to use for image repository                                                                                                                                                                                                                                                                                                                |
 | `image.repository`                                       | `registry.gitlab.com/gitlab-org/build/cng/gitlab-container-registry` | Registry image                                                                                                                                                                                                                                                                                                                                     |
-| `image.tag`                                              | `v4.10.0-gitlab`                                                     | Version of the image to use                                                                                                                                                                                                                                                                                                                        |
+| `image.tag`                                              | `v4.13.0-gitlab`                                                     | Version of the image to use                                                                                                                                                                                                                                                                                                                        |
 | `init.image.repository`                                  |                                                                      | initContainer image                                                                                                                                                                                                                                                                                                                                |
 | `init.image.tag`                                         |                                                                      | initContainer image tag                                                                                                                                                                                                                                                                                                                            |
 | `init.containerSecurityContext`                          |                                                                      | initContainer specific [securityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#securitycontext-v1-core)                                                                                                                                                                                                             |
@@ -241,6 +241,11 @@ If you chose to deploy this chart as a standalone, remove the `registry` at the
 | `database.pool.maxopen`                                  | `0`                                                                  | The maximum number of open connections to the database. If `maxopen` is less than `maxidle`, then `maxidle` is reduced to match the `maxopen` limit. Zero or not specified means unlimited open connections.                                                                                                                                       |
 | `database.pool.maxlifetime`                              | `0`                                                                  | The maximum amount of time a connection may be reused. Expired connections may be closed lazily before reuse. Zero or not specified means unlimited reuse.                                                                                                                                                                                         |
 | `database.pool.maxidletime`                              | `0`                                                                  | The maximum amount of time a connection may be idle. Expired connections may be closed lazily before reuse. Zero or not specified means unlimited duration.                                                                                                                                                                                        |
+| `database.loadBalancing.enabled`                         | `false`                                                              | Enable database load balancing. This is an experimental feature and must not be used in production environments.                                                                                                                                                                                        |
+| `database.loadBalancing.nameserver.host`                      | `localhost`                                                          | The host of the nameserver to use for looking up the DNS record.        |
+| `database.loadBalancing.nameserver.port`                            | `8600`                                                               | The port of the nameserver to use for looking up the DNS record.                                           |
+| `database.loadBalancing.record`                          |                                                                      | The SRV record to look up. This option is required for service discovery to work.      |
+| `database.loadBalancing.replicaCheckInterval`            | `1m`                                                                 | The minimum amount of time between checking the status of a replica.      |
 | `database.migrations.enabled`                            | `true`                                                               | Enable the migrations job to automatically run migrations upon initial deployment and upgrades of the Chart. Note that migrations can also be run manually from within any running Registry pods.                                                                                                                                                  |
 | `database.migrations.activeDeadlineSeconds`              | `3600`                                                               | Set the [activeDeadlineSeconds](https://kubernetes.io/docs/concepts/workloads/controllers/job/#job-termination-and-cleanup) on the migrations job.                                                                                                                                                                                                 |
 | `database.migrations.annotations`                        | `{}`                                                                 | Additional annotations to add to the migrations job.                                                                                                                                                                                                                                                                                               |
@@ -424,7 +429,7 @@ You can change the included version of the Registry and `pullPolicy`.
 
 Default settings:
 
-- `tag: 'v4.10.0-gitlab'`
+- `tag: 'v4.13.0-gitlab'`
 - `pullPolicy: 'IfNotPresent'`
 
 ## Configuring the `service`
@@ -993,7 +998,7 @@ See the [administration documentation](https://docs.gitlab.com/ee/administration
 before enabling this feature.
 
 NOTE:
-This feature requires PostgreSQL 12 or newer.
+This feature requires PostgreSQL 13 or newer.
 
 ```yaml
 database:
@@ -1030,6 +1035,13 @@ database:
     jobInterval: 10s
 ```
 
+#### Load balancing
+
+WARNING:
+This is an experimental feature under active development and must not be used in production.
+
+The `loadBalancing` section allows configuring [database load balancing](https://gitlab.com/gitlab-org/container-registry/-/blob/master/docs/configuration.md#loadbalancing). The [Redis cache](#redis-cache) must be enabled for this feature to work.
+
 #### Manage the database
 
 See the [Container registry metadata database](metadata_database.md) page for
diff --git a/chart/doc/development/environment_setup.md b/chart/doc/development/environment_setup.md
index c3b3520e9921407852562e27b811598a3e853a75..8fbb8dc56b2ef41b9103bba5eb0d67d535a75ca4 100644
--- a/chart/doc/development/environment_setup.md
+++ b/chart/doc/development/environment_setup.md
@@ -91,7 +91,7 @@ Details on installing the chart from the Git repository can be found in the [dev
 
 ## Developer license
 
-A [developer license](https://handbook.gitlab.com/handbook/developer-onboarding/#working-on-gitlab-ee-developer-licenses) can
+A [developer license](https://handbook.gitlab.com/handbook/engineering/developer-onboarding/#working-on-gitlab-ee-developer-licenses) can
 be used for chart development to test features that are only functional in a licensed environment.
 
 To use a developer license follow the [instructions for Enterprise licenses](../installation/secrets.md#initial-enterprise-license)
diff --git a/chart/doc/development/gitlab-qa/index.md b/chart/doc/development/gitlab-qa/index.md
index 3fd2d6bf4f0067fd4b23466701d42985318b2a3e..40584f35f17f697bb84792c7fe2befd06ba5a907 100644
--- a/chart/doc/development/gitlab-qa/index.md
+++ b/chart/doc/development/gitlab-qa/index.md
@@ -96,14 +96,11 @@ when end-to-end tests are grouped by various [RSpec metadata](https://docs.gitla
 - _Smoke suite_: small [subset of fast end-to-end functional tests](https://docs.gitlab.com/ee/development/testing_guide/smoke.html)
 to quickly ensure that basic functionality is working
   - Enable this suite via `export QA_OPTIONS="--tag smoke"`
-- _Smoke and Blocking suite_: subset of smoke and blocking tests to verify that the
-major functionality is working
-  - Enable this suite via `export QA_OPTIONS="--tag smoke --tag blocking --tag ~skip_live_env --tag ~orchestrated  --tag ~github"`
 - _Full suite_: running all tests against the environment. Test run will take more than an hour.
   - Enable this suite via `--tag ~skip_live_env --tag ~orchestrated --tag ~requires_praefect --tag ~github --tag ~requires_git_protocol_v2 --tag ~transient`
 
 Selecting a test suite depends on the use case. In the majority of cases, running
-Smoke and Blocking suite should give quick and consistent test results
+Smoke suite should give quick and consistent test results
 as well as a good test coverage. This suite is being used as a sanity
 check in [GitLab.com deployments](https://handbook.gitlab.com/handbook/engineering/deployments-and-releases/deployments/#gitlabcom-deployments-process).
 
diff --git a/chart/doc/development/troubleshooting.md b/chart/doc/development/troubleshooting.md
index 79bcb660ade01f17bdaa6ca42caf9af4fb9b14c3..ebeefaca141dad17ecf2c6b89477391b43ed670a 100644
--- a/chart/doc/development/troubleshooting.md
+++ b/chart/doc/development/troubleshooting.md
@@ -50,22 +50,27 @@ production.
 
 Certain jobs in CI use a backup of GitLab during testing. Complete the steps below to update this backup when needed:
 
-1. Generate the desired backup by running a CI pipeline for the matching stable branch.
-   1. For example: run a CI pipeline for branch `5-4-stable` if current release is `5-5-stable` to create a backup of 14.4.
-   1. Note that this will require the Maintainer role.
-1. In that pipeline, cancel the QA jobs (but leave the spec tests) so that we don't get extra data in the backup.
-1. Let the spec tests finish. They will have installed the old backup, and migrated the instance to the version we want.
-1. Edit the `gitlab-runner` Deployment replicas to 0, so the Runner turns off.
-1. Log in to the UI and delete the Runner from the admin section. This should help avoid cipher errors later.
+1. Install the most latest version of the chart that is compatible with the current backup
+   into a development cluster.
+1. [Restore the backup](../backup-restore/restore.md#restoring-the-backup-file) currently
+   used in CI. The backup is available at `https://storage.cloud.google.com/gitlab-charts-ci/test-backups/<BACKUP_PREFIX>_gitlab_backup.tar`.
+   The current `BACKUP_PREFIX` is defined in `.gitlab-ci.yml`.
+
+   - If you are using the bundled MinIO with a self-signed certificate you may want
+     to use `awscli` instead of `s3cmd` to avoid SSL errors.
+     To do this, [first configure `awscli`](https://min.io/docs/minio/linux/integrations/aws-cli-with-minio.html)
+     inside your toolbox, and then pass `--s3tool awscli --aws-s3-endpoint-url http://gitlab-minio-svc:9000` to
+     your backup and restore commands.
+
 1. [Ensure the background migrations all complete](https://docs.gitlab.com/ee/update/#check-for-background-migrations-before-upgrading), forcing them to complete if needed.
-1. Delete the `toolbox` Pod to ensure there is no existing `tmp` data, keeping the backup small.
-1. If any manual work is needed to modify the contents of the backup, complete it before moving on to the next step.
-1. [Create a new backup](../backup-restore/backup.md) from the new `toolbox` Pod.
-1. Download the new backup from the CI instance of MinIO in the `gitlab-backups` bucket.
-1. Upload the backup to the proper location in Google Cloud Storage (GCS):
+1. Upgrade the Helm release to use the new CNG images which have the new backup/restore
+   changes by setting `global.gitlabVersion=<CNG tag>`.
+1. [Create a new backup](../backup-restore/backup.md) from the `toolbox` Pod.
+1. Download the new backup from the `gitlab-backups` bucket.
+1. Ask in `#g_distribution` to upload the backup to Google Cloud Storage (GCS):
    1. Project: `cloud-native-182609`, path: `gitlab-charts-ci/test-backups/`
    1. Edit access and add `Entity=Public`, `Name=allUsers`, and `Access=Reader`.
-1. Finally, update `.variables.TEST_BACKUP_PREFIX` in `.gitlab-ci.yml` to the new version of the backup.
+1. Finally, update `.variables.TEST_BACKUP_PREFIX` in `.gitlab-ci.yml` and open a merge request.
    - For example: If the filename is `1708623546_2024_02_22_16.9.1-ee_gitlab_backup`, then the prefix is `1708623546_2024_02_22_16.9.1-ee`.
 
 Future pipelines will now use the new backup artifact during testing.
diff --git a/chart/doc/installation/cloud/index.md b/chart/doc/installation/cloud/index.md
index 463fc4c6942d80bf2c702346492cccb4091d741a..ee8df737bc9a68c6c62610a66631c356cd9a0646 100644
--- a/chart/doc/installation/cloud/index.md
+++ b/chart/doc/installation/cloud/index.md
@@ -21,17 +21,18 @@ you can reduce the defaults to fit into a smaller cluster.
 
 The GitLab Helm chart supports the following Kubernetes releases:
 
-| Kubernetes release | Status     | Minimum GitLab version | Architectures | End of life |
-|--------------------|------------|------------------------|---------------|-------------|
-| 1.30               | [In development/qualification](https://gitlab.com/gitlab-org/distribution/team-tasks/-/issues/1498)  | 17.0 | x86-64 | 2025-06-28 |
-| 1.29               | Supported  | 17.0                   | x86-64        | 2025-02-28  |
-| 1.28               | Supported  | 17.0                   | x86-64        | 2024-10-28  |
-| 1.27               | Supported  | 16.6                   | x86-64        | 2024-06-28  |
-| 1.26               | Deprecated | 16.5                   | x86-64        | 2024-02-28  |
-| 1.25               | Deprecated | 16.5                   | x86-64        | 2023-10-28  |
-| 1.24               | Deprecated | 16.5                   | x86-64        | 2023-07-28  |
-| 1.23               | Deprecated | 16.5                   | x86-64        | 2023-02-28  |
-| 1.22               | Deprecated | 16.5                   | x86-64        | 2022-10-28  |
+| Kubernetes release | Status      | Minimum GitLab version | Architectures | End of life |
+|--------------------|-------------|------------------------|---------------|-------------|
+| 1.31               | [In development/qualification](https://gitlab.com/gitlab-org/distribution/team-tasks/-/issues/1602)  | | x86-64 | 2025-10-28 |
+| 1.30               | Supported   | 17.6                   | x86-64        | 2025-06-28  |
+| 1.29               | Supported   | 17.0                   | x86-64        | 2025-02-28  |
+| 1.28               | Supported   | 17.0                   | x86-64        | 2024-10-28  |
+| 1.27               | Unsupported | 16.6                   | x86-64        | 2024-06-28  |
+| 1.26               | Unsupported | 16.5                   | x86-64        | 2024-02-28  |
+| 1.25               | Unsupported | 16.5                   | x86-64        | 2023-10-28  |
+| 1.24               | Unsupported | 16.5                   | x86-64        | 2023-07-28  |
+| 1.23               | Unsupported | 16.5                   | x86-64        | 2023-02-28  |
+| 1.22               | Unsupported | 16.5                   | x86-64        | 2022-10-28  |
 
 The GitLab Helm Chart aims to support new minor Kubernetes releases three months after their initial release.
 We welcome reports made to our [issue tracker](https://gitlab.com/gitlab-org/charts/gitlab/-/issues) about compatibility issues in releases newer than those listed above.
diff --git a/chart/doc/installation/command-line-options.md b/chart/doc/installation/command-line-options.md
index 6f599ee351bbaceb3879e2476b1271bf93ef0ad1..c93e34a46e60b9a27e9f9e8ff9469c882978f76d 100644
--- a/chart/doc/installation/command-line-options.md
+++ b/chart/doc/installation/command-line-options.md
@@ -47,7 +47,7 @@ helm inspect values gitlab/gitlab
 | `global.psql.password.secret`                  | Global name of the secret containing the psql password                                      | _Uses in-cluster non-production PostgreSQL_   |
 | `global.registry.bucket`                       | registry bucket name                                                                        | `registry`                                    |
 | `global.service.annotations`                   | Annotations to add to every `Service`                                                       | {}                                            |
-| `global.raills.sessionStore.sessionCookieTokenPrefix`  | Prefix for the generated session cookies                                        | ""                                            |
+| `global.rails.sessionStore.sessionCookieTokenPrefix`  | Prefix for the generated session cookies                                        | ""                                            |
 | `global.deployment.annotations`                | Annotations to add to every `Deployment`                                                    | {}                                            |
 | `global.time_zone`                             | Global time zone                                                                            | UTC                                           |
 
@@ -232,8 +232,9 @@ See the [instructions for creating secrets](secrets.md).
 | `nginx-ingress.rbac.createRole`        | Create and use namespaced role        | true    |
 | `prometheus.rbac.create`               | Create and use RBAC resources         | true    |
 
-If you're setting `nginx-ingress.rbac.create` to `false` to configure the RBAC rules by yourself, on
-GitLab chart v8.5.0+, you'll [need to also configure extra rules](../releases/8_0.md#upgrade-to-85x).
+If you're setting `nginx-ingress.rbac.create` to `false` to configure the RBAC rules by yourself, you
+might need to add specific RBAC rules
+[depending on your chart version](../releases/8_0.md#upgrade-to-86x-851-843-836).
 
 ## Advanced NGINX Ingress configuration
 
diff --git a/chart/doc/installation/database_upgrade.md b/chart/doc/installation/database_upgrade.md
index 022d3c7fd97696260a74ef2d84f7305ddb910fd3..58b96aec8f8a51b9088095ce4f3d1afa7fdc0a16 100644
--- a/chart/doc/installation/database_upgrade.md
+++ b/chart/doc/installation/database_upgrade.md
@@ -31,7 +31,7 @@ not a drop in replacement. Manual steps need to be performed to upgrade the data
 The steps have been documented in the [upgrade steps](#steps-for-upgrading-the-bundled-postgresql).
 
 NOTE:
-As part of the `4.0.0` release of this chart, we upgraded the bundled [PostgreSQL chart](https://github.com/bitnami/charts/tree/master/bitnami/postgresql) from `7.7.0` to `8.9.4`.
+As part of the `4.0.0` release of this chart, we upgraded the bundled [PostgreSQL chart](https://github.com/bitnami/charts/tree/main/bitnami/postgresql) from `7.7.0` to `8.9.4`.
 This is not a drop in replacement. Manual steps need to be performed to upgrade the database.
 The steps have been documented in the [upgrade steps](#steps-for-upgrading-the-bundled-postgresql).
 
diff --git a/chart/doc/installation/tools.md b/chart/doc/installation/tools.md
index eaca389131d3facb7db0f6a121efcd9a47dad148..eb412ab5487efb40f8f8c3f974ee72b36701d500 100644
--- a/chart/doc/installation/tools.md
+++ b/chart/doc/installation/tools.md
@@ -279,7 +279,7 @@ If the endpoint can be and is TLS-enabled they will also set the
 `gitlab.com/prometheus_scheme: "https"` annotation, as well as the
 `prometheus.io/scheme: "https"` annotation, either of which can be used with a
 `relabel_config` to set the Prometheus `__scheme__` target label.
-The [Prometheus TLS values example](https://gitlab.com/gitlab-org/charts/gitlab/-/tree/master/examples/prometheus/values-tls.yaml)
+The [Prometheus TLS values example](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/examples/prometheus/values-tls.yaml)
 includes a `relabel_config` that targets `__scheme__` using the
 `gitlab.com/prometheus_scheme: "https"` annotation.
 
diff --git a/chart/doc/installation/upgrade.md b/chart/doc/installation/upgrade.md
index 9722b659a4ec4cca7f2ad2f6c9dd6c4b9fa644fd..22ab06abe6bbe2bdd9ad13334e00b4d39654fcf7 100644
--- a/chart/doc/installation/upgrade.md
+++ b/chart/doc/installation/upgrade.md
@@ -40,7 +40,7 @@ This safely replaces the behavior of `--reuse-values`
 NOTE:
 If you're upgrading to the `7.0` version of the chart, follow the [manual upgrade steps for 7.0](#upgrade-to-version-70).
 If you're upgrading to the `6.0` version of the chart, follow the [manual upgrade steps for 6.0](#upgrade-to-version-60).
-If you're upgrading to an older version of the chart, follow the [upgrade steps for older versions](upgrade_old.md).
+If you're upgrading to an older version of the chart, follow the [upgrade steps for older versions](#older-upgrade-instructions).
 
 Before you upgrade, reflect on your set values and if you've possibly "over-configured" your settings. We expect you to maintain a small list of modified values, and leverage most of the chart defaults. If you've explicitly set a large number of settings by:
 
diff --git a/chart/doc/installation/version_mappings.md b/chart/doc/installation/version_mappings.md
index a6640bbbe64438785a08ba70dd794e3f914c3c88..d34d60831a262986c4cabbaa66dfe9f8c3c515e9 100644
--- a/chart/doc/installation/version_mappings.md
+++ b/chart/doc/installation/version_mappings.md
@@ -33,7 +33,12 @@ The table below maps some of the key previous supported chart versions and suppo
 
 | Chart version | GitLab version |
 |---------------|----------------|
+| 8.6.1 | 17.6.1 |
+| 8.6.0 | 17.6.0 |
+| 8.6.1 | 17.6.1 |
+| 8.6.0 | 17.6.0 |
 | 8.5.2 | 17.5.2 |
+<<<<<<< HEAD
 | 8.5.1         | 17.5.1 |
 | 8.5.0         | 17.5.0 |
 | 8.4.2         | 17.4.2 |
@@ -300,6 +305,277 @@ The table below maps some of the key previous supported chart versions and suppo
 | 6.0.2         | 15.0.2 |
 | 6.0.1         | 15.0.1 |
 | 6.0.0         | 15.0.0 |
+=======
+| 8.5.1 | 17.5.1 |
+| 8.5.0 | 17.5.0 |
+| 8.4.4 | 17.4.4 |
+| 8.4.3 | 17.4.3 |
+| 8.4.2 | 17.4.2 |
+| 8.4.1 | 17.4.1 |
+| 8.4.0 | 17.4.0 |
+| 8.3.7 | 17.3.7 |
+| 8.3.6 | 17.3.6 |
+| 8.3.5 | 17.3.5 |
+| 8.3.4 | 17.3.4 |
+| 8.3.3 | 17.3.3 |
+| 8.3.2 | 17.3.2 |
+| 8.3.1 | 17.3.1 |
+| 8.3.0 | 17.3.0 |
+| 8.2.9 | 17.2.9 |
+| 8.2.8 | 17.2.8 |
+| 8.2.7 | 17.2.7 |
+| 8.2.6 | 17.2.6 |
+| 8.2.5 | 17.2.5 |
+| 8.2.4 | 17.2.4 |
+| 8.2.3 | 17.2.3 |
+| 8.2.2 | 17.2.2 |
+| 8.2.1 | 17.2.1 |
+| 8.2.0 | 17.2.0 |
+| 8.1.8 | 17.1.8 |
+| 8.1.7 | 17.1.7 |
+| 8.1.6 | 17.1.6 |
+| 8.1.5 | 17.1.5 |
+| 8.1.4 | 17.1.4 |
+| 8.1.3 | 17.1.3 |
+| 8.1.2 | 17.1.2 |
+| 8.1.1 | 17.1.1 |
+| 8.1.0 | 17.1.0 |
+| 8.0.8 | 17.0.8 |
+| 8.0.7 | 17.0.7 |
+| 8.0.6 | 17.0.6 |
+| 8.0.5 | 17.0.5 |
+| 8.0.4 | 17.0.4 |
+| 8.0.3 | 17.0.3 |
+| 8.0.2 | 17.0.2 |
+| 8.0.1 | 17.0.1 |
+| 8.0.0 | 17.0.0 |
+| 7.11.10 | 16.11.10 |
+| 7.11.9 | 16.11.9 |
+| 7.11.8 | 16.11.8 |
+| 7.11.7 | 16.11.7 |
+| 7.11.6 | 16.11.6 |
+| 7.11.5 | 16.11.5 |
+| 7.11.4 | 16.11.4 |
+| 7.11.3 | 16.11.3 |
+| 7.11.2 | 16.11.2 |
+| 7.11.1 | 16.11.1 |
+| 7.11.0 | 16.11.0 |
+| 7.10.10 | 16.10.10 |
+| 7.10.9 | 16.10.9 |
+| 7.10.8 | 16.10.8 |
+| 7.10.7 | 16.10.7 |
+| 7.10.6 | 16.10.6 |
+| 7.10.5 | 16.10.5 |
+| 7.10.4 | 16.10.4 |
+| 7.10.3 | 16.10.3 |
+| 7.10.2 | 16.10.2 |
+| 7.10.1 | 16.10.1 |
+| 7.10.0 | 16.10.0 |
+| 7.9.11 | 16.9.11 |
+| 7.9.10 | 16.9.10 |
+| 7.9.9 | 16.9.9 |
+| 7.9.8 | 16.9.8 |
+| 7.9.7 | 16.9.7 |
+| 7.9.6 | 16.9.6 |
+| 7.9.5 | 16.9.5 |
+| 7.9.4 | 16.9.4 |
+| 7.9.3 | 16.9.3 |
+| 7.9.2 | 16.9.2 |
+| 7.9.1 | 16.9.1 |
+| 7.9.0 | 16.9.0 |
+| 7.8.10 | 16.8.10 |
+| 7.8.9 | 16.8.9 |
+| 7.8.8 | 16.8.8 |
+| 7.8.7 | 16.8.7 |
+| 7.8.6 | 16.8.6 |
+| 7.8.5 | 16.8.5 |
+| 7.8.4 | 16.8.4 |
+| 7.8.3 | 16.8.3 |
+| 7.8.2 | 16.8.2 |
+| 7.8.1 | 16.8.1 |
+| 7.8.0 | 16.8.0 |
+| 7.7.10 | 16.7.10 |
+| 7.7.9 | 16.7.9 |
+| 7.7.8 | 16.7.8 |
+| 7.7.7 | 16.7.7 |
+| 7.7.6 | 16.7.6 |
+| 7.7.5 | 16.7.5 |
+| 7.7.4 | 16.7.4 |
+| 7.7.3 | 16.7.3 |
+| 7.7.2 | 16.7.2 |
+| 7.7.1 | 16.7.1 |
+| 7.7.0 | 16.7.0 |
+| 7.6.10 | 16.6.10 |
+| 7.6.9 | 16.6.9 |
+| 7.6.8 | 16.6.8 |
+| 7.6.7 | 16.6.7 |
+| 7.6.6 | 16.6.6 |
+| 7.6.5 | 16.6.5 |
+| 7.6.4 | 16.6.4 |
+| 7.6.3 | 16.6.3 |
+| 7.6.2 | 16.6.2 |
+| 7.6.1 | 16.6.1 |
+| 7.6.0 | 16.6.0 |
+| 7.5.10 | 16.5.10 |
+| 7.5.9 | 16.5.9 |
+| 7.5.8 | 16.5.8 |
+| 7.5.7 | 16.5.7 |
+| 7.5.6 | 16.5.6 |
+| 7.5.5 | 16.5.5 |
+| 7.5.4 | 16.5.4 |
+| 7.5.3 | 16.5.3 |
+| 7.5.2 | 16.5.2 |
+| 7.5.1 | 16.5.1 |
+| 7.5.0 | 16.5.0 |
+| 7.4.7 | 16.4.7 |
+| 7.4.6 | 16.4.6 |
+| 7.4.5 | 16.4.5 |
+| 7.4.4 | 16.4.4 |
+| 7.4.3 | 16.4.3 |
+| 7.4.2 | 16.4.2 |
+| 7.4.1 | 16.4.1 |
+| 7.4.0 | 16.4.0 |
+| 7.3.9 | 16.3.9 |
+| 7.3.8 | 16.3.8 |
+| 7.3.7 | 16.3.7 |
+| 7.3.6 | 16.3.6 |
+| 7.3.5 | 16.3.5 |
+| 7.3.4 | 16.3.4 |
+| 7.3.3 | 16.3.3 |
+| 7.3.2 | 16.3.2 |
+| 7.3.1 | 16.3.1 |
+| 7.3.0 | 16.3.0 |
+| 7.2.11 | 16.2.11 |
+| 7.2.10 | 16.2.10 |
+| 7.2.9 | 16.2.9 |
+| 7.2.8 | 16.2.8 |
+| 7.2.7 | 16.2.7 |
+| 7.2.6 | 16.2.6 |
+| 7.2.5 | 16.2.5 |
+| 7.2.4 | 16.2.4 |
+| 7.2.3 | 16.2.3 |
+| 7.2.2 | 16.2.2 |
+| 7.2.1 | 16.2.1 |
+| 7.2.0 | 16.2.0 |
+| 7.1.8 | 16.1.8 |
+| 7.1.7 | 16.1.7 |
+| 7.1.6 | 16.1.6 |
+| 7.1.5 | 16.1.5 |
+| 7.1.4 | 16.1.4 |
+| 7.1.3 | 16.1.3 |
+| 7.1.2 | 16.1.2 |
+| 7.1.1 | 16.1.1 |
+| 7.1.0 | 16.1.0 |
+| 7.0.10 | 16.0.10 |
+| 7.0.9 | 16.0.9 |
+| 7.0.8 | 16.0.8 |
+| 7.0.7 | 16.0.7 |
+| 7.0.6 | 16.0.6 |
+| 7.0.5 | 16.0.5 |
+| 7.0.4 | 16.0.4 |
+| 7.0.3 | 16.0.3 |
+| 7.0.2 | 16.0.2 |
+| 7.0.1 | 16.0.1 |
+| 7.0.0 | 16.0.0 |
+| 6.11.13 | 15.11.13 |
+| 6.11.12 | 15.11.12 |
+| 6.11.11 | 15.11.11 |
+| 6.11.10 | 15.11.10 |
+| 6.11.9 | 15.11.9 |
+| 6.11.8 | 15.11.8 |
+| 6.11.7 | 15.11.7 |
+| 6.11.6 | 15.11.6 |
+| 6.11.5 | 15.11.5 |
+| 6.11.4 | 15.11.4 |
+| 6.11.3 | 15.11.3 |
+| 6.11.2 | 15.11.2 |
+| 6.11.1 | 15.11.1 |
+| 6.11.0 | 15.11.0 |
+| 6.10.8 | 15.10.8 |
+| 6.10.7 | 15.10.7 |
+| 6.10.6 | 15.10.6 |
+| 6.10.5 | 15.10.5 |
+| 6.10.4 | 15.10.4 |
+| 6.10.3 | 15.10.3 |
+| 6.10.2 | 15.10.2 |
+| 6.10.1 | 15.10.1 |
+| 6.10.0 | 15.10.0 |
+| 6.9.8 | 15.9.8 |
+| 6.9.7 | 15.9.7 |
+| 6.9.6 | 15.9.6 |
+| 6.9.5 | 15.9.5 |
+| 6.9.4 | 15.9.4 |
+| 6.9.3 | 15.9.3 |
+| 6.9.2 | 15.9.2 |
+| 6.9.1 | 15.9.1 |
+| 6.9.0 | 15.9.0 |
+| 6.8.6 | 15.8.6 |
+| 6.8.5 | 15.8.5 |
+| 6.8.4 | 15.8.4 |
+| 6.8.3 | 15.8.3 |
+| 6.8.2 | 15.8.2 |
+| 6.8.1 | 15.8.1 |
+| 6.8.0 | 15.8.0 |
+| 6.7.9 | 15.7.9 |
+| 6.7.8 | 15.7.8 |
+| 6.7.7 | 15.7.7 |
+| 6.7.6 | 15.7.6 |
+| 6.7.5 | 15.7.5 |
+| 6.7.3 | 15.7.3 |
+| 6.7.2 | 15.7.2 |
+| 6.7.1 | 15.7.1 |
+| 6.7.0 | 15.7.0 |
+| 6.6.8 | 15.6.8 |
+| 6.6.7 | 15.6.7 |
+| 6.6.6 | 15.6.6 |
+| 6.6.4 | 15.6.4 |
+| 6.6.3 | 15.6.3 |
+| 6.6.2 | 15.6.2 |
+| 6.6.1 | 15.6.1 |
+| 6.6.0 | 15.6.0 |
+| 6.5.9 | 15.5.9 |
+| 6.5.8 | 15.5.7 |
+| 6.5.7 | 15.5.6 |
+| 6.5.6 | 15.5.5 |
+| 6.5.5 | 15.5.4 |
+| 6.5.4 | 15.5.3 |
+| 6.5.3 | 15.5.3 |
+| 6.5.2 | 15.5.2 |
+| 6.5.1 | 15.5.1 |
+| 6.5.0 | 15.5.0 |
+| 6.4.6 | 15.4.6 |
+| 6.4.5 | 15.4.5 |
+| 6.4.4 | 15.4.4 |
+| 6.4.3 | 15.4.3 |
+| 6.4.2 | 15.4.2 |
+| 6.4.1 | 15.4.1 |
+| 6.4.0 | 15.4.0 |
+| 6.3.5 | 15.3.5 |
+| 6.3.4 | 15.3.4 |
+| 6.3.3 | 15.3.3 |
+| 6.3.2 | 15.3.2 |
+| 6.3.1 | 15.3.1 |
+| 6.3.0 | 15.3.0 |
+| 6.2.5 | 15.2.5 |
+| 6.2.4 | 15.2.4 |
+| 6.2.3 | 15.2.3 |
+| 6.2.2 | 15.2.2 |
+| 6.2.1 | 15.2.1 |
+| 6.2.0 | 15.2.0 |
+| 6.1.6 | 15.1.6 |
+| 6.1.5 | 15.1.5 |
+| 6.1.4 | 15.1.4 |
+| 6.1.3 | 15.1.3 |
+| 6.1.2 | 15.1.2 |
+| 6.1.1 | 15.1.1 |
+| 6.1.0 | 15.1.0 |
+| 6.0.5 | 15.0.5 |
+| 6.0.4 | 15.0.4 |
+| 6.0.3 | 15.0.3 |
+| 6.0.2 | 15.0.2 |
+| 6.0.1 | 15.0.1 |
+| 6.0.0 | 15.0.0 |
+>>>>>>> update "chart" (https://gitlab.com/gitlab-org/charts/gitlab) from "v8.6.1" (444b06a2195c8f8932847de2b727b63cbc3b8836) to "v8.6.1" (0a325d09171fcfa4a3e828052cb273f148a8ff04)
 
 To see the full list, you can issue the following command with Helm:
 
diff --git a/chart/doc/releases/8_0.md b/chart/doc/releases/8_0.md
index 502254537879a874d58c6ffe76775a05c4f3fd1b..9bb2a83f371f56a62f16fc484713400add3d0368 100644
--- a/chart/doc/releases/8_0.md
+++ b/chart/doc/releases/8_0.md
@@ -20,13 +20,23 @@ See [GitLab 17 changes](https://docs.gitlab.com/ee/update/versions/gitlab_17_cha
 To upgrade to the `8.0` version of the chart, you first need to upgrade to the latest `7.11.x`
 release of the chart. Check the [version mapping details](../installation/version_mappings.md) for the latest patch.
 
-### Upgrade to 8.5.x
+### Upgrade to 8.6.0
+
+The `app` label of the Job that performs the database migrations for the registry metadata database has
+been changed from `registry` to `registry-migrations` to address issues with the selectors of the
+container registry `Deployment` and `PodDisruptionBudget`.
+
+If you don't have the registry metadata database enabled, or don't use it in any external tools
+such as monitoring or logging solutions, you don't need to do anything. If you do use this label,
+please update it accordingly.
+
+### Upgrade to 8.6.x, 8.5.1, 8.4.3, 8.3.6
 
 If you haven't modified the GitLab chart `nginx-ingress.rbac.create` value, or it's set to `true`,
 you can skip this section.
 
-In v8.5.0, the Ingress NGINX Controller image was bumped to v1.11.2, but the Ingress NGINX Controller chart version is
-still on 4.0.6. The old `v1.3.1` controller image is now deprecated and schedule for removal in GitLab chart 8.8.
+In these versions, the Ingress NGINX Controller image was bumped to v1.11.2, but the Ingress NGINX Controller chart version is
+still on 4.0.6. The old `v1.3.1` controller image is now deprecated and schedule for removal in GitLab chart 9.0.
 
 By default the `v1.11.2` will be set. The chart will automatically fallback to `v1.3.1` if the you're setting
 `nginx-ingress.rbac.create` to `false`. This is because `v1.11.2` requires new RBAC rules, which we added to our
diff --git a/chart/doc/troubleshooting/index.md b/chart/doc/troubleshooting/index.md
index b93aff3e184316f0ca4222a8c769d00b6127f6d4..943203227334c0096077d9a80cbcabc5bd861adf 100644
--- a/chart/doc/troubleshooting/index.md
+++ b/chart/doc/troubleshooting/index.md
@@ -106,7 +106,7 @@ to ensure that the application does not malfunction to the schema not matching
 expectations of the codebase.
 
 1. Find the `migrations` Job. `kubectl get job -lapp=migrations`
-1. Find the Pod being run by the Job. `kubectl get pod -ljob-name=<job-name>`
+1. Find the Pod being run by the Job. `kubectl get pod -lbatch.kubernetes.io/job-name=<job-name>`
 1. Examine the output, checking the `STATUS` column.
 
 If the `STATUS` is `Running`, continue. If the `STATUS` is `Completed`, the application containers should start shortly after the next check passes.
diff --git a/chart/requirements.lock b/chart/requirements.lock
index e80fb74f4d44e698d16d50173f07f715673afd89..46d6c248829192f631deb595b2b09725240fa764 100644
--- a/chart/requirements.lock
+++ b/chart/requirements.lock
@@ -13,7 +13,7 @@ dependencies:
   version: '*.*.*'
 - name: cert-manager
   repository: https://charts.jetstack.io/
-  version: v1.12.13
+  version: v1.12.14
 - name: prometheus
   repository: https://prometheus-community.github.io/helm-charts
   version: 15.18.0
@@ -22,7 +22,7 @@ dependencies:
   version: 12.5.2
 - name: gitlab-runner
   repository: https://charts.gitlab.io/
-  version: 0.70.0
+  version: 0.71.0
 - name: redis
   repository: https://charts.bitnami.com/bitnami
   version: 16.13.2
@@ -34,7 +34,7 @@ dependencies:
   version: '*.*.*'
 - name: gitlab-zoekt
   repository: https://charts.gitlab.io/
-  version: 1.4.1
+  version: 1.4.2
 - name: gluon
   repository: oci://registry1.dso.mil/bigbang
   version: 0.5.3
@@ -44,5 +44,5 @@ dependencies:
 - name: kubernetes-ingress
   repository: https://haproxytech.github.io/helm-charts
   version: 1.32.0
-digest: sha256:229c6b103fdb12ad42d13a565912f9a3aa5d5c426f4c7be6559e2dd765ad796c
-generated: "2024-11-12T12:11:32.508232-06:00"
+digest: sha256:208bdd8f1c59e101010235eb006510a3eb4ff24677f7fb1ec0d93b888d242792
+generated: "2024-12-06T12:04:32.305073916-06:00"
diff --git a/chart/requirements.yaml b/chart/requirements.yaml
index 3fa2f53e1a56285a2c827103f2bde9a4af83d51d..7848c324813d4402ce5af7b4593c403d42b71ea6 100644
--- a/chart/requirements.yaml
+++ b/chart/requirements.yaml
@@ -8,7 +8,7 @@ dependencies:
 - name: registry
   version: '*.*.*'
 - name: cert-manager
-  version: v1.12.13
+  version: v1.12.14
   repository: https://charts.jetstack.io/
   condition: certmanager.install
   alias: certmanager
@@ -21,7 +21,7 @@ dependencies:
   repository: https://charts.bitnami.com/bitnami
   condition: postgresql.install
 - name: gitlab-runner
-  version: 0.70.1
+  version: 0.71.0
   repository: https://charts.gitlab.io/
   condition: gitlab-runner.install
 - name: redis
@@ -36,7 +36,7 @@ dependencies:
   version: '*.*.*'
   alias: nginx-ingress-geo
 - name: gitlab-zoekt
-  version: 1.4.1
+  version: 1.4.2
   repository: https://charts.gitlab.io/
   condition: gitlab-zoekt.install
 - name: gluon
diff --git a/chart/scripts/ci/arm_nodeselectors.yaml b/chart/scripts/ci/arm_nodeselectors.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..9ab65e6313cd747be57d7e49e600b7d7f97bbbc2
--- /dev/null
+++ b/chart/scripts/ci/arm_nodeselectors.yaml
@@ -0,0 +1,39 @@
+---
+
+global:
+  nodeSelector:
+    kubernetes.io/arch: arm64
+
+minio:
+  nodeSelector:
+    kubernetes.io/arch: amd64
+
+gitlab-runner:
+  nodeSelector:
+    kubernetes.io/arch: arm64
+
+postgresql:
+  primary:
+    nodeSelector:
+      kubernetes.io/arch: arm64
+  readReplicas:
+    nodeSelector:
+      kubernetes.io/arch: arm64
+  backup.cronjob.labels:
+    nodeSelector:
+      kubernetes.io/arch: arm64
+
+# Redis fails with arm64
+# redis:
+#   master:
+#     nodeSelector:
+#       kubernetes.io/arch: arm64
+#   replica:
+#     nodeSelector:
+#       kubernetes.io/arch: arm64
+
+
+nginx-ingress:
+  nodeSelector:
+    kubernetes.io/arch: amd64
+
diff --git a/chart/scripts/ci/autodevops.sh b/chart/scripts/ci/autodevops.sh
index a50bde0b96f2b360c9ec888dabf8b39c8f4237e1..804203ea0620ca36bbc853ad5eabd53bff8e2a1e 100644
--- a/chart/scripts/ci/autodevops.sh
+++ b/chart/scripts/ci/autodevops.sh
@@ -8,15 +8,26 @@ export CI_CONTAINER_NAME=ci_job_build_${CI_JOB_ID}
 
 # Derive the Helm RELEASE argument from CI_ENVIRONMENT_SLUG
 if [[ $CI_ENVIRONMENT_SLUG =~ ^[^-]+-review ]]; then
+  # if multiarch deployment is on - we will be deploying *two*
+  # charts - one for "amd64" and second for "arm64" thus the need
+  # to avoid name collision:
+  if [ "${DEPLOY_MULTIARCH}" == "true" ]; then
+    RELEASE_NAME="rvw-a-${REVIEW_REF_PREFIX}${CI_COMMIT_SHORT_SHA}"
+  else
+    RELEASE_NAME=rvw-${REVIEW_REF_PREFIX}${CI_COMMIT_SHORT_SHA}
+  fi
   # if a "review", use $REVIEW_REF_PREFIX$CI_COMMIT_SHORT_SHA
-  RELEASE_NAME=rvw-${REVIEW_REF_PREFIX}${CI_COMMIT_SHORT_SHA}
   # Trim release name to leave room for prefixes/suffixes
   RELEASE_NAME=${RELEASE_NAME:0:30}
   # Trim any hyphens in the suffix
   RELEASE_NAME=${RELEASE_NAME%-}
 else
   # otherwise, use CI_ENVIRONMENT_SLUG
-  RELEASE_NAME=$CI_ENVIRONMENT_SLUG
+  if [ "${DEPLOY_MULTIARCH}" == "true" ]; then
+    RELEASE_NAME="a-${CI_ENVIRONMENT_SLUG}"
+  else
+    RELEASE_NAME=$CI_ENVIRONMENT_SLUG
+  fi
 fi
 export RELEASE_NAME
 
@@ -43,6 +54,7 @@ function previousDeployFailed() {
 }
 
 function deploy() {
+  echo "DEPLOY_MULTIARCH: $DEPLOY_MULTIARCH"
   # Cleanup and previous installs, as FAILED and PENDING_UPGRADE will cause errors with `upgrade`
   if [ "$RELEASE_NAME" != "production" ] && previousDeployFailed ; then
     echo "Deployment in bad state, cleaning up $RELEASE_NAME"
@@ -154,10 +166,14 @@ CIYAML
 
     SENTRY_CONFIGURATION="-f ci.sentry.yaml"
   fi
-
+  MULTIARCH_CONFIGURATION=""
+  if [ "${DEPLOY_MULTIARCH}" == "true" ]; then
+    MULTIARCH_CONFIGURATION="-f scripts/ci/arm_nodeselectors.yaml"
+  fi
   helm upgrade --install \
     $WAIT \
     ${SENTRY_CONFIGURATION} \
+    ${MULTIARCH_CONFIGURATION} \
     -f ci.details.yaml \
     -f ci.scale.yaml \
     -f ci.psql.yaml \
diff --git a/chart/spec/configuration/gitlab_shell_spec.rb b/chart/spec/configuration/gitlab_shell_spec.rb
index 8db825143a3487213a37388af4d30f8afefe44bf..7588cbd780e81ee5c395942ea34d9181fc41eb0a 100644
--- a/chart/spec/configuration/gitlab_shell_spec.rb
+++ b/chart/spec/configuration/gitlab_shell_spec.rb
@@ -264,4 +264,69 @@ describe 'gitlab-shell configuration' do
       end
     end
   end
+
+  context 'for PAT' do
+    let(:enabled) { nil }
+    let(:allowed_scopes) { nil }
+
+    let(:values) do
+      YAML.safe_load(%(
+        gitlab:
+          gitlab-shell:
+            config:
+              pat:
+                enabled: #{enabled}
+                allowedScopes: #{allowed_scopes}
+      )).deep_merge(default_values)
+    end
+
+    let(:config) { t.dig('ConfigMap/test-gitlab-shell', 'data', 'config.yml.tpl') }
+
+    let(:rendered_config) do
+      rendered = RuntimeTemplate.gomplate(raw_template: config)
+      YAML.safe_load(rendered, aliases: true)
+    end
+
+    context 'when unset' do
+      it 'renders default settings for pat' do
+        expect_successful_exit_code
+
+        expect(rendered_config['pat']['enabled']).to eq(true)
+        expect(rendered_config['pat']['allowed_scopes']).to eq([])
+      end
+    end
+
+    context 'when PAT disabled' do
+      let(:enabled) { false }
+
+      it 'renders pat.enabled as disabled' do
+        expect_successful_exit_code
+
+        expect(rendered_config['pat']['enabled']).to eq(false)
+        expect(rendered_config['pat']['allowed_scopes']).to eq([])
+      end
+    end
+
+    context 'when PAT enabled' do
+      let(:enabled) { true }
+
+      it 'renders pat.enabled as enabled' do
+        expect_successful_exit_code
+
+        expect(rendered_config['pat']['enabled']).to eq(true)
+        expect(rendered_config['pat']['allowed_scopes']).to eq([])
+      end
+    end
+
+    context 'when PAT allowed_scopes are set' do
+      let(:allowed_scopes) { ['read_repository', 'read_api'] }
+
+      it 'renders pat.allowed_scopes' do
+        expect_successful_exit_code
+
+        expect(rendered_config['pat']['enabled']).to eq(true)
+        expect(rendered_config['pat']['allowed_scopes']).to match_array(['read_repository', 'read_api'])
+      end
+    end
+  end
 end
diff --git a/chart/spec/configuration/mailroom_spec.rb b/chart/spec/configuration/mailroom_spec.rb
index 143dcc1256f2757d061d9ad94bde7bb13e2aa3e8..1b94ccc49adc39412e67bf6c992b9b6c307557b4 100644
--- a/chart/spec/configuration/mailroom_spec.rb
+++ b/chart/spec/configuration/mailroom_spec.rb
@@ -453,6 +453,22 @@ describe 'Mailroom configuration' do
     end
   end
 
+  context 'When customer provides additional annotations' do
+    let(:values) do
+      YAML.safe_load(%(
+        gitlab:
+          mailroom:
+            annotations:
+              test-annotation: mailroom-annotation-value
+      )).deep_merge(default_values)
+    end
+    it 'Populates the additional annotations in the expected manner' do
+      t = HelmTemplate.new(values)
+      expect(t.exit_code).to eq(0), "Unexpected error code #{t.exit_code} -- #{t.stderr}"
+      expect(t.dig('Deployment/test-mailroom', 'spec', 'template', 'metadata', 'annotations')).to include('test-annotation' => 'mailroom-annotation-value')
+    end
+  end
+
   context 'When customer provides additional labels' do
     let(:values) do
       YAML.safe_load(%(
diff --git a/chart/spec/configuration/registry_spec.rb b/chart/spec/configuration/registry_spec.rb
index 92bb95f448d176da3b95eb9483cf6f6daff7e8d8..2c0210d97b90e3f6b20bbc0e831308d04f0bd700 100644
--- a/chart/spec/configuration/registry_spec.rb
+++ b/chart/spec/configuration/registry_spec.rb
@@ -427,6 +427,140 @@ describe 'registry configuration' do
           end
         end
       end
+
+      describe 'database loadBalancing config' do
+        context 'when replicaCheckInterval is provided' do
+          let(:values) do
+            YAML.safe_load(%(
+              registry:
+                redis:
+                  cache:
+                    enabled: true
+                database:
+                  enabled: true
+                  loadBalancing:
+                    enabled: true
+                    record: db-replica-registry.service.consul
+                    replicaCheckInterval: 1s
+            )).deep_merge(default_values)
+          end
+
+          it 'populates the replicacheckinterval setting correctly' do
+            t = HelmTemplate.new(values)
+            expect(t.exit_code).to eq(0), "Unexpected error code #{t.exit_code} -- #{t.stderr}"
+
+            expect(t.dig('ConfigMap/test-registry', 'data', 'config.yml.tpl')).to include(
+              <<~CONFIG
+              database:
+                enabled: true
+                host: "test-postgresql.default.svc"
+                port: 5432
+                user: registry
+                password: "DB_PASSWORD_FILE"
+                dbname: registry
+                sslmode: disable
+                loadbalancing:
+                  enabled: true
+                  record: "db-replica-registry.service.consul"
+                  replicacheckinterval: "1s"
+              CONFIG
+            )
+          end
+        end
+
+        context 'when replicaCheckInterval is not provided' do
+          let(:values) do
+            YAML.safe_load(%(
+              registry:
+                redis:
+                  cache:
+                    enabled: true
+                database:
+                  enabled: true
+                  loadBalancing:
+                    enabled: true
+                    record: db-replica-registry.service.consul
+            )).deep_merge(default_values)
+          end
+
+          it 'does not include the replicaCheckInterval setting' do
+            t = HelmTemplate.new(values)
+            expect(t.exit_code).to eq(0), "Unexpected error code #{t.exit_code} -- #{t.stderr}"
+
+            expect(t.dig('ConfigMap/test-registry', 'data', 'config.yml.tpl')).not_to include('replicacheckinterval')
+          end
+        end
+
+        context 'when nameserver.host and nameserver.port are provided' do
+          let(:values) do
+            YAML.safe_load(%(
+              registry:
+                redis:
+                  cache:
+                    enabled: true
+                database:
+                  enabled: true
+                  loadBalancing:
+                    enabled: true
+                    record: db-replica-registry.service.consul
+                    nameserver:
+                      host: "nameserver.example.com"
+                      port: 5353
+            )).deep_merge(default_values)
+          end
+
+          it 'populates the nameserver host and port settings correctly' do
+            t = HelmTemplate.new(values)
+            expect(t.exit_code).to eq(0), "Unexpected error code #{t.exit_code} -- #{t.stderr}"
+
+            expect(t.dig('ConfigMap/test-registry', 'data', 'config.yml.tpl')).to include(
+              <<~CONFIG
+              database:
+                enabled: true
+                host: "test-postgresql.default.svc"
+                port: 5432
+                user: registry
+                password: "DB_PASSWORD_FILE"
+                dbname: registry
+                sslmode: disable
+                loadbalancing:
+                  enabled: true
+                  nameserver: "nameserver.example.com"
+                  port: 5353
+                  record: "db-replica-registry.service.consul"
+              CONFIG
+            )
+          end
+        end
+
+        context 'when nameserver.host and nameserver.port are not provided' do
+          let(:values) do
+            YAML.safe_load(%(
+              registry:
+                redis:
+                  cache:
+                    enabled: true
+                database:
+                  enabled: true
+                  loadBalancing:
+                    enabled: true
+                    record: db-replica-registry.service.consul
+            )).deep_merge(default_values)
+          end
+
+          it 'does not include the nameserver or port settings' do
+            t = HelmTemplate.new(values)
+            expect(t.exit_code).to eq(0), "Unexpected error code #{t.exit_code} -- #{t.stderr}"
+
+            # there are other `port` attributes in the output, so we need to isolate the `loadbalancing` section prior to validations
+            loadbalancing_block = t.dig('ConfigMap/test-registry', 'data', 'config.yml.tpl').match(/loadbalancing:\n(?:.*\n)*?/)
+
+            expect(loadbalancing_block).not_to be_nil
+            expect(loadbalancing_block.to_s).not_to include('nameserver')
+            expect(loadbalancing_block.to_s).not_to include('port')
+          end
+        end
+      end
     end
 
     describe 'redis cache config' do
diff --git a/chart/spec/features/backups_spec.rb b/chart/spec/features/backups_spec.rb
index 3aa9bce530c4b3ca5b76e4d741a328561b526c34..8e7595a361efdb7337076c76757872a343b42773 100644
--- a/chart/spec/features/backups_spec.rb
+++ b/chart/spec/features/backups_spec.rb
@@ -28,7 +28,7 @@ describe "Restoring a backup" do
     stdout, status = restore_from_backup(skip: 'db')
     fail stdout unless status.success?
 
-    stdout, status = set_runner_token
+    stdout, status = update_application_settings
     fail stdout unless status.success?
 
     stdout, status = enable_legacy_runner_registration
diff --git a/chart/spec/gitlab_test_helper.rb b/chart/spec/gitlab_test_helper.rb
index 3474abbc01ca9608dc5f949183fb516ea5183bc0..2b3aa2b6416390cf3333a36a22695b435f60f0d8 100644
--- a/chart/spec/gitlab_test_helper.rb
+++ b/chart/spec/gitlab_test_helper.rb
@@ -198,15 +198,35 @@ module Gitlab
       return [stdout, status]
     end
 
-    def set_runner_token
+    def update_application_settings
       cmd = full_command(
-        "gitlab-rails runner \"" \
-        "settings = ApplicationSetting.current_without_cache; " \
-        "settings.update_columns(encrypted_customers_dot_jwt_signing_key_iv: nil, encrypted_customers_dot_jwt_signing_key: nil, encrypted_ci_jwt_signing_key_iv: nil, encrypted_ci_jwt_signing_key: nil, error_tracking_access_token_encrypted: nil); " \
-        "settings.set_runners_registration_token('#{runner_registration_token}'); " \
-        "settings.save!; " \
-        "Ci::Runner.delete_all" \
-        "\""
+        <<~RAILS_RUNNER
+        gitlab-rails runner "
+        settings = ApplicationSetting.current_without_cache;
+
+        # Reset runner token
+        settings.update_columns(
+          encrypted_customers_dot_jwt_signing_key_iv: nil,
+          encrypted_customers_dot_jwt_signing_key: nil,
+          encrypted_ci_jwt_signing_key_iv: nil,
+          encrypted_ci_jwt_signing_key: nil,
+          error_tracking_access_token_encrypted: nil);
+        settings.set_runners_registration_token('#{runner_registration_token}');
+
+        # Set FIPS restrictions
+        if File.file?('/etc/system-fips')
+          settings.rsa_key_restriction=3072;
+          settings.dsa_key_restriction=-1;
+          settings.ecdsa_key_restriction=256;
+          settings.ed25519_key_restriction=256;
+          settings.ecdsa_sk_key_restriction=256;
+          settings.ed25519_sk_key_restriction=256;
+        end
+
+        settings.save!;
+        Ci::Runner.delete_all;
+        "
+        RAILS_RUNNER
       )
 
       stdout, status = Open3.capture2e(cmd)
diff --git a/chart/spec/integration/check_config/registry_spec.rb b/chart/spec/integration/check_config/registry_spec.rb
index d4210a2ea7ea1e441b69f98e08e9ee306a95ed76..1974a055bd920344e06a6b85686975b99bc78b6c 100644
--- a/chart/spec/integration/check_config/registry_spec.rb
+++ b/chart/spec/integration/check_config/registry_spec.rb
@@ -70,6 +70,137 @@ describe 'checkConfig registry' do
                      error_description: 'when when database.sslmode is not valid'
   end
 
+  describe 'registry.database.loadBalancing (record)' do
+    let(:success_values) do
+      YAML.safe_load(%(
+        postgresql:
+          image:
+            tag: 13
+
+        registry:
+          redis:
+            cache:
+              enabled: true
+          database:
+            enabled: true
+            loadBalancing:
+              enabled: true
+              record: db-replica-registry.service.consul
+      )).merge(default_required_values)
+    end
+
+    let(:error_values) do
+      YAML.safe_load(%(
+        postgresql:
+          image:
+            tag: 13
+
+        registry:
+          redis:
+            cache:
+              enabled: true
+          database:
+            enabled: true
+            loadBalancing:
+              enabled: true
+      )).merge(default_required_values)
+    end
+
+    let(:error_output) { '`database.loadBalancing` requires `record` to be provided' }
+
+    include_examples 'config validation',
+                     success_description: 'when database load balancing is enabled, with record',
+                     error_description: 'when database load balancing is enabled, with no record'
+  end
+
+  describe 'registry.database.loadBalancing requires database.enabled to be true' do
+    let(:success_values) do
+      YAML.safe_load(%(
+        postgresql:
+          image:
+            tag: 13
+
+        registry:
+          redis:
+            cache:
+              enabled: true
+          database:
+            enabled: true
+            loadBalancing:
+              enabled: true
+              record: db-replica-registry.service.consul
+      )).merge(default_required_values)
+    end
+
+    let(:error_values) do
+      YAML.safe_load(%(
+        postgresql:
+          image:
+            tag: 13
+
+        registry:
+          redis:
+            cache:
+              enabled: true
+          database:
+            enabled: false
+            loadBalancing:
+              enabled: true
+              record: db-replica-registry.service.consul
+      )).merge(default_required_values)
+    end
+
+    let(:error_output) { 'Enabling database load balancing requires the metadata database to be enabled.' }
+
+    include_examples 'config validation',
+                     success_description: 'when database load balancing is enabled, with database enabled',
+                     error_description: 'when database load balancing is enabled, with database disabled'
+  end
+
+  describe 'registry.database.loadBalancing requires redis.cache.enabled to be true' do
+    let(:success_values) do
+      YAML.safe_load(%(
+        postgresql:
+          image:
+            tag: 13
+
+        registry:
+          redis:
+            cache:
+              enabled: true
+          database:
+            enabled: true
+            loadBalancing:
+              enabled: true
+              record: db-replica-registry.service.consul
+      )).merge(default_required_values)
+    end
+
+    let(:error_values) do
+      YAML.safe_load(%(
+        postgresql:
+          image:
+            tag: 13
+
+        registry:
+          redis:
+            cache:
+              enabled: false
+          database:
+            enabled: true
+            loadBalancing:
+              enabled: true
+              record: db-replica-registry.service.consul
+      )).merge(default_required_values)
+    end
+
+    let(:error_output) { 'Enabling database load balancing requires Redis caching to be enabled.' }
+
+    include_examples 'config validation',
+                     success_description: 'when database load balancing is enabled, with redis cache enabled',
+                     error_description: 'when database load balancing is enabled, with redis cache disabled'
+  end
+
   describe 'gitlab.checkConfig.registry.sentry.dsn' do
     let(:success_values) do
       YAML.safe_load(%(
diff --git a/chart/templates/NOTES.txt b/chart/templates/NOTES.txt
index 5678cc4b875eee3fd5eaec3268b938553b337eee..1db16bc7dc8022c80482d5ccb8fda00ea05881fd 100644
--- a/chart/templates/NOTES.txt
+++ b/chart/templates/NOTES.txt
@@ -26,6 +26,12 @@ Carefully review the documentation https://docs.gitlab.com/charts/charts/registr
 If you encounter a problem with either the import or operation of the registry, please add a comment in the feedback issue https://gitlab.com/gitlab-org/gitlab/-/issues/423459#supported-feature-status.
 {{- end }}
 
+{{- /* If the Container Registry database load balancing is enabled */}}
+{{- if eq .Values.registry.database.loadBalancing.enabled true }}
+{{ $WARNING }}
+The Container Registry database load balancing feature has been enabled. This is an experimental feature under active development and must not be used in production.
+{{- end }}
+
 {{- /* Notifications endpoint threshold should use maxretries instead */ -}}
 {{- $usesThreshold := false }}
 {{- range $v := .Values.global.registry.notifications.endpoints }}
@@ -155,7 +161,7 @@ NGINX Ingress Controller: Default RBAC rules creation has been disabled.
 Updates to NGINX Ingress Controller require RBAC changes. Without these,
 the installation will fallback to version v1.3.1.
 
-Read more on https://docs.gitlab.com/charts/releases/8_0.html#upgrade-to-85x
+Read more on https://docs.gitlab.com/charts/releases/8_0.html#upgrade-to-86x-851-843-836
 
 From GitLab chart 8.8+ the NGINX controller image 1.11.2+ will be the default for
 any configuration.
diff --git a/chart/templates/_checkConfig.tpl b/chart/templates/_checkConfig.tpl
index 4a595a8f4d05d079a1590217b51ab4a389c13f2f..a4ecd1f75a49c674de34d65c7c0299faea52ec6f 100644
--- a/chart/templates/_checkConfig.tpl
+++ b/chart/templates/_checkConfig.tpl
@@ -74,6 +74,7 @@ Due to gotpl scoping, we can't make use of `range`, so we have to add action lin
 {{- $messages = append $messages (include "gitlab.checkConfig.registry.sentry.dsn" .) -}}
 {{- $messages = append $messages (include "gitlab.checkConfig.registry.notifications" .) -}}
 {{- $messages = append $messages (include "gitlab.checkConfig.registry.database" .) -}}
+{{- $messages = append $messages (include "gitlab.checkConfig.registry.database.loadBalancing" .) -}}
 {{- $messages = append $messages (include "gitlab.checkConfig.registry.redis.cache" .) -}}
 {{- $messages = append $messages (include "gitlab.checkConfig.registry.redis.rateLimiting" .) -}}
 {{- $messages = append $messages (include "gitlab.checkConfig.registry.tls" .) -}}
diff --git a/chart/templates/_checkConfig_registry.tpl b/chart/templates/_checkConfig_registry.tpl
index 1b44155038387c1601ab7e8edeb23a1f0b128ce3..71f75e15ee1cc9c704b4ba7fce15c18adf4233a4 100644
--- a/chart/templates/_checkConfig_registry.tpl
+++ b/chart/templates/_checkConfig_registry.tpl
@@ -45,6 +45,31 @@ registry:
 {{- end -}}
 {{/* END gitlab.checkConfig.registry.database */}}
 
+{{/*
+Ensure Registry database load balancing is configured properly and dependencies are met
+*/}}
+{{- define "gitlab.checkConfig.registry.database.loadBalancing" -}}
+{{- if $.Values.registry.database.loadBalancing.enabled }}
+  {{- if not $.Values.registry.database.enabled }}
+registry:
+    Enabling database load balancing requires the metadata database to be enabled.
+    See https://docs.gitlab.com/charts/charts/registry#load-balancing
+  {{- end }}
+  {{- if not $.Values.registry.redis.cache.enabled }}
+registry:
+    Enabling database load balancing requires Redis caching to be enabled.
+    See https://docs.gitlab.com/charts/charts/registry/#redis-cache
+  {{- end }}
+  {{- if and (kindIs "string" $.Values.registry.database.loadBalancing.record) (empty $.Values.registry.database.loadBalancing.record) }}
+registry:
+    Enabling database load balancing requires the record to not be empty.
+    See https://docs.gitlab.com/charts/charts/registry#load-balancing
+  {{- end }}
+{{- end -}}
+
+{{- end -}}
+{{/* END gitlab.checkConfig.registry.database.loadBalancing */}}
+
 {{/*
 Ensure Registry Redis cache is configured properly and dependencies are met
 */}}
diff --git a/chart/templates/_runcheck.tpl b/chart/templates/_runcheck.tpl
index 7185cf985816264a0b1f175fa093155e9380e910..6d17a765110f58a7b73e774ef298900dbf7e1170 100644
--- a/chart/templates/_runcheck.tpl
+++ b/chart/templates/_runcheck.tpl
@@ -35,8 +35,8 @@ if [ -d "${secrets_dir}" ]; then
     fi
   fi
 fi
-MIN_VERSION=17.3
-CHART_MIN_VERSION=8.3
+MIN_VERSION=17.5
+CHART_MIN_VERSION=8.5
 
 # Remove 'v' prefix from GitLab version if present (set in Chart.yaml appVersions)
 GITLAB_VERSION=${GITLAB_VERSION#v}
diff --git a/chart/values.yaml b/chart/values.yaml
index c39f3e84e72bda6102e997057b2fce0486ecb837..216e49449327286e9df7ef868386a80211807d15 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -57,7 +57,7 @@ global:
   edition: ee
 
   ## https://docs.gitlab.com/charts/charts/globals#gitlab-version
-  gitlabVersion: "17.5.2"
+  gitlabVersion: "17.6.1"
 
   ## https://docs.gitlab.com/charts/charts/globals#application-resource
   application:
@@ -825,7 +825,7 @@ global:
   certificates:
     image:
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/certificates
-      tag: 17.5.2
+      tag: 17.6.1
       pullSecrets:
       - name: private-registry
     init:
@@ -874,7 +874,7 @@ global:
   kubectl:
     image:
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/kubectl
-      tag: 17.5.2
+      tag: 17.6.1
       pullSecrets:
       - name: private-registry
     securityContext:
@@ -891,7 +891,7 @@ global:
       # 1. UBI does not have the newly required /scripts/set-config template generator in its entrypoint.
       #   a. trying gitlab-base per https://repo1.dso.mil/dsop/gitlab/gitlab/gitlab-base/-/issues/77
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-base
-      tag: "17.5.2"
+      tag: "17.6.1"
       pullSecrets:
       - name: private-registry
 
@@ -1389,7 +1389,7 @@ postgresql:
   image:
     registry: registry1.dso.mil
     repository: ironbank/opensource/postgres/postgresql
-    tag: "14.14"
+    tag: "14.15"
     pullSecrets:
     - private-registry
   auth:
@@ -1478,7 +1478,7 @@ registry:
       memory: 1024Mi
   image:
     repository: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-container-registry
-    tag: 17.5.2
+    tag: 17.6.1
     pullSecrets:
     - name: private-registry
   ingress:
@@ -1618,7 +1618,7 @@ gitlab:
         app: gitaly
     image:
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-toolbox
-      tag: 17.5.2
+      tag: 17.6.1
       pullSecrets:
       - name: private-registry
     init:
@@ -1695,7 +1695,7 @@ gitlab:
         - ALL
     image:
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-exporter
-      tag: 17.5.2
+      tag: 17.6.1
       pullSecrets:
       - name: private-registry
     metrics:
@@ -1740,7 +1740,7 @@ gitlab:
         memory: 1.5G
     image:
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-toolbox
-      tag: 17.5.2
+      tag: 17.6.1
       pullSecrets:
       - name: private-registry
     securityContext:
@@ -1789,7 +1789,7 @@ gitlab:
         memory: 2.5G # = 2 * 1.25G assuming there are 2 workerProcesses configured
     image:
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-webservice
-      tag: 17.5.2
+      tag: 17.6.1
       pullSecrets:
       - name: private-registry
     workhorse:
@@ -1802,7 +1802,7 @@ gitlab:
           cpu: 600m
           memory: 2.5G
       image: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-workhorse
-      tag: 17.5.2
+      tag: 17.6.1
       pullSecrets:
       - name: private-registry
       metrics:
@@ -1826,7 +1826,7 @@ gitlab:
   sidekiq:
     image:
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-sidekiq
-      tag: 17.5.2
+      tag: 17.6.1
       pullSecrets:
       - name: private-registry
     init:
@@ -1863,7 +1863,7 @@ gitlab:
   gitaly:
     image:
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/gitaly
-      tag: 17.5.2
+      tag: 17.6.1
       pullSecrets:
       - name: private-registry
     init:
@@ -1904,7 +1904,7 @@ gitlab:
   gitlab-shell:
     image:
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-shell
-      tag: 17.5.2
+      tag: 17.6.1
       pullSecrets:
       - name: private-registry
     init:
@@ -1948,7 +1948,7 @@ gitlab:
   mailroom:
     image:
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-mailroom
-      tag: 17.5.2
+      tag: 17.6.1
       pullSecrets:
         - name: private-registry
     containerSecurityContext:
@@ -1965,7 +1965,7 @@ gitlab:
         type: ClusterIP
     image:
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-pages
-      tag: 17.5.2
+      tag: 17.6.1
     containerSecurityContext:
       capabilities:
         drop:
@@ -1976,7 +1976,7 @@ gitlab:
   praefect:
     image:
       repository: registry1.dso.mil/ironbank/gitlab/gitlab/gitaly
-      tag: 17.5.2
+      tag: 17.6.1
     init:
       resources:
         limits:
diff --git a/docs/DEVELOPMENT_MAINTENANCE.md b/docs/DEVELOPMENT_MAINTENANCE.md
index 81176ffbe1a676ae39f1e52d78c9dcf53ce4fbe1..514b4b591d0e254a6fe5ce85e5e2d111e7b711fc 100644
--- a/docs/DEVELOPMENT_MAINTENANCE.md
+++ b/docs/DEVELOPMENT_MAINTENANCE.md
@@ -104,7 +104,7 @@ BigBang makes modifications to the upstream helm chart. The full list of changes
     helm upgrade -n bigbang --create-namespace --install \
      bigbang ./chart \
      -f https://repo1.dso.mil/big-bang/bigbang/-/raw/master/tests/test-values.yaml \
-     -f https://repo1.dso.mil/big-bang/product/packages/gitlab/-/blob/main/docs/dev-overrides.yaml \
+     -f https://repo1.dso.mil/big-bang/product/packages/gitlab/-/raw/main/docs/dev-overrides.yaml \
      --set addons.gitlab.git.branch=YOUR-WORKING-BRANCH-NAME-HERE
    ```
 
diff --git a/tests/images.txt b/tests/images.txt
index d7778c8c1a1f9627afac4d8ef6eca78920fbab6a..ca6855a2d4b428c572a1a313ed0a5fc92d337ff7 100644
--- a/tests/images.txt
+++ b/tests/images.txt
@@ -1,2 +1,2 @@
-registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-exporter:17.5.2
-registry1.dso.mil/ironbank/gitlab/gitlab/kubectl:17.5.2
+registry1.dso.mil/ironbank/gitlab/gitlab/gitlab-exporter:17.6.1
+registry1.dso.mil/ironbank/gitlab/gitlab/kubectl:17.6.1