Added: 
dev/incubator/polaris/helm-chart/1.0.0-incubating/ci/persistence-values.yaml
==============================================================================
--- 
dev/incubator/polaris/helm-chart/1.0.0-incubating/ci/persistence-values.yaml 
(added)
+++ 
dev/incubator/polaris/helm-chart/1.0.0-incubating/ci/persistence-values.yaml 
Wed Jun 25 17:55:39 2025
@@ -0,0 +1,39 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+image:
+  pullPolicy: Never
+
+authentication:
+  tokenBroker:
+    secret:
+      name: polaris-token-broker
+
+logging:
+  file:
+    enabled: true
+    json: true
+    storage:
+      size: 50Mi
+
+persistence:
+  type: eclipse-link
+  eclipseLink:
+    secret:
+      name: polaris-persistence

Added: dev/incubator/polaris/helm-chart/1.0.0-incubating/ci/simple-values.yaml
==============================================================================
--- dev/incubator/polaris/helm-chart/1.0.0-incubating/ci/simple-values.yaml 
(added)
+++ dev/incubator/polaris/helm-chart/1.0.0-incubating/ci/simple-values.yaml Wed 
Jun 25 17:55:39 2025
@@ -0,0 +1,27 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+image:
+  pullPolicy: Never
+
+storage:
+  secret:
+    name: polaris-storage
+    awsAccessKeyId: access-key
+    awsSecretAccessKey: secret-key

Added: dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/_helpers.tpl
==============================================================================
--- dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/_helpers.tpl 
(added)
+++ dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/_helpers.tpl 
Wed Jun 25 17:55:39 2025
@@ -0,0 +1,320 @@
+{{/*
+  Copyright (C) 2024 Dremio
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+*/}}
+
+{{/*
+  Expand the name of the chart.
+*/}}
+{{- define "polaris.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+  Create a default fully qualified app name.
+  We truncate at 63 chars because some Kubernetes name fields are limited to 
this (by the DNS naming spec).
+  If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "polaris.fullname" -}}
+{{- if .Values.fullnameOverride }}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+  Create a default fully qualified app name, with a custom suffix. Useful when 
the name will
+  have a suffix appended to it, such as for the management service name.
+*/}}
+{{- define "polaris.fullnameWithSuffix" -}}
+{{- $global := index . 0 }}
+{{- $suffix := index . 1 }}
+{{- if not (hasPrefix "-" $suffix) }}
+{{- $suffix = printf "-%s" $suffix }}
+{{- end }}
+{{- $length := int (sub 63 (len $suffix)) }}
+{{- if $global.Values.fullnameOverride }}
+{{- $global.Values.fullnameOverride | trunc $length }}{{ $suffix }}
+{{- else }}
+{{- $name := default $global.Chart.Name $global.Values.nameOverride }}
+{{- if contains $name $global.Release.Name }}
+{{- $global.Release.Name | trunc $length }}{{ $suffix }}
+{{- else }}
+{{- printf "%s-%s" $global.Release.Name $name | trunc $length }}{{ $suffix }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+  Create chart name and version as used by the chart label.
+*/}}
+{{- define "polaris.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | 
trimSuffix "-" }}
+{{- end }}
+
+{{/*
+  Common labels
+*/}}
+{{- define "polaris.labels" -}}
+helm.sh/chart: {{ include "polaris.chart" . }}
+{{ include "polaris.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
+
+{{/*
+  Selector labels
+*/}}
+{{- define "polaris.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "polaris.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{/*
+  Create the name of the service account to use
+*/}}
+{{- define "polaris.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "polaris.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
+
+{{/*
+Merges a configuration tree into the destination configuration map. See 
configmap.yaml template.
+Two styles of configuration trees are supported:
+- Flattened configuration tree: The configuration option names are specified 
as a dot-separated
+  string, and the configuration option values are the values of the 
configuration options. E.g.:
+  "key1.subkey1": "value1"
+  "key1.subkey2.subsubkey1": "value2"
+- Nested configuration tree: The configuration option names are specified as a 
nested structure.
+  The resulting option names are formed by concatenating the nested keys with 
a dot separator.
+  E.g.:
+  key1:
+    subkey1: "value1"
+    subkey2:
+      subsubkey1: "value2"
+The configuration option values are evaluated as templates against the global 
context before being
+printed.
+*/}}
+{{- define "polaris.mergeConfigTree" -}}
+{{- $advConfig := index . 0 -}}
+{{- $prefix := index . 1 -}}
+{{- $dest := index . 2 -}}
+{{- range $key, $val := $advConfig -}}
+{{- $name := ternary $key (print $prefix "." $key) (eq $prefix "") -}}
+{{- if kindOf $val | eq "map" -}}
+{{- list $val $name $dest | include "polaris.mergeConfigTree" -}}
+{{- else -}}
+{{- $_ := set $dest $name $val -}}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Prints the configuration option to the destination configmap entry. See 
configmap.yaml template.
+Any nil values will be printed as empty config options; otherwise, the value 
will be evaluated
+as a template against the global context, then printed. Furthermore, if the 
value contains
+line breaks, they will be escaped and a multi-line option will be printed.
+*/}}
+{{- define "polaris.appendConfigOption" -}}
+{{- $key := index . 0 -}}
+{{- $value := index . 1 -}}
+{{- $global := index . 2 -}}
+{{- $valAsString := "" -}}
+{{- if ne $value nil -}}
+{{- $valAsString = tpl (toString $value) $global -}}
+{{- if contains "\r\n" $valAsString -}}
+{{- $valAsString = $valAsString | nindent 4 | replace "\r\n" "\\\r\n" -}}
+{{- else if contains "\n" $valAsString -}}
+{{- $valAsString = $valAsString | nindent 4 | replace "\n" "\\\n" -}}
+{{- end -}}
+{{- end -}}
+{{ print $key "=" $valAsString }}
+{{- end -}}
+
+{{/*
+Convert a dict into a string formed by a comma-separated list of key-value 
pairs: key1=value1,key2=value2, ...
+*/}}
+{{- define "polaris.dictToString" -}}
+{{- $list := list -}}
+{{- range $k, $v := . -}}
+{{- $list = append $list (printf "%s=%s" $k $v) -}}
+{{- end -}}
+{{ join "," $list }}
+{{- end -}}
+
+{{/*
+Prints the config volume definition for deployments and jobs.
+*/}}
+{{- define "polaris.configVolume" -}}
+- name: config-volume
+  projected:
+    sources:
+      - configMap:
+          name: {{ include "polaris.fullname" . }}
+          items:
+            - key: application.properties
+              path: application.properties
+      {{- if .Values.authentication.tokenBroker.secret.name }}
+      - secret:
+          name: {{ tpl .Values.authentication.tokenBroker.secret.name . }}
+          items:
+          {{- if eq .Values.authentication.tokenBroker.type "rsa-key-pair" }}
+            - key: {{ tpl .Values.authentication.tokenBroker.secret.publicKey 
. }}
+              path: public.pem
+            - key: {{ tpl .Values.authentication.tokenBroker.secret.privateKey 
. }}
+              path: private.pem
+          {{- end }}
+          {{- if eq .Values.authentication.tokenBroker.type "symmetric-key" }}
+            - key: {{ tpl .Values.authentication.tokenBroker.secret.secretKey 
. }}
+              path: symmetric.key
+          {{- end }}
+      {{- end }}
+      {{- if and ( eq .Values.persistence.type "eclipse-link" ) 
.Values.persistence.eclipseLink.secret.name }}
+      - secret:
+          name: {{ tpl .Values.persistence.eclipseLink.secret.name . }}
+          items:
+            - key: {{ tpl .Values.persistence.eclipseLink.secret.key . }}
+              path: persistence.xml
+      {{- end }}
+{{- end -}}
+
+{{/*
+Prints an environment variable for a secret key reference.
+*/}}
+{{- define "polaris.secretToEnv" -}}
+{{- $secret := index . 0 -}}
+{{- $keyRef := index . 1 -}}
+{{- $varName := index . 2 -}}
+{{- $key := get $secret $keyRef -}}
+{{- if and $secret.name $key }}
+- name: {{ $varName }}
+  valueFrom:
+    secretKeyRef:
+      name: {{ $secret.name }}
+      key: {{ $key }}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Converts a Kubernetes quantity to a number (int64 if possible or float64 
otherwise).
+It handles raw numbers as well as quantities with suffixes
+like m, k, M, G, T, P, E, ki, Mi, Gi, Ti, Pi, Ei.
+It also handles scientific notation.
+Quantities should be positive, so negative values, zero, or any unparseable 
number
+will result in a failure.
+https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity/
+*/}}
+{{- define "polaris.quantity" -}}
+{{- $quantity := . -}}
+{{- $n := $quantity | float64 -}}
+{{- if kindIs "string" $quantity -}}
+{{- if hasSuffix "m" $quantity -}}
+{{- $n = divf (trimSuffix "m" $quantity | float64) 1000.0 -}}
+{{- else if hasSuffix "k" $quantity -}}
+{{- $n = trimSuffix "k" $quantity | int64 | mul 1000 -}}
+{{- else if hasSuffix "M" $quantity -}}
+{{- $n = trimSuffix "M" $quantity | int64 | mul 1000000 -}}
+{{- else if hasSuffix "G" $quantity -}}
+{{- $n = trimSuffix "G" $quantity | int64 | mul 1000000000 -}}
+{{- else if hasSuffix "T" $quantity -}}
+{{- $n = trimSuffix "T" $quantity | int64 | mul 1000000000000 -}}
+{{- else if hasSuffix "P" $quantity -}}
+{{- $n = trimSuffix "P" $quantity | int64 | mul 1000000000000000 -}}
+{{- else if hasSuffix "E" $quantity -}}
+{{- $n = trimSuffix "E" $quantity | int64 | mul 1000000000000000000 -}}
+{{- else if hasSuffix "ki" $quantity -}}
+{{- $n = trimSuffix "ki" $quantity | int64 | mul 1024 -}}
+{{- else if hasSuffix "Mi" $quantity -}}
+{{- $n = trimSuffix "Mi" $quantity | int64 | mul 1048576 -}}
+{{- else if hasSuffix "Gi" $quantity -}}
+{{- $n = trimSuffix "Gi" $quantity | int64 | mul 1073741824 -}}
+{{- else if hasSuffix "Ti" $quantity -}}
+{{- $n = trimSuffix "Ti" $quantity | int64 | mul 1099511627776 -}}
+{{- else if hasSuffix "Pi" $quantity -}}
+{{- $n = trimSuffix "Pi" $quantity | int64 | mul 1125899906842624 -}}
+{{- else if hasSuffix "Ei" $quantity -}}
+{{- $n = trimSuffix "Ei" $quantity | int64 | mul 1152921504606846976 -}}
+{{- end -}}
+{{- end -}}
+{{- if le ($n | float64) 0.0 -}}
+{{- fail (print "invalid quantity: " $quantity) -}}
+{{- end -}}
+{{- if kindIs "float64" $n -}}
+{{- printf "%f" $n -}}
+{{- else -}}
+{{- printf "%v" $n -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Prints the ports section of the container spec. Also validates all port names 
to ensure
+that they are unique.
+*/}}
+{{- define "polaris.containerPorts" -}}
+{{- $ports := dict -}}
+{{- $protocols := dict -}}
+{{- /* Main service ports */ -}}
+{{- range $i, $port := .Values.service.ports -}}
+{{- if hasKey $ports $port.name -}}
+{{- fail (printf "service.ports[%d]: port name already taken: %v" $i 
$port.name) -}}
+{{- end -}}
+{{- $portNumber := coalesce $port.targetPort $port.port -}}
+{{- $_ := set $ports $port.name $portNumber -}}
+{{- $_ = set $protocols $port.name ($port.protocol | default "TCP") -}}
+{{- end -}}
+{{- /* Management service ports */ -}}
+{{- range $i, $port := .Values.managementService.ports -}}
+{{- if hasKey $ports $port.name -}}
+{{- fail (printf "managementService.ports[%d]: port name already taken: %v" $i 
$port.name) -}}
+{{- end -}}
+{{- $portNumber := coalesce $port.targetPort $port.port -}}
+{{- $_ := set $ports $port.name $portNumber }}
+{{- $_ = set $protocols $port.name ($port.protocol | default "TCP") -}}
+{{- end -}}
+{{- /* Extra service ports */ -}}
+{{- range $i, $svc := .Values.extraServices -}}
+{{- range $j, $port := $svc.ports -}}
+{{- $portNumber := coalesce $port.targetPort $port.port -}}
+{{- if hasKey $ports $port.name -}}
+{{- if ne $portNumber (get $ports $port.name) -}}
+{{- fail (printf "extraServices[%d].ports[%d]: wrong port number for port %s, 
expected %v, got %v" $i $j $port.name (get $ports $port.name) $portNumber) -}}
+{{- end -}}
+{{- end -}}
+{{- if hasKey $protocols $port.name -}}
+{{- if ne ($port.protocol | default "TCP") (get $protocols $port.name) -}}
+{{- fail (printf "extraServices[%d].ports[%d]: wrong protocol for port %s, 
expected %v, got %v" $i $j $port.name (get $protocols $port.name) 
$port.protocol) -}}
+{{- end -}}
+{{- end -}}
+{{- $_ := set $ports $port.name $portNumber -}}
+{{- $_ = set $protocols $port.name ($port.protocol | default "TCP") -}}
+{{- end -}}
+{{- end }}
+ports:
+{{- range $portName, $portNumber := $ports }}
+  - name: {{ $portName }}
+    containerPort: {{ $portNumber }}
+    protocol: {{ get $protocols $portName }}
+{{- end }}
+{{- end -}}

Added: 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/configmap.yaml
==============================================================================
--- dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/configmap.yaml 
(added)
+++ dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/configmap.yaml 
Wed Jun 25 17:55:39 2025
@@ -0,0 +1,205 @@
+{{/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+ 
+   http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/}}
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: {{ include "polaris.fullname" . }}
+  namespace: {{ .Release.Namespace }}
+  labels:
+    {{- include "polaris.labels" . | nindent 4 }}
+    {{- if .Values.configMapLabels }}
+    {{- tpl (toYaml .Values.configMapLabels) . | nindent 4 }}
+    {{- end }}
+data:
+  application.properties: |-
+    {{- $map := dict -}}
+
+    {{- /* Realm Context */ -}}
+    {{- $_ := set $map "polaris.realm-context.type" .Values.realmContext.type 
-}}
+    {{- $_ =  set $map "polaris.realm-context.realms" (join "," 
.Values.realmContext.realms) -}}
+
+    {{- /* Features */ -}}
+    {{- range $k, $v := .Values.features -}}
+    {{- if ( ne $k "realmOverrides" ) -}}
+    {{- $_ = set $map (printf "polaris.features.\"%s\"" $k) (toJson $v) -}}
+    {{- end -}}
+    {{- end -}}
+    {{- range $realm, $overrides := .Values.features.realmOverrides -}}
+    {{- range $k, $v := $overrides -}}
+    {{- $_ = set $map (printf "polaris.features.realm-overrides.\"%s\".\"%s\"" 
$realm $k) (toJson $v) -}}
+    {{- end -}}
+    {{- end -}}
+
+    {{- /* Persistence */ -}}
+    {{- $_ = set $map "polaris.persistence.type" .Values.persistence.type -}}
+    {{- if and ( eq .Values.persistence.type "eclipse-link" ) 
.Values.persistence.eclipseLink.secret.name -}}
+    {{- $_ = set $map "polaris.persistence.eclipselink.persistence-unit" 
.Values.persistence.eclipseLink.persistenceUnit -}}
+    {{- $_ = set $map "polaris.persistence.eclipselink.configuration-file" 
(printf "%s/persistence.xml" .Values.image.configDir ) -}}
+    {{- end -}}
+
+    {{- /* File IO */ -}}
+    {{- $_ = set $map "polaris.file-io.type" .Values.fileIo.type -}}
+
+    {{- /* Storage */ -}}
+    {{- if .Values.storage.secret.gcpTokenLifespan -}}
+    {{- $_ = set $map "polaris.storage.gcp.lifespan" 
.Values.storage.secret.gcpTokenLifespan -}}
+    {{- end -}}
+
+    {{- /* Rate Limiter */ -}}
+    {{- $_ = set $map "polaris.rate-limiter.filter.type" 
.Values.rateLimiter.type -}}
+    {{- if ne .Values.rateLimiter.type "no-op" -}}
+    {{- $_ = set $map "polaris.rate-limiter.token-bucket.type" 
.Values.rateLimiter.tokenBucket.type -}}
+    {{- $_ = set $map "polaris.rate-limiter.token-bucket.requests-per-second" 
.Values.rateLimiter.tokenBucket.requestsPerSecond -}}
+    {{- $_ = set $map "polaris.rate-limiter.token-bucket.window" 
.Values.rateLimiter.tokenBucket.window -}}
+    {{- end -}}
+
+    {{- /* Tasks */ -}}
+    {{- if .Values.tasks.maxConcurrentTasks -}}
+    {{- $_ = set $map "polaris.tasks.max-concurrent-tasks" 
.Values.tasks.maxConcurrentTasks -}}
+    {{- end -}}
+    {{- if .Values.tasks.maxQueuedTasks -}}
+    {{- $_ = set $map "polaris.tasks.max-queued-tasks" 
.Values.tasks.maxQueuedTasks -}}
+    {{- end -}}
+
+    {{- /* Authentication */ -}}
+    {{- $_ = set $map "polaris.authentication.authenticator.type" 
.Values.authentication.authenticator.type -}}
+    {{- $_ = set $map "polaris.authentication.token-service.type" 
.Values.authentication.tokenService.type -}}
+    {{- $_ = set $map "polaris.authentication.token-broker.type" 
.Values.authentication.tokenBroker.type -}}
+    {{- $_ = set $map 
"polaris.authentication.token-broker.max-token-generation" 
.Values.authentication.tokenBroker.maxTokenGeneration -}}
+    {{- if .Values.authentication.tokenBroker.secret.name -}}
+    {{- if eq .Values.authentication.tokenBroker.type "rsa-key-pair" -}}
+    {{- $_ = set $map 
"polaris.authentication.token-broker.rsa-key-pair.public-key-file" (printf 
"%s/public.pem" .Values.image.configDir ) -}}
+    {{- $_ = set $map 
"polaris.authentication.token-broker.rsa-key-pair.private-key-file" (printf 
"%s/private.pem" .Values.image.configDir ) -}}
+    {{- end -}}
+    {{- if eq .Values.authentication.tokenBroker.type "symmetric-key" -}}
+    {{- $_ = set $map "polaris.authentication.token-broker.symmetric-key.file" 
(printf "%s/symmetric.key" .Values.image.configDir ) -}}
+    {{- end -}}
+    {{- end -}}
+
+    {{- /* HTTP ports */ -}}
+    {{- $_ = set $map "quarkus.http.port" (get (first .Values.service.ports) 
"port") -}}
+    {{- $_ = set $map "quarkus.management.port" (get (first 
.Values.managementService.ports) "port") -}}
+
+    {{- /* CORS */ -}}
+    {{- if .Values.cors.allowedOrigins -}}
+    {{- $_ = set $map "quarkus.http.cors.origins" (join "," 
.Values.cors.allowedOrigins) -}}
+    {{- end -}}
+    {{- if .Values.cors.allowedMethods -}}
+    {{- $_ = set $map "quarkus.http.cors.methods" (join "," 
.Values.cors.allowedMethods) -}}
+    {{- end -}}
+    {{- if .Values.cors.allowedHeaders -}}
+    {{- $_ = set $map "quarkus.http.cors.headers" (join "," 
.Values.cors.allowedHeaders) -}}
+    {{- end -}}
+    {{- if .Values.cors.exposedHeaders -}}
+    {{- $_ = set $map "quarkus.http.cors.exposed-headers" (join "," 
.Values.cors.exposedHeaders) -}}
+    {{- end -}}
+    {{- if .Values.cors.accessControlMaxAge -}}
+    {{- $_ = set $map "quarkus.http.cors.access-control-max-age" 
.Values.cors.accessControlMaxAge -}}
+    {{- end -}}
+    {{- if ne .Values.cors.accessControlAllowCredentials nil -}}
+    {{- $_ = set $map "quarkus.http.cors.access-control-allow-credentials" 
.Values.cors.accessControlAllowCredentials -}}
+    {{- end -}}
+
+    {{- /* Logging */ -}}
+    {{- $_ = set $map "quarkus.log.level" .Values.logging.level -}}
+    {{- if .Values.logging.console.enabled -}}
+    {{- $_ = set $map "quarkus.log.console.enable" "true" -}}
+    {{- $_ = set $map "quarkus.log.console.level" 
.Values.logging.console.threshold -}}
+    {{- if .Values.logging.console.json -}}
+    {{- $_ = set $map "quarkus.log.console.json" "true" -}}
+    {{- else -}}
+    {{- $_ = set $map "quarkus.log.console.format" 
.Values.logging.console.format -}}
+    {{- end -}}
+    {{- else -}}
+    {{- $_ = set $map "quarkus.log.console.enable" "false" -}}
+    {{- end -}}
+    {{- if .Values.logging.file.enabled -}}
+    {{- $_ = set $map "quarkus.log.file.enable" "true" -}}
+    {{- $_ = set $map "quarkus.log.file.level" .Values.logging.file.threshold 
-}}
+    {{- $_ = set $map "quarkus.log.file.path" (printf "%s/%s" 
.Values.logging.file.logsDir .Values.logging.file.fileName) -}}
+    {{- $_ = set $map "quarkus.log.file.rotation.max-file-size" (include 
"polaris.quantity" .Values.logging.file.rotation.maxFileSize) -}}
+    {{- $_ = set $map "quarkus.log.file.rotation.max-backup-index" 
.Values.logging.file.rotation.maxBackupIndex -}}
+    {{- if .Values.logging.file.rotation.fileSuffix -}}
+    {{- $_ = set $map "quarkus.log.file.rotation.file-suffix" 
.Values.logging.file.rotation.fileSuffix -}}
+    {{- end -}}
+    {{- if .Values.logging.file.json -}}
+    {{- $_ = set $map "quarkus.log.file.json" "true" -}}
+    {{- else -}}
+    {{- $_ = set $map "quarkus.log.file.format" .Values.logging.file.format -}}
+    {{- end -}}
+    {{- else -}}
+    {{- $_ = set $map "quarkus.log.file.enable" "false" -}}
+    {{- end -}}
+    {{- $categories := dict -}}
+    {{- list .Values.logging.categories "" $categories | include 
"polaris.mergeConfigTree" -}}
+    {{- range $k, $v := $categories -}}
+    {{- $_ = set $map (printf "quarkus.log.category.\"%s\".level" $k) $v -}}
+    {{- end -}}
+    {{- $_ = set $map "polaris.log.request-id-header-name" 
.Values.logging.requestIdHeaderName -}}
+    {{- $mdc := dict -}}
+    {{- list .Values.logging.mdc "" $mdc | include "polaris.mergeConfigTree" 
-}}
+    {{- range $k, $v := $mdc -}}
+    {{- $_ = set $map (printf "polaris.log.mdc.\"%s\"" $k) $v -}}
+    {{- end -}}
+
+    {{- /* Telemetry */ -}}
+    {{- if .Values.tracing.enabled -}}
+    {{- $_ = set $map "quarkus.otel.exporter.otlp.endpoint" 
.Values.tracing.endpoint -}}
+    {{- if .Values.tracing.attributes -}}
+    {{- $attributes := dict -}}
+    {{- list .Values.tracing.attributes "" $attributes | include 
"polaris.mergeConfigTree" -}}
+    {{- $i := 0 -}}
+    {{- range $k, $v := $attributes -}}
+    {{- $_ = set $map (printf "quarkus.otel.resource.attributes[%d]" $i) 
(printf "%s=%s" $k $v) -}}
+    {{- $i = add1 $i -}}
+    {{- end -}}
+    {{- end -}}
+    {{- if .Values.tracing.sample -}}
+    {{- $sample := toString .Values.tracing.sample -}}
+    {{ if eq $sample "all" -}}
+    {{- $_ = set $map "quarkus.otel.traces.sampler" "parentbased_always_on" -}}
+    {{- else if eq $sample "none" -}}
+    {{- $_ = set $map "quarkus.otel.traces.sampler" "always_off" -}}
+    {{- else -}}
+    {{- $_ = set $map "quarkus.otel.traces.sampler" "parentbased_traceidratio" 
-}}
+    {{- $_ = set $map "quarkus.otel.traces.sampler.arg" $sample -}}
+    {{- end -}}
+    {{- end -}}
+    {{- else -}}
+    {{- $_ = set $map "quarkus.otel.sdk.disabled" true -}}
+    {{- end -}}
+
+    {{- /* Metrics */ -}}
+    {{- if .Values.metrics.enabled -}}
+    {{- range $name, $value := .Values.metrics.tags -}}
+    {{- $_ = set $map (print "polaris.metrics.tags." $name) $value -}}
+    {{- end -}}
+    {{- else -}}
+    {{- $_ = set $map "quarkus.micrometer.enabled" "false" -}}
+    {{- end -}}
+
+    {{- /* Advanced Configuration (must be done last since it can override any 
of the settings above) */ -}}
+    {{- list .Values.advancedConfig "" $map | include 
"polaris.mergeConfigTree" -}}
+
+    {{- /* Print the resulting configmap; each configuration option is 
templatized */ -}}
+    {{- $global := . -}}
+    {{- range $k, $v := $map }}
+    {{ include "polaris.appendConfigOption" (list $k $v $global) }}
+    {{- end }}

Added: 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/deployment.yaml
==============================================================================
--- dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/deployment.yaml 
(added)
+++ dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/deployment.yaml 
Wed Jun 25 17:55:39 2025
@@ -0,0 +1,148 @@
+{{/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+ 
+   http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/}}
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: {{ include "polaris.fullname" . }}
+  namespace: {{ .Release.Namespace }}
+  labels:
+    {{- include "polaris.labels" . | nindent 4 }}
+    {{- if .Values.podLabels }}
+    {{- tpl (toYaml .Values.podLabels) . | nindent 4 }}
+    {{- end }}
+spec:
+  {{- if not .Values.autoscaling.enabled }}
+  replicas: {{ .Values.replicaCount }}
+  {{- end }}
+  {{- if not (has (quote .Values.revisionHistoryLimit) (list "" (quote ""))) }}
+  revisionHistoryLimit: {{ .Values.revisionHistoryLimit }}
+  {{- end }}
+  selector:
+    matchLabels:
+      {{- include "polaris.selectorLabels" . | nindent 6 }}
+  template:
+    metadata:
+      {{- if .Values.podAnnotations }}
+      annotations:
+        {{- tpl (toYaml .Values.podAnnotations) . | nindent 8 }}
+      {{- end }}
+      labels:
+        {{- include "polaris.selectorLabels" . | nindent 8 }}
+        {{- if .Values.podLabels }}
+        {{- tpl (toYaml .Values.podLabels) . | nindent 8 }}
+        {{- end }}
+    spec:
+      {{- if .Values.imagePullSecrets }}
+      imagePullSecrets:
+      {{- range .Values.imagePullSecrets }}
+        - name: {{ . | quote }}
+      {{- end }}
+      {{- end }}
+      serviceAccountName: {{ include "polaris.serviceAccountName" . }}
+      {{- if .Values.podSecurityContext }}
+      securityContext:
+        {{- tpl (toYaml .Values.podSecurityContext) . | nindent 8 }}
+      {{- end }}
+      {{- if .Values.extraInitContainers }}
+      initContainers:
+        {{- tpl (toYaml .Values.extraInitContainers) . | nindent 8 }}
+      {{- end }}
+      containers:
+        - name: {{ .Chart.Name }}
+          {{- if .Values.containerSecurityContext }}
+          securityContext:
+            {{- tpl (toYaml .Values.containerSecurityContext) . | nindent 12 }}
+          {{- end }}
+          image: "{{ tpl .Values.image.repository . }}:{{ tpl 
.Values.image.tag . | default .Chart.Version }}"
+          imagePullPolicy: {{ tpl .Values.image.pullPolicy . }}
+          {{ if or .Values.storage.secret.name .Values.extraEnv -}}
+          env:
+            {{- include "polaris.secretToEnv" (list .Values.storage.secret 
"awsAccessKeyId" "polaris.storage.aws.access-key") | indent 12 -}}
+            {{- include "polaris.secretToEnv" (list .Values.storage.secret 
"awsSecretAccessKey" "polaris.storage.aws.secret-key") | indent 12 -}}
+            {{- include "polaris.secretToEnv" (list .Values.storage.secret 
"gcpToken" "polaris.storage.gcp.token") | indent 12 -}}
+            {{- if .Values.extraEnv -}}
+            {{- tpl (toYaml .Values.extraEnv) . | nindent 12 -}}
+            {{- end -}}
+          {{- end }}
+          volumeMounts:
+            - name: config-volume
+              mountPath: {{ trimSuffix "/" .Values.image.configDir }}
+              readOnly: true
+            {{- if .Values.logging.file.enabled }}
+            - name: logs-storage
+              mountPath: {{ .Values.logging.file.logsDir }}
+              readOnly: false
+            {{- end }}
+            - name: temp-dir
+              mountPath: /tmp
+              readOnly: false
+            {{- if .Values.extraVolumeMounts }}
+            {{- tpl (toYaml .Values.extraVolumeMounts) . | nindent 12 }}
+            {{- end }}
+          {{- include "polaris.containerPorts" . | trim | nindent 10 }}
+          livenessProbe:
+            httpGet:
+              path: /q/health/live
+              port: {{ get (first .Values.managementService.ports) "name" }}
+              scheme: HTTP
+            initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds 
}}
+            periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
+            successThreshold: {{ .Values.livenessProbe.successThreshold }}
+            failureThreshold: {{ .Values.livenessProbe.failureThreshold }}
+            timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
+            terminationGracePeriodSeconds: {{ 
.Values.livenessProbe.terminationGracePeriodSeconds }}
+          readinessProbe:
+            httpGet:
+              path: /q/health/ready
+              port: {{ get (first .Values.managementService.ports) "name" }}
+              scheme: HTTP
+            initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds 
}}
+            periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
+            successThreshold: {{ .Values.readinessProbe.successThreshold }}
+            failureThreshold: {{ .Values.readinessProbe.failureThreshold }}
+            timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
+          {{- if .Values.resources }}
+          resources:
+            {{- tpl (toYaml .Values.resources) . | nindent 12 }}
+          {{- end }}
+      volumes:
+        {{- include "polaris.configVolume" . | nindent 8 }}
+        {{- if .Values.logging.file.enabled }}
+        - name: logs-storage
+          persistentVolumeClaim:
+            claimName: {{ include "polaris.fullnameWithSuffix" (list . "logs") 
}}
+        {{- end }}
+        - name: temp-dir
+          emptyDir: {}
+        {{- if .Values.extraVolumes }}
+        {{- tpl (toYaml .Values.extraVolumes) . | nindent 8 }}
+        {{- end }}
+      {{- if .Values.nodeSelector }}
+      nodeSelector:
+        {{- tpl (toYaml .Values.nodeSelector) . | nindent 8 }}
+      {{- end }}
+      {{- if .Values.affinity }}
+      affinity:
+        {{- tpl (toYaml .Values.affinity) . | nindent 8 }}
+      {{- end }}
+      {{- if .Values.tolerations }}
+      tolerations:
+        {{- tpl (toYaml .Values.tolerations) . | nindent 8 }}
+      {{- end }}

Added: dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/hpa.yaml
==============================================================================
--- dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/hpa.yaml (added)
+++ dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/hpa.yaml Wed 
Jun 25 17:55:39 2025
@@ -0,0 +1,52 @@
+{{/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+ 
+   http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/}}
+
+{{- if .Values.autoscaling.enabled }}
+apiVersion: autoscaling/v2
+kind: HorizontalPodAutoscaler
+metadata:
+  name: {{ include "polaris.fullname" . }}
+  namespace: {{ .Release.Namespace }}
+  labels:
+    {{- include "polaris.labels" . | nindent 4 }}
+spec:
+  scaleTargetRef:
+    apiVersion: apps/v1
+    kind: Deployment
+    name: {{ include "polaris.fullname" . }}
+  minReplicas: {{ .Values.autoscaling.minReplicas }}
+  maxReplicas: {{ .Values.autoscaling.maxReplicas }}
+  metrics:
+    {{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
+    - type: Resource
+      resource:
+        name: cpu
+        target:
+          type: Utilization
+          averageUtilization: {{ 
.Values.autoscaling.targetCPUUtilizationPercentage }}
+    {{- end }}
+    {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
+    - type: Resource
+      resource:
+        name: memory
+        target:
+          type: Utilization
+          averageUtilization: {{ 
.Values.autoscaling.targetMemoryUtilizationPercentage }}
+    {{- end }}
+{{- end }}

Added: dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/ingress.yaml
==============================================================================
--- dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/ingress.yaml 
(added)
+++ dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/ingress.yaml 
Wed Jun 25 17:55:39 2025
@@ -0,0 +1,63 @@
+{{/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+ 
+   http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/}}
+
+{{- if .Values.ingress.enabled }}
+{{- $fullName := include "polaris.fullname" . }}
+{{- $svcPort := get (first .Values.service.ports) "port" }}
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: {{ $fullName }}
+  namespace: {{ .Release.Namespace }}
+  labels:
+    {{- include "polaris.labels" . | nindent 4 }}
+  {{- if .Values.ingress.annotations }}
+  annotations:
+    {{- tpl (toYaml .Values.ingress.annotations) . | nindent 4 }}
+  {{- end }}
+spec:
+  {{- if .Values.ingress.className }}
+  ingressClassName: {{ .Values.ingress.className | quote }}
+  {{- end }}
+  {{- if .Values.ingress.tls }}
+  tls:
+    {{- range .Values.ingress.tls }}
+    - hosts:
+        {{- range .hosts }}
+        - {{ . | quote }}
+        {{- end }}
+      secretName: {{ .secretName }}
+    {{- end }}
+  {{- end }}
+  rules:
+    {{- range .Values.ingress.hosts }}
+    - host: {{ .host | quote }}
+      http:
+        paths:
+          {{- range .paths }}
+          - path: {{ .path }}
+            pathType: {{ .pathType }}
+            backend:
+              service:
+                name: {{ $fullName }}
+                port:
+                  number: {{ $svcPort }}
+          {{- end }}
+    {{- end }}
+  {{- end }}
\ No newline at end of file

Added: 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/service-extra.yaml
==============================================================================
--- 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/service-extra.yaml 
(added)
+++ 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/service-extra.yaml 
Wed Jun 25 17:55:39 2025
@@ -0,0 +1,69 @@
+{{/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+ 
+   http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/}}
+
+{{- range $i, $svc := .Values.extraServices }}
+{{- if not $svc.nameSuffix }}
+{{- fail (printf "extraServices[%d]: missing required nameSuffix" $i) }}
+{{- else if or (eq $svc.nameSuffix "-mgmt") (eq $svc.nameSuffix "mgmt") }}
+{{- fail (printf "extraServices[%d]: invalid nameSuffix" $i) }}
+{{- end }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ include "polaris.fullnameWithSuffix" (list $ $svc.nameSuffix) }}
+  namespace: {{ $.Release.Namespace }}
+  labels:
+    {{- include "polaris.labels" $ | nindent 4 }}
+  {{- with $svc.annotations }}
+  annotations:
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
+spec:
+  type: {{ $svc.type }}
+  selector:
+    {{- include "polaris.selectorLabels" $ | nindent 4 }}
+  ports:
+    {{- range $svc.ports }}
+    - name: {{ .name }}
+      port: {{ .port }}
+      {{- if .targetPort }}
+      targetPort: {{ .targetPort }}
+      {{- end }}
+      {{- if .nodePort }}
+      nodePort: {{ .nodePort }}
+      {{- end }}
+      protocol: {{ default "TCP" .protocol }}
+    {{- end }}
+  {{- if $svc.sessionAffinity }}
+  sessionAffinity: {{ $svc.sessionAffinity }}
+  {{- end }}
+  {{- if $svc.clusterIP }}
+  clusterIP: {{ $svc.clusterIP }}
+  {{- end }}
+  {{- if and $svc.externalTrafficPolicy (or (eq $svc.type "LoadBalancer") (eq 
$svc.type "NodePort")) }}
+  externalTrafficPolicy: {{ $svc.externalTrafficPolicy }}
+  {{- end }}
+  {{- if $svc.internalTrafficPolicy }}
+  internalTrafficPolicy: {{ $svc.internalTrafficPolicy }}
+  {{- end }}
+  {{- if and $svc.trafficDistribution (ge (int 
$.Capabilities.KubeVersion.Minor) 31) }}
+  trafficDistribution: {{ $svc.trafficDistribution }}
+  {{- end }}
+{{- end }}

Added: 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/service-mgmt.yaml
==============================================================================
--- 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/service-mgmt.yaml 
(added)
+++ 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/service-mgmt.yaml 
Wed Jun 25 17:55:39 2025
@@ -0,0 +1,61 @@
+{{/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+ 
+   http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/}}
+
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ include "polaris.fullnameWithSuffix" (list . "mgmt") }}
+  namespace: {{ .Release.Namespace }}
+  labels:
+    {{- include "polaris.labels" . | nindent 4 }}
+  {{- with .Values.managementService.annotations }}
+  annotations:
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
+spec:
+  type: {{ .Values.managementService.type }}
+  selector:
+    {{- include "polaris.selectorLabels" . | nindent 4 }}
+  ports:
+    {{- range .Values.managementService.ports }}
+    - name: {{ .name }}
+      port: {{ .port }}
+      {{- if .targetPort }}
+      targetPort: {{ .targetPort }}
+      {{- end }}
+      {{- if .nodePort }}
+      nodePort: {{ .nodePort }}
+      {{- end }}
+      protocol: {{ default "TCP" .protocol }}
+    {{- end }}
+  {{- if .Values.managementService.sessionAffinity }}
+  sessionAffinity: {{ .Values.managementService.sessionAffinity }}
+  {{- end }}
+  {{- if .Values.managementService.clusterIP }}
+  clusterIP: {{ .Values.managementService.clusterIP }}
+  {{- end }}
+  {{- if and .Values.managementService.externalTrafficPolicy (or (eq 
.Values.managementService.type "LoadBalancer") (eq 
.Values.managementService.type "NodePort")) }}
+  externalTrafficPolicy: {{ .Values.managementService.externalTrafficPolicy }}
+  {{- end }}
+  {{- if .Values.managementService.internalTrafficPolicy }}
+  internalTrafficPolicy: {{ .Values.managementService.internalTrafficPolicy }}
+  {{- end }}
+  {{- if and .Values.managementService.trafficDistribution (ge (int 
$.Capabilities.KubeVersion.Minor) 31) }}
+  trafficDistribution: {{ .Values.managementService.trafficDistribution }}
+  {{- end }}

Added: dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/service.yaml
==============================================================================
--- dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/service.yaml 
(added)
+++ dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/service.yaml 
Wed Jun 25 17:55:39 2025
@@ -0,0 +1,61 @@
+{{/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+ 
+   http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/}}
+
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ include "polaris.fullname" . }}
+  namespace: {{ .Release.Namespace }}
+  labels:
+    {{- include "polaris.labels" . | nindent 4 }}
+  {{- with .Values.service.annotations }}
+  annotations:
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
+spec:
+  type: {{ .Values.service.type }}
+  selector:
+    {{- include "polaris.selectorLabels" . | nindent 4 }}
+  ports:
+    {{- range .Values.service.ports }}
+    - name: {{ .name }}
+      port: {{ .port }}
+      {{- if .targetPort }}
+      targetPort: {{ .targetPort }}
+      {{- end }}
+      {{- if and (eq $.Values.service.type "NodePort") .nodePort }}
+      nodePort: {{ .nodePort }}
+      {{- end }}
+      protocol: {{ default "TCP" .protocol }}
+    {{- end }}
+  {{- if .Values.service.sessionAffinity }}
+  sessionAffinity: {{ .Values.service.sessionAffinity }}
+  {{- end }}
+  {{- if .Values.service.clusterIP }}
+  clusterIP: {{ .Values.service.clusterIP }}
+  {{- end }}
+  {{- if and .Values.service.externalTrafficPolicy (or (eq 
.Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort")) }}
+  externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }}
+  {{- end }}
+  {{- if .Values.service.internalTrafficPolicy }}
+  internalTrafficPolicy: {{ .Values.service.internalTrafficPolicy }}
+  {{- end }}
+  {{- if and .Values.service.trafficDistribution (ge (int 
.Capabilities.KubeVersion.Minor) 31) }}
+  trafficDistribution: {{ .Values.service.trafficDistribution }}
+  {{- end }}

Added: 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/serviceaccount.yaml
==============================================================================
--- 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/serviceaccount.yaml 
(added)
+++ 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/serviceaccount.yaml 
Wed Jun 25 17:55:39 2025
@@ -0,0 +1,29 @@
+{{/*
+  Copyright (C) 2024 Dremio
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+*/}}
+
+{{- if .Values.serviceAccount.create }}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: {{ include "polaris.serviceAccountName" . }}
+  namespace: {{ .Release.Namespace }}
+  labels:
+    {{- include "polaris.labels" . | nindent 4 }}
+  {{- if .Values.serviceAccount.annotations }}
+  annotations:
+    {{- tpl (toYaml .Values.serviceAccount.annotations) . | nindent 4 }}
+  {{- end }}
+{{- end }}

Added: 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/servicemonitor.yaml
==============================================================================
--- 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/servicemonitor.yaml 
(added)
+++ 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/servicemonitor.yaml 
Wed Jun 25 17:55:39 2025
@@ -0,0 +1,46 @@
+{{/**
+  Copyright (C) 2024 Dremio
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+**/}}
+
+{{- if and ( .Capabilities.APIVersions.Has "monitoring.coreos.com/v1" ) 
.Values.serviceMonitor.enabled }}
+apiVersion: monitoring.coreos.com/v1
+kind: ServiceMonitor
+metadata:
+  name: {{ include "polaris.fullname" . }}
+  namespace: {{ .Release.Namespace }}
+  labels:
+    {{- include "polaris.labels" . | nindent 4 }}
+    {{- if .Values.serviceMonitor.labels }}
+    {{ toYaml .Values.serviceMonitor.labels | nindent 4 }}
+    {{- end }}
+spec:
+  endpoints:
+    - port: {{ get (first .Values.managementService.ports) "name" }}
+      scheme: http
+      {{- if .Values.serviceMonitor.interval }}
+      interval: {{ .Values.serviceMonitor.interval }}
+      {{- end }}
+      path: /q/metrics
+      {{- with .Values.serviceMonitor.metricRelabelings }}
+      metricRelabelings:
+      {{- toYaml . | nindent 8 }}
+      {{- end }}
+  namespaceSelector:
+    matchNames:
+      - {{ .Release.Namespace }}
+  selector:
+    matchLabels:
+      {{- include "polaris.selectorLabels" . | nindent 6 }}
+{{- end }}

Added: dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/storage.yaml
==============================================================================
--- dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/storage.yaml 
(added)
+++ dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/storage.yaml 
Wed Jun 25 17:55:39 2025
@@ -0,0 +1,38 @@
+{{/**
+  Copyright (C) 2024 Dremio
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+**/}}
+
+{{- if .Values.logging.file.enabled }}
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: {{ include "polaris.fullnameWithSuffix" (list . "logs") }}
+  namespace: {{ .Release.Namespace }}
+  labels:
+    {{- include "polaris.labels" . | nindent 4 }}
+spec:
+  accessModes:
+    - ReadWriteOnce
+  volumeMode: Filesystem
+  storageClassName: {{ .Values.logging.file.storage.className }}
+  resources:
+    requests:
+      storage: "{{ .Values.logging.file.storage.size }}"
+{{- if .Values.logging.file.storage.selectorLabels }}
+  selector:
+    matchLabels:
+      {{- toYaml .Values.logging.file.storage.selectorLabels | nindent 6 }}
+{{- end }}
+{{- end }}

Added: 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/tests/test-connection.yaml
==============================================================================
--- 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/tests/test-connection.yaml
 (added)
+++ 
dev/incubator/polaris/helm-chart/1.0.0-incubating/templates/tests/test-connection.yaml
 Wed Jun 25 17:55:39 2025
@@ -0,0 +1,44 @@
+{{/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+ 
+   http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/}}
+
+apiVersion: v1
+kind: Pod
+metadata:
+  name: "{{ include "polaris.fullname" . }}-test-connection"
+  namespace: {{ .Release.Namespace }}
+  labels:
+    helm.sh/chart: {{ include "polaris.chart" . }}
+    app.kubernetes.io/managed-by: {{ .Release.Service }}
+    {{- if .Chart.AppVersion }}
+    app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+    {{- end }}
+  annotations:
+    "helm.sh/hook": test
+spec:
+  containers:
+    - name: check-connection
+      image: busybox
+      command: ['sh', '-c']
+      args:
+        - |
+          for i in $(seq 1 10); do
+            wget --spider '{{ include "polaris.fullnameWithSuffix" (list . 
"mgmt") }}:{{ get (first .Values.managementService.ports) "port" 
}}/q/health/ready' && exit 0 || sleep 3;
+          done;
+          exit 1
+  restartPolicy: Never
\ No newline at end of file

Added: 
dev/incubator/polaris/helm-chart/1.0.0-incubating/tests/configmap_test.yaml
==============================================================================
--- dev/incubator/polaris/helm-chart/1.0.0-incubating/tests/configmap_test.yaml 
(added)
+++ dev/incubator/polaris/helm-chart/1.0.0-incubating/tests/configmap_test.yaml 
Wed Jun 25 17:55:39 2025
@@ -0,0 +1,340 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+chart:
+  version: 1.2.3
+  appVersion: 4.5.6
+
+release:
+  name: polaris-release
+  namespace: polaris-ns
+
+templates:
+  - configmap.yaml
+
+tests:
+
+  # metadata.name
+  - it: should set config map name
+    asserts:
+      - equal:
+          path: metadata.name
+          value: polaris-release
+  - it: should set config map name with override
+    set:
+      nameOverride: polaris-override
+    asserts:
+      - equal:
+          path: metadata.name
+          value: polaris-release-polaris-override
+  - it: should set config map name with full override
+    set:
+      fullnameOverride: polaris-override
+    asserts:
+      - equal:
+          path: metadata.name
+          value: polaris-override
+
+  # metadata.namespace
+  - it: should set config map namespace
+    asserts:
+      - equal:
+          path: metadata.namespace
+          value: polaris-ns
+
+  # metadata.labels
+  - it: should set config map default labels
+    asserts:
+      - isSubset:
+          path: metadata.labels
+          content:
+            app.kubernetes.io/name: polaris
+            app.kubernetes.io/instance: polaris-release
+            app.kubernetes.io/version: 4.5.6
+            app.kubernetes.io/managed-by: Helm
+            helm.sh/chart: polaris-1.2.3
+  - it: should set include podLabels in deployment labels
+    set:
+      configMapLabels:
+        app.kubernetes.io/component: polaris
+    asserts:
+      - isSubset:
+          path: metadata.labels
+          content:
+            app.kubernetes.io/component: polaris
+
+  - it: should configure realm context
+    set:
+      realmContext: { type: "custom", realms: [ "realm1", "realm2" ] }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.realm-context.type=custom" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.realm-context.realms=realm1,realm2" }
+
+  - it: should configure features
+    set:
+      features:
+        feature1: true
+        feature2: 42
+        realmOverrides:
+          realm1:
+            feature1: false
+          realm2:
+            feature2: 43
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.features.\"feature1\"=true" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.features.\"feature2\"=42" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.features.realm-overrides.\"realm1\".\"feature1\"=false" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.features.realm-overrides.\"realm2\".\"feature2\"=43" }
+
+  - it: should configure persistence
+    set:
+      persistence: { type: "eclipse-link", eclipseLink: { persistenceUnit: 
"polaris", secret: { name: "polaris-persistence" } } }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.persistence.type=eclipse-link" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.persistence.eclipselink.persistence-unit=polaris" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.persistence.eclipselink.configuration-file=/deployments/config/persistence.xml"
 }
+
+  - it: should configure file-io
+    set:
+      fileIo.type: "custom"
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.file-io.type=custom" }
+
+  - it: should configure GCP token lifespan
+    set:
+      storage: { secret: { gcpTokenLifespan: "PT2H" } }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.storage.gcp.lifespan=PT2H" }
+
+  - it: should configure authentication with RSA key pair
+    set:
+      authentication: { authenticator: { type: custom }, tokenService: { type: 
custom }, tokenBroker: { type: rsa-key-pair, maxTokenGeneration: PT2H, secret: 
{ name: polaris-auth } } }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.authentication.authenticator.type=custom" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.authentication.token-service.type=custom" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.authentication.token-broker.type=rsa-key-pair" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.authentication.token-broker.max-token-generation=PT2H" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.authentication.token-broker.rsa-key-pair.public-key-file=/deployments/config/public.pem"
 }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.authentication.token-broker.rsa-key-pair.private-key-file=/deployments/config/private.pem"
 }
+
+  - it: should configure authentication with symmetric key
+    set:
+      authentication: { tokenBroker: { type: symmetric-key, secret: { name: 
polaris-auth } } }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.authentication.authenticator.type=default" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.authentication.token-service.type=default" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.authentication.token-broker.type=symmetric-key" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.authentication.token-broker.max-token-generation=PT1H" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.authentication.token-broker.symmetric-key.file=/deployments/config/symmetric.key"
 }
+
+  - it: should derive HTTP ports from service configuration
+    set:
+      service: { ports: [ { port: 8080 } ] }
+      managementService: { ports: [ { port: 8081 } ] }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.http.port=8080" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.management.port=8081" }
+
+  - it: should configure console logging
+    set:
+      logging: { level: DEBUG, console: { enabled: true, threshold: INFO, 
format: custom } }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.level=DEBUG" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.console.enable=true" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.console.level=INFO" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.console.format=custom" }
+
+  - it: should configure file logging
+    set:
+      logging: { file: { enabled: true, threshold: DEBUG, format: custom, 
logsDir: /mnt/logs, fileName: custom.log, rotation: { maxFileSize: 50Mi, 
maxBackupIndex: 2, fileSuffix: .yyyy-MM-dd } } }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.file.enable=true" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.file.level=DEBUG" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.file.path=/mnt/logs/custom.log" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.file.rotation.max-file-size=52428800" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.file.rotation.max-backup-index=2" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.file.rotation.file-suffix=.yyyy-MM-dd" }
+
+  - it: should disable logging
+    set:
+      logging: { file: { enabled: false }, console: { enabled: false } }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.file.enable=false" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.console.enable=false" }
+
+  - it: should enable JSON logging
+    set:
+      logging: { file: { enabled: true, json: true }, console: { enabled: 
true, json: true } }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.file.enable=true" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.console.enable=true" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.file.json=true" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.console.json=true" }
+
+  - it: should include logging categories
+    set:
+      logging:
+        categories:
+          # compact style
+          org.acme: DEBUG
+          # expanded style
+          org:
+            acme:
+              service: INFO
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.category.\"org.acme\".level=DEBUG" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.log.category.\"org.acme.service\".level=INFO" }
+
+  - it: should include MDC context
+    set:
+      logging:
+        mdc:
+          # compact style
+          org.acme: foo
+          # expanded style
+          org:
+            acme:
+              service: foo
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.log.mdc.\"org.acme\"=foo" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.log.mdc.\"org.acme.service\"=foo" }
+
+  - it: should include telemetry configuration
+    set:
+      tracing: { enabled: true, endpoint: http://custom:4317, attributes: { 
service.name: custom, foo: bar } }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.otel.exporter.otlp.endpoint=http://custom:4317"; }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.otel.resource.attributes\\[\\d\\]=service.name=custom" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.otel.resource.attributes\\[\\d\\]=foo=bar" }
+
+  - it: should include set sample rate numeric
+    set:
+      tracing: { enabled: true, sample: "0.123" }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.otel.traces.sampler=parentbased_traceidratio" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.otel.traces.sampler.arg=0.123" }
+
+  - it: should include set sample rate "all"
+    set:
+      tracing: { enabled: true, sample: "all" }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.otel.traces.sampler=parentbased_always_on" }
+
+  - it: should include set sample rate "none"
+    set:
+      tracing: { enabled: true, sample: "none" }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.otel.traces.sampler=always_off" }
+
+  - it: should disable tracing by default
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.otel.sdk.disabled=true" }
+
+  - it: should disable tracing
+    set:
+      tracing: { enabled: false }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.otel.sdk.disabled=true" }
+
+  - it: should include custom metrics
+    set:
+      metrics: { enabled: true, tags: { app: custom, foo: bar } }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.metrics.tags.app=custom" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.metrics.tags.foo=bar" }
+
+  - it: should disable metrics
+    set:
+      metrics: { enabled: false }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.micrometer.enabled=false" }
+
+  - it: should include advanced configuration
+    set:
+        advancedConfig:
+          # compact style
+          quarkus.compact.custom: true
+          # expanded style
+          quarkus:
+            expanded:
+              custom: foo
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.compact.custom=true" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.expanded.custom=foo" }
+
+  - it: should not include CORS configuration by default
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.http.cors" }
+        not: true
+
+  - it: should include CORS configuration if defined
+    set:
+      cors: { allowedOrigins: [ "http://localhost:3000";, 
"https://localhost:4000"; ], allowedMethods: [ "GET", "POST" ], allowedHeaders: 
[ "X-Custom1", "X-Custom2" ], exposedHeaders: [ "X-Exposed-Custom1", 
"X-Exposed-Custom2" ], accessControlMaxAge: "PT1H", 
accessControlAllowCredentials: false }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.http.cors.origins=http://localhost:3000,https://localhost:4000"; }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.http.cors.methods=GET,POST" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.http.cors.headers=X-Custom1,X-Custom2" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.http.cors.exposed-headers=X-Exposed-Custom1,X-Exposed-Custom2" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.http.cors.access-control-max-age=PT1H" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"quarkus.http.cors.access-control-allow-credentials=false" }
+
+  - it: should configure rate-limiter with default values
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.rate-limiter.filter.type=no-op" }
+
+  - it: should configure rate-limiter no-op
+    set:
+      rateLimiter.type: no-op
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.rate-limiter.filter.type=no-op" }
+
+  - it: should configure rate-limiter with default token bucket values
+    set:
+      rateLimiter.type: default
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.rate-limiter.filter.type=default" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.rate-limiter.token-bucket.type=default" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.rate-limiter.token-bucket.requests-per-second=9999" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.rate-limiter.token-bucket.window=PT10S" }
+
+  - it: should configure rate-limiter with custom token bucket values
+    set:
+      rateLimiter:
+        type: custom
+        tokenBucket:
+          type: custom
+          requestsPerSecond: 1234
+          window: PT5S
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.rate-limiter.filter.type=custom" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.rate-limiter.token-bucket.type=custom" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.rate-limiter.token-bucket.requests-per-second=1234" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.rate-limiter.token-bucket.window=PT5S" }
+
+  - it: should not include tasks configuration by default
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.tasks" }
+        not: true
+
+  - it: should include tasks configuration if defined
+    set:
+      tasks: { maxConcurrentTasks: 10, maxQueuedTasks: 20 }
+    asserts:
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.tasks.max-concurrent-tasks=10" }
+      - matchRegex: { path: 'data["application.properties"]', pattern: 
"polaris.tasks.max-queued-tasks=20" }


Reply via email to