Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
815e43d
Sync runtime-api helm chart with source repository
openhands-agent Feb 20, 2026
ff8beb8
Some merge fixes
chuckbutkus Feb 20, 2026
6026d61
More merge fixes
chuckbutkus Feb 20, 2026
6cd3364
More merge fixes
chuckbutkus Feb 20, 2026
17c6cf2
More merge fixes
chuckbutkus Feb 20, 2026
e6f4f25
Merge fixes
chuckbutkus Feb 20, 2026
305ce39
Remove unnecessary values
chuckbutkus Feb 20, 2026
f6eaa08
Monitoring off by default
chuckbutkus Feb 22, 2026
7253bc7
Update serviceaccount.yaml
chuckbutkus Feb 22, 2026
af318f4
Add wait-for-postgres hook job to ensure PostgreSQL is ready before m…
openhands-agent Feb 22, 2026
229682d
Add wait-for-postgres hook job to runtime-api chart
openhands-agent Feb 22, 2026
4017734
Fix postgres startup ordering for runtime-api migrate-db job
openhands-agent Feb 22, 2026
679ce03
Add postMigrate default value to runtime-api values.yaml
openhands-agent Feb 22, 2026
85a30ac
Fix nil pointer errors when accessing hyphenated value keys
openhands-agent Feb 22, 2026
173470c
fix: Use separate ServiceAccount for migrate-db hook to prevent pod f…
openhands-agent Feb 26, 2026
bd254e9
Fixes
chuckbutkus Mar 3, 2026
05d89b8
Update chart versions
chuckbutkus Mar 3, 2026
727d103
Update chart versions
chuckbutkus Mar 3, 2026
eff6953
Merge branch 'main' into sync-runtime-api-chart
chuckbutkus Mar 3, 2026
22c9dbd
Fix runtime-api repo
chuckbutkus Mar 3, 2026
056db8d
Fix runtime-api name and bump version
chuckbutkus Mar 3, 2026
8c60fa7
Bump
chuckbutkus Mar 3, 2026
c3e7e39
Update runtime-api tag
chuckbutkus Mar 3, 2026
7c33883
Fix tag
chuckbutkus Mar 3, 2026
2d3486b
Fix value file
chuckbutkus Mar 3, 2026
81ff8d7
Update lock file
chuckbutkus Mar 3, 2026
7358eb6
Update charts/runtime-api/templates/clusterrole.yaml
chuckbutkus Mar 3, 2026
dc49968
Update runtime-api chart version
chuckbutkus Mar 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions charts/openhands/Chart.lock
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ dependencies:
version: 20.3.0
- name: runtime-api
repository: oci://ghcr.io/all-hands-ai/helm-charts
version: 0.1.20
digest: sha256:993e079383b8356e71d7b12cdc0ae82ee0747f5ce72a9d7307471aa2c9be0da9
generated: "2026-01-15T17:32:49.752308-05:00"
version: 0.1.21-alpha.304
digest: sha256:91de387fcf3da78462ebabb94fb05a5c04733362c9e70c87f3bf56ad583abd1b
generated: "2026-03-03T15:22:05.190106883-05:00"
4 changes: 2 additions & 2 deletions charts/openhands/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apiVersion: v2
description: OpenHands is an AI-driven autonomous software engineer
name: openhands
appVersion: 0.62.0
version: 0.2.1
version: 0.2.3
maintainers:
- name: rbren
- name: xingyao
Expand Down Expand Up @@ -38,5 +38,5 @@ dependencies:
condition: redis.enabled
- name: runtime-api
repository: oci://ghcr.io/all-hands-ai/helm-charts
version: 0.1.20
version: 0.1.21
condition: runtime-api.enabled
6 changes: 5 additions & 1 deletion charts/openhands/templates/_env.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@
- name: FILE_STORE
value: {{ .Values.filestore.type }}
{{- end }}
{{- if .Values.filestore.provider }}
- name: SHARED_EVENT_STORAGE_PROVIDER
value: {{ .Values.filestore.provider }}
{{- end }}
{{- if .Values.runtime.runAsRoot }}
- name: SANDBOX_USER_ID
value: '0'
Expand Down Expand Up @@ -187,7 +191,7 @@
- name: LITE_LLM_API_URL
value: {{ .Values.litellm.url }}
{{- end }}
{{- if index .Values "litellm-helm" "enabled" }}
{{- if and (index .Values "litellm-helm") (index .Values "litellm-helm" "enabled") }}
- name: LITE_LLM_API_KEY
valueFrom:
secretKeyRef:
Expand Down
4 changes: 2 additions & 2 deletions charts/openhands/templates/service.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ spec:
selector:
app: openhands
type: ClusterIP
{{- if index .Values "runtime-api" "enabled" }}
{{- if and (index .Values "runtime-api") (index .Values "runtime-api" "enabled") }}
---
apiVersion: v1
kind: Service
Expand Down Expand Up @@ -69,7 +69,7 @@ spec:
app.kubernetes.io/name: redis
app.kubernetes.io/component: master
{{- end }}
{{- if index .Values "litellm-helm" "enabled" }}
{{- if and (index .Values "litellm-helm") (index .Values "litellm-helm" "enabled") }}
---
apiVersion: v1
kind: Service
Expand Down
43 changes: 43 additions & 0 deletions charts/openhands/templates/wait-for-postgres.job.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{{- if and .Values.postgresql.enabled .Values.migrationJob.enabled (not .Values.externalDatabase.enabled) }}
apiVersion: batch/v1
kind: Job
metadata:
name: wait-for-postgres
annotations:
"helm.sh/hook": "post-install,post-upgrade"
"helm.sh/hook-weight": "-10"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
spec:
ttlSecondsAfterFinished: 300
backoffLimit: 30
activeDeadlineSeconds: 300
template:
metadata:
name: wait-for-postgres
spec:
serviceAccountName: {{ .Values.serviceAccount.name }}
restartPolicy: OnFailure
{{- with .Values.securityContext }}
securityContext:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
containers:
- name: wait-for-postgres
image: "bitnamilegacy/postgresql:latest"
command: ['sh', '-c']
args:
- |
DB_HOST="oh-main-postgresql"
echo "Waiting for PostgreSQL at $DB_HOST to be ready..."
until PGPASSWORD=$DB_PASS psql -h $DB_HOST -p 5432 -U postgres -c '\q' > /dev/null 2>&1; do
echo "PostgreSQL is unavailable - sleeping for 2 seconds"
sleep 2
done
echo "PostgreSQL is up and running!"
env:
{{- include "openhands.env" . | nindent 12 }}
{{- end }}
6 changes: 3 additions & 3 deletions charts/runtime-api/Chart.lock
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
dependencies:
- name: postgresql
repository: https://charts.bitnami.com/bitnami
version: 15.5.38
version: 15.5.32
- name: helm-release-pruner
repository: https://charts.fairwinds.com/stable
version: 3.3.0
digest: sha256:9f911cd2f97b7cbaa03b13b538f1ee44e0fb589f40c797c71ccc032e3a669ba5
generated: "2025-08-12T22:14:25.137674542-04:00"
digest: sha256:2624e849f4565a8eb318f74efecedb84037f025f80796663db9c78f4bcdd80a8
generated: "2024-09-18T17:44:55.142745222-04:00"
4 changes: 2 additions & 2 deletions charts/runtime-api/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: v2
name: runtime-api
description: A Helm chart for the Flask application
version: 0.1.20 # Change this to trigger a new helm chart version being published
description: A Helm chart for the FastAPI application
version: 0.1.21 # Change this to trigger a new helm chart version being published
appVersion: "1.0.0"
dependencies:
- name: postgresql
Expand Down
5 changes: 5 additions & 0 deletions charts/runtime-api/templates/cleanup-cronjob.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@ metadata:
spec:
schedule: {{ .Values.cleanup.schedule | quote }}
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: {{ .Values.jobSettings.successfulJobsHistoryLimit }}
failedJobsHistoryLimit: {{ .Values.jobSettings.failedJobsHistoryLimit }}
jobTemplate:
spec:
activeDeadlineSeconds: {{ .Values.jobSettings.activeDeadlineSeconds }}
template:
spec:
{{- with .Values.securityContext }}
Expand Down Expand Up @@ -43,5 +46,7 @@ spec:
- name: ingress-base-config
mountPath: /ingress-base
{{- end }}
resources:
{{- toYaml .Values.jobSettings.resources | nindent 14 }}
restartPolicy: OnFailure
{{- end }}
3 changes: 3 additions & 0 deletions charts/runtime-api/templates/create-db-user-job.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ metadata:
"helm.sh/hook": "pre-install,pre-upgrade"
"helm.sh/hook-weight": "-10"
spec:
activeDeadlineSeconds: {{ .Values.jobSettings.activeDeadlineSeconds }}
template:
spec:
{{- with .Values.securityContext }}
Expand All @@ -27,6 +28,8 @@ spec:
secretKeyRef:
name: postgres-password
key: password
resources:
{{- toYaml .Values.jobSettings.resources | nindent 10 }}
command:
- sh
- -c
Expand Down
7 changes: 5 additions & 2 deletions charts/runtime-api/templates/db-cleanup-cronjob.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ metadata:
spec:
schedule: {{ .Values.dbCleanup.schedule | quote }}
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: {{ .Values.dbCleanup.successfulJobsHistoryLimit }}
failedJobsHistoryLimit: {{ .Values.dbCleanup.failedJobsHistoryLimit }}
successfulJobsHistoryLimit: {{ .Values.jobSettings.successfulJobsHistoryLimit }}
failedJobsHistoryLimit: {{ .Values.jobSettings.failedJobsHistoryLimit }}
jobTemplate:
spec:
activeDeadlineSeconds: {{ .Values.jobSettings.activeDeadlineSeconds }}
template:
spec:
{{- with .Values.securityContext }}
Expand Down Expand Up @@ -47,5 +48,7 @@ spec:
- name: ingress-base-config
mountPath: /ingress-base
{{- end }}
resources:
{{- toYaml .Values.jobSettings.resources | nindent 14 }}
restartPolicy: OnFailure
{{- end }}
15 changes: 6 additions & 9 deletions charts/runtime-api/templates/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,35 +14,32 @@ spec:
labels:
{{- include "runtime-api.selectorLabels" . | nindent 8 }}
spec:
serviceAccountName: {{ .Values.serviceAccount.name }}
{{- with .Values.securityContext }}
securityContext:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ .Values.serviceAccount.name }}
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- if or .Values.warmRuntimes.enabled .Values.ingressBase.enabled }}
volumes:
{{- if .Values.warmRuntimes.enabled }}
{{- if .Values.warmRuntimes.enabled }}
- name: warm-runtimes-config
configMap:
name: {{ .Values.warmRuntimes.configMapName }}
{{- end }}
{{- if .Values.ingressBase.enabled }}
{{- end }}
{{- if .Values.ingressBase.enabled }}
- name: ingress-base-config
configMap:
name: {{ include "runtime-api.fullname" . }}-ingress-base
{{- end }}
{{- end }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
{{- if .Values.datadog.enabled }}
command: ["/bin/sh", "-c", "ddtrace-run python -m flask run --host=0.0.0.0"]
{{- else }}
command: ["/bin/sh", "-c", "python -m flask run --host=0.0.0.0"]
{{- end }}
ports:
- name: http
containerPort: 5000
Expand Down
26 changes: 21 additions & 5 deletions charts/runtime-api/templates/migrate-db.job.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,31 @@ metadata:
labels:
{{- include "runtime-api.labels" . | nindent 4 }}
annotations:
{{- if not (or .Values.postgresql.enabled .Values.postgresql.postMigrate) }}
"helm.sh/hook": "pre-install,pre-upgrade"
{{- else }}
"helm.sh/hook": "post-install,post-upgrade"
{{- end }}
"helm.sh/hook-weight": "-5"
{{- if .Values.postgresql.isFeatureDeploy }}
"helm.sh/hook-delete-policy": "hook-succeeded"
{{- else }}
"helm.sh/hook-delete-policy": "before-hook-creation"
{{- end }}
spec:
activeDeadlineSeconds: {{ .Values.jobSettings.activeDeadlineSeconds }}
template:
metadata:
name: {{ include "runtime-api.fullname" . }}-migrate-db
labels:
{{- include "runtime-api.selectorLabels" . | nindent 8 }}
spec:
serviceAccountName: {{ .Values.serviceAccount.name }}
restartPolicy: OnFailure
{{- with .Values.securityContext }}
securityContext:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ .Values.serviceAccount.name }}-hook
restartPolicy: OnFailure
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
Expand All @@ -35,28 +40,37 @@ spec:
configMap:
name: {{ include "runtime-api.fullname" . }}-ingress-base
{{- end }}
{{- if .Values.externalDatabase.enabled }}
{{- if or .Values.externalDatabase.enabled .Values.postgresql.postMigrate }}
initContainers:
- name: check-db-exists
- name: wait-for-postgres
image: "bitnamilegacy/postgresql:latest"
command: ['sh', '-c']
args:
- |
echo "Waiting for PostgreSQL at $DB_HOST to be ready..."
until PGPASSWORD=$DB_PASS psql -h $DB_HOST -p 5432 -U $DB_USER -d postgres -c '\q' > /dev/null 2>&1; do
echo "PostgreSQL is unavailable - sleeping for 2 seconds"
sleep 2
done
echo "PostgreSQL is up and running!"
{{- if .Values.externalDatabase.enabled }}
echo "Checking if the DB \"$DB_NAME\" and user \"$DB_USER\" exist..."
export PGPASSWORD=$DB_ADMIN_PASSWORD
# Create the database if it doesn't exist
psql -h $DB_HOST -p 5432 -U $DB_ADMIN_USER -d postgres -tc "SELECT 1 FROM pg_database WHERE datname='$DB_NAME'" | grep -q 1 || \
psql -h $DB_HOST -p 5432 -U $DB_ADMIN_USER -d postgres -c "CREATE DATABASE $DB_NAME;"

# Create the user if it doesn't exist
psql -h $DB_HOST -p 5432 -U $DB_ADMIN_USER -d $DB_NAME -tc "SELECT 1 FROM pg_roles WHERE rolname='$DB_USER'" | grep -q 1 || \
(psql -h $DB_HOST -p 5432 -U $DB_ADMIN_USER -d $DB_NAME -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS'; GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;")
{{- end }}
env:
{{- if .Values.externalDatabase.enabled }}
- name: DB_ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: {{ .Values.externalDatabase.existingSecret }}
key: admin_password
{{- end }}
{{- include "runtime-api.env" . | nindent 12 }}
{{- end }}
containers:
Expand All @@ -70,3 +84,5 @@ spec:
- name: ingress-base-config
mountPath: /ingress-base
{{- end }}
resources:
{{- toYaml .Values.jobSettings.resources | nindent 12 }}
14 changes: 14 additions & 0 deletions charts/runtime-api/templates/monitoring.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{{- if .Values.monitoring.enabled }}
apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
name: {{ include "runtime-api.fullname" . }}-monitoring
spec:
selector:
matchLabels:
{{- include "runtime-api.selectorLabels" . | nindent 6 }}
endpoints:
- port: 5000
interval: 30s
path: /metrics
{{- end }}
5 changes: 5 additions & 0 deletions charts/runtime-api/templates/pod-status-logger-cronjob.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@ metadata:
spec:
schedule: {{ .Values.podStatusLogger.schedule | quote }}
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: {{ .Values.jobSettings.successfulJobsHistoryLimit }}
failedJobsHistoryLimit: {{ .Values.jobSettings.failedJobsHistoryLimit }}
jobTemplate:
spec:
activeDeadlineSeconds: {{ .Values.jobSettings.activeDeadlineSeconds }}
template:
spec:
{{- with .Values.securityContext }}
Expand Down Expand Up @@ -39,5 +42,7 @@ spec:
- name: ingress-base-config
mountPath: /ingress-base
{{- end }}
resources:
{{- toYaml .Values.jobSettings.resources | nindent 14 }}
restartPolicy: OnFailure
{{- end }}
19 changes: 15 additions & 4 deletions charts/runtime-api/templates/serviceaccount.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,21 @@ metadata:
name: {{ .Values.serviceAccount.name }}
labels:
{{- include "runtime-api.labels" . | nindent 4 }}
{{- if .Values.serviceAccount.annotations }}
{{- with .Values.serviceAccount.annotations }}
annotations:
{{- range $key, $value := .Values.serviceAccount.annotations }}
"{{ $key }}": "{{ $value }}"
{{- end }}
{{- toYaml . | nindent 4 }}
{{- end }}
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ .Values.serviceAccount.name }}-hook
labels:
{{- include "runtime-api.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": "pre-install,pre-upgrade"
"helm.sh/hook-weight": "-10"
{{- with .Values.serviceAccount.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}
Loading
Loading