You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 99d8c6a
Browse filesBrowse the repository at this point in the historyBrowse files
Configure Slack, Teams, SMS, push, SCIM, inbound email and OTel in the Helm chart (#717)
These settings had no chart values and needed config.extraEnv. They now
have config.opentag, config.sms, config.push, config.deliveryPublicUrl,
config.scim, config.inboundEmail and config.otel, with their secrets under
secrets (or an existing Secret or store, by key).
The install refuses what the server refuses at boot: a switch with no
secret behind it, an OpenTag secret under 32 characters, an OpenTag URL or
icon with the pairing off or of the wrong scheme, a partial set of Twilio
settings, a push project id that is not a UUID, and a deliveryPublicUrl
that is not http(s). The CI refusal step exercises them on every target.
With none set, every CI target renders byte for byte as before.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+11Lines changed: 11 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,6 +8,17 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged.
8
8
9
9
## Unreleased
10
10
11
+
### The Helm chart configures Slack, Teams, text messages, push, SCIM, inbound email and OpenTelemetry
12
+
13
+
These settings had no chart values and could only be passed through `config.extraEnv`. They now have
14
+
their own: `config.opentag`, `config.sms`, `config.push`, `config.deliveryPublicUrl`, `config.scim`,
15
+
`config.inboundEmail` and `config.otel`, with the OpenTag secret, the Twilio auth token, the Expo
16
+
access token, the SCIM bearer tokens and the OpenTelemetry headers under `secrets` (or an existing
17
+
Secret or store, by key). The install refuses what the server would refuse at boot, such as an
18
+
OpenTag secret under 32 characters or a partial set of Twilio settings. With none of them set, the
19
+
chart renders exactly as before, so a deployment already passing these through `config.extraEnv`
20
+
keeps working unchanged until it moves them across.
21
+
11
22
### A coworker at its own endpoint can hand work to another Bot
12
23
13
24
A grant letting a remote Bot (a coworker at its own endpoint) hand work to another Bot was accepted and stored, but the grant read kept only built-in Bots, so the remote Bot was never
Copy file name to clipboardExpand all lines: charts/openbot/templates/validation.yaml
+61Lines changed: 61 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -318,3 +318,64 @@ This template renders nothing.
318
318
{{- fail "routines.enabled but externalSecrets.data does not name worker-shared-secret. The API server reads it to recognise the worker and the CronJob reads it to be one, so every pod that mounts it fails to start." }}
319
319
{{- end }}
320
320
{{- end }}
321
+
322
+
{{- /*
323
+
Delivery, the directory and OpenTelemetry export: the refusals the server makes at boot.
324
+
325
+
Each mirrors a throw in `configuredDeliveryProviders` (server/src/delivery/routes.ts), so the value
326
+
to change is named by `helm install` rather than by a pod's crash loop. Nothing is refused here that
327
+
the server would accept: inbound email with one half set is not mounted rather than refused, and
{{- if and (not $opentag.enabled) (or $opentag.url $opentag.botIconUrlTemplate) }}
332
+
{{- fail "config.opentag.url or config.opentag.botIconUrlTemplate is set but config.opentag.enabled is not. The server refuses either without the shared secret; set config.opentag.enabled and secrets.opentagSharedSecret." }}
333
+
{{- end }}
334
+
{{- if $opentag.enabled }}
335
+
{{- if and $opentag.url (not (regexMatch "^https?://" $opentag.url)) }}
336
+
{{- fail "config.opentag.url must be an http(s) URL." }}
337
+
{{- end }}
338
+
{{- if and $opentag.botIconUrlTemplate (not (hasPrefix "https://" $opentag.botIconUrlTemplate)) }}
339
+
{{- fail "config.opentag.botIconUrlTemplate must be an https URL." }}
340
+
{{- end }}
341
+
{{- if and .Values.secrets.opentagSharedSecret (not .Values.secrets.existingSecret) (not .Values.externalSecrets.enabled) }}
342
+
{{- if lt (len .Values.secrets.opentagSharedSecret) 32 }}
343
+
{{- fail "secrets.opentagSharedSecret must be at least 32 characters. Generate one with: openssl rand -hex 32" }}
344
+
{{- end }}
345
+
{{- end }}
346
+
{{- end }}
347
+
{{- $sms := .Values.config.sms | default dict }}
348
+
{{- if $sms.enabled }}
349
+
{{- if or (not $sms.accountSid) (not $sms.verifyServiceSid) (not $sms.fromNumber) }}
350
+
{{- fail "config.sms.enabled needs config.sms.accountSid, config.sms.verifyServiceSid and config.sms.fromNumber. The server takes all four Twilio settings or none." }}
351
+
{{- end }}
352
+
{{- else if or $sms.accountSid $sms.verifyServiceSid $sms.fromNumber }}
353
+
{{- fail "config.sms has Twilio settings but config.sms.enabled is not set. The server takes all four Twilio settings or none; set config.sms.enabled and secrets.twilioAuthToken, or clear them." }}
354
+
{{- end }}
355
+
{{- with (.Values.config.push | default dict).projectId }}
356
+
{{- if not (regexMatch "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" .) }}
357
+
{{- fail "config.push.projectId must be the native app's EAS project UUID." }}
358
+
{{- end }}
359
+
{{- end }}
360
+
{{- with .Values.config.deliveryPublicUrl }}
361
+
{{- if not (regexMatch "^https?://" .) }}
362
+
{{- fail "config.deliveryPublicUrl must be an http(s) URL." }}
363
+
{{- end }}
364
+
{{- end }}
365
+
{{- /*
366
+
The same secrets, for a deployment whose secrets come from a store: the value is not readable at
367
+
template time, but the list of keys is, checked the way `worker-shared-secret` is above.
368
+
*/}}
369
+
{{- if .Values.externalSecrets.enabled }}
370
+
{{- $named := list }}
371
+
{{- range .Values.externalSecrets.data }}{{- $named = append $named .secretKey }}{{- end }}
372
+
{{- if and $opentag.enabled (not (has "opentag-shared-secret" $named)) }}
373
+
{{- fail "config.opentag.enabled but externalSecrets.data does not name opentag-shared-secret, so the server pod cannot start." }}
374
+
{{- end }}
375
+
{{- if and $sms.enabled (not (has "twilio-auth-token" $named)) }}
376
+
{{- fail "config.sms.enabled but externalSecrets.data does not name twilio-auth-token, so the server pod cannot start." }}
377
+
{{- end }}
378
+
{{- if and (.Values.config.scim | default dict).enabled (not (has "scim-bearer-token" $named)) }}
379
+
{{- fail "config.scim.enabled but externalSecrets.data does not name scim-bearer-token, so the server pod cannot start." }}
0 commit comments