Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
1556320
feat(plane-enterprise): expose gunicorn rotation and celery broker en…
akshat5302 Jul 23, 2026
30ac77a
feat(plane-enterprise): expose gunicorn/celery envs and add PLANE_INT…
akshat5302 Jul 23, 2026
dfa566f
fix(plane-enterprise): use ternary directly for CELERY_TASK_PUBLISH_R…
akshat5302 Jul 23, 2026
8f61938
feat(plane-enterprise): update gunicorn and celery environment variab…
akshat5302 Jul 23, 2026
f7a672e
feat(plane-enterprise): quote gunicorn and celery environment variabl…
akshat5302 Jul 24, 2026
da96e4f
chore(plane-enterprise): add IS_SELF_MANAGED and AI usage env vars
akshat5302 Jul 30, 2026
cbb7d5a
feat(plane-enterprise): update AI usage enforcement variable handling…
akshat5302 Jul 30, 2026
2217593
chore(plane-enterprise): remove IS_SELF_MANAGED from ConfigMaps
akshat5302 Jul 30, 2026
cb315ae
Merge remote-tracking branch 'origin/feat/gunicorn-celery-envs' into …
akshat5302 Aug 3, 2026
7685fbc
Merge remote-tracking branch 'origin/feat/add-ai-envs' into feat/comb…
akshat5302 Aug 3, 2026
a76f629
fix(app-env): update CELERY_TASK_PUBLISH_RETRY to use integer values
akshat5302 Aug 3, 2026
1b1a28a
chore(plane-enterprise): add missing silo connector and routing envs
akshat5302 Aug 3, 2026
4dfd37a
[INFRA-473] feat(plane-enterprise): add live-exporter service and EXP…
akshat5302 Aug 3, 2026
c0ce857
feat(live-exporter): remove LIVE_MODE environment variable from deplo…
akshat5302 Aug 4, 2026
0c6ed12
feat(live-exporter): add pull policy configuration for Live Exporter …
akshat5302 Aug 4, 2026
97a7496
fix(plane-enterprise): add LIVE_MODE=exporter env to live-exporter de…
akshat5302 Aug 5, 2026
0129605
feat(plane-enterprise): add EXPORT_DOWNLOAD_BASE_URL env to live-vars
akshat5302 Aug 5, 2026
cdf1177
Merge branch 'master' into feat/combined-enterprise-envs
akshat5302 Aug 11, 2026
2d2b4a9
chore: hardcode API_INTERNAL_BASE_URL in silo, remove from user-facin…
akshat5302 Aug 12, 2026
2224970
chore: remove FLATFILE_API_KEY from plane-enterprise chart
akshat5302 Aug 12, 2026
f4f011b
chore: merge live-exporter branch and bump versions to v3.1.0 / chart…
akshat5302 Aug 12, 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
4 changes: 2 additions & 2 deletions charts/plane-enterprise/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ description: Meet Plane. An Enterprise software development tool to manage issue

type: application

version: 3.1.0
appVersion: "3.0.1"
version: 3.2.0
appVersion: "3.1.0"

home: https://plane.so/
icon: https://plane.so/favicon/favicon-32x32.png
Expand Down
38 changes: 35 additions & 3 deletions charts/plane-enterprise/README.md

Large diffs are not rendered by default.

121 changes: 119 additions & 2 deletions charts/plane-enterprise/questions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ questions:
- variable: planeVersion
label: Plane Version (Docker Image Tag)
type: string
default: v3.0.1
default: v3.1.0
required: true
group: "Docker Registry"
subquestions:
Expand Down Expand Up @@ -267,6 +267,52 @@ questions:
label: "Live Server Secret Key"
type: string
default: "htbqvBJAgpm9bzvf3r4urJer0ENReatceh"
- variable: env.export_queue_name
label: "Export Queue Name"
description: "RabbitMQ queue name for background PDF/DOCX export jobs consumed by the live-exporter service."
type: string
default: "plane-exports"
- variable: env.export_download_base_url
label: "Export Download Base URL"
description: "Base URL for export download redirects. Defaults to licenseDomain with protocol inferred from SSL settings."
type: string
default: ""

- variable: services.live_exporter.enabled
label: "Install Live Exporter Service"
type: boolean
default: true
group: "Live Exporter Setup"
show_subquestion_if: true
subquestions:
- variable: services.live_exporter.replicas
label: "Default Replica Count"
type: int
default: 1
- variable: services.live_exporter.pullPolicy
label: "Live Exporter Pull Policy"
type: enum
options:
- "Always"
- "IfNotPresent"
- "Never"
default: "Always"
- variable: services.live_exporter.memoryLimit
label: "Memory Limit"
type: string
default: 2000Mi
- variable: services.live_exporter.cpuLimit
label: "CPU Limit"
type: string
default: 1000m
- variable: services.live_exporter.memoryRequest
label: "Memory Request"
type: string
default: 50Mi
- variable: services.live_exporter.cpuRequest
label: "CPU Request"
type: string
default: 50m

- variable: services.silo.enabled
label: "Install Silo Service"
Expand Down Expand Up @@ -351,7 +397,6 @@ questions:
label: "Cursor Webhook Secret"
type: string
default: "TTqazTcoBajYKzIAeIKFZeTX9czAoUsG"

- variable: services.silo.connectors.slack.enabled
label: "Slack Integration"
type: boolean
Expand All @@ -371,6 +416,10 @@ questions:
label: "Slack Base URL"
type: string
default: ""
- variable: services.silo.connectors.slack.signing_secret
label: "Slack Signing Secret"
type: string
default: ""

- variable: services.silo.connectors.github.enabled
label: "Github App Integration"
Expand Down Expand Up @@ -399,6 +448,10 @@ questions:
label: "Github Private Key"
type: string
default: ""
- variable: services.silo.connectors.github.webhook_secret
label: "Github Webhook Secret"
type: string
default: ""

- variable: services.silo.connectors.gitlab.enabled
label: "Gitlab App Integration"
Expand Down Expand Up @@ -440,6 +493,42 @@ questions:
type: string
default: ""

- variable: services.silo.connectors.bitbucket.enabled
label: "Bitbucket Integration"
type: boolean
default: false
group: "Silo Connectors"
show_subquestion_if: true
subquestions:
- variable: services.silo.connectors.bitbucket.client_id
label: "Bitbucket Client ID"
type: string
default: ""
- variable: services.silo.connectors.bitbucket.client_secret
label: "Bitbucket Client Secret"
type: string
default: ""
- variable: services.silo.connectors.bitbucket.webhook_secret
label: "Bitbucket Webhook Secret"
type: string
default: ""

- variable: services.silo.connectors.hubspot.enabled
label: "HubSpot Integration"
type: boolean
default: false
group: "Silo Connectors"
show_subquestion_if: true
subquestions:
- variable: services.silo.connectors.hubspot.client_id
label: "HubSpot Client ID"
type: string
default: ""
- variable: services.silo.connectors.hubspot.client_secret
label: "HubSpot Client Secret"
type: string
default: ""

- variable: services.monitor.pullPolicy
label: "Monitor Pull Policy"
type: enum
Expand Down Expand Up @@ -550,6 +639,26 @@ questions:
label: "Webhook Allowed Hosts"
type: string
default: ""
- variable: env.gunicorn_max_requests
label: "Gunicorn Max Requests"
description: "Maximum number of requests a gunicorn worker handles before being restarted. Set to 0 to disable rotation."
type: int
default: 1000
- variable: env.gunicorn_max_requests_jitter
label: "Gunicorn Max Requests Jitter"
description: "Random jitter added to GUNICORN_MAX_REQUESTS to stagger worker restarts. Set to 0 when rotation is disabled."
type: int
default: 150
- variable: env.celery_task_publish_retry
label: "Celery Task Publish Retry"
description: "Retry task publishing on transient AMQP failures instead of silently dropping tasks."
type: boolean
default: true
- variable: env.celery_broker_pool_limit
label: "Celery Broker Pool Limit"
description: "Maximum number of connections in the Celery broker connection pool. Limits stale connection accumulation."
type: int
default: 10
- variable: services.external_api.enabled
label: "Enable External API"
type: boolean
Expand Down Expand Up @@ -1010,6 +1119,14 @@ questions:
label: "CORS Allowed Origins"
type: string
default: ""
- variable: env.pi_envs.ai_usage_agent_max_tokens_budget
label: "AI Usage Agent Max Tokens Budget"
type: string
default: ""
- variable: env.pi_envs.ai_usage_enforcement_enabled
label: "AI Usage Enforcement Enabled"
type: boolean
default: true
- variable: env.pi_envs.celery.vector_sync_enabled
label: "Vector Sync Enabled"
type: boolean
Expand Down
5 changes: 5 additions & 0 deletions charts/plane-enterprise/templates/config-secrets/app-env.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ data:
DEBUG: "0"
DOCKERIZED: "1"
GUNICORN_WORKERS: "1"
GUNICORN_MAX_REQUESTS: {{ .Values.env.gunicorn_max_requests | quote }}
GUNICORN_MAX_REQUESTS_JITTER: {{ .Values.env.gunicorn_max_requests_jitter | quote }}
CELERY_TASK_PUBLISH_RETRY: {{ .Values.env.celery_task_publish_retry | ternary "1" "0" | quote }}
CELERY_BROKER_POOL_LIMIT: {{ .Values.env.celery_broker_pool_limit | quote }}
{{- if .Values.env.web_url}}
WEB_URL: {{ .Values.env.web_url | default "" | quote }}
{{- else if or .Values.ssl.tls_secret_name (and .Values.ssl.createIssuer .Values.ssl.generateCerts) }}
Expand Down Expand Up @@ -111,3 +115,4 @@ data:

WEBHOOK_ALLOWED_IPS: {{ .Values.env.webhook_allowed_ips | default "" | quote }}
WEBHOOK_ALLOWED_HOSTS: {{ .Values.env.webhook_allowed_hosts | default "" | quote }}
AI_USAGE_AGENT_MAX_TOKENS_BUDGET: {{ .Values.env.pi_envs.ai_usage_agent_max_tokens_budget | default "" | quote }}
Comment thread
akshat5302 marked this conversation as resolved.
16 changes: 16 additions & 0 deletions charts/plane-enterprise/templates/config-secrets/live-env.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@ stringData:
{{- else }}
REDIS_URL: {{ .Values.env.remote_redis_url | default "" | quote }}
{{- end }}
{{- if .Values.services.rabbitmq.local_setup }}
AMQP_URL: "amqp://{{ .Values.services.rabbitmq.default_user }}:{{ .Values.services.rabbitmq.default_password }}@{{ .Release.Name }}-rabbitmq.{{ .Release.Namespace }}.svc.{{ .Values.env.default_cluster_domain | default "cluster.local" }}/"
{{- else if .Values.services.rabbitmq.external_rabbitmq_url }}
AMQP_URL: {{ .Values.services.rabbitmq.external_rabbitmq_url | quote }}
{{- else }}
AMQP_URL: ""
{{- end }}
Comment on lines +17 to +23

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect whether the RabbitMQ Service consumes the public servicePort value.
fd -e yaml -e yml . charts/plane-enterprise/templates |
  xargs rg -n -C 4 'services\.rabbitmq\.servicePort|rabbitmq.*servicePort|port:|targetPort:'

Repository: makeplane/helm-charts

Length of output: 38940


Include services.rabbitmq.servicePort in the local AMQP_URL.

When servicePort differs from 5672, the generated URL targets the wrong RabbitMQ Service port and connections fail.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@charts/plane-enterprise/templates/config-secrets/live-env.yaml` around lines
17 - 23, Update the local RabbitMQ `AMQP_URL` branch in the live-env template to
include `.Values.services.rabbitmq.servicePort` after the service hostname,
while preserving the existing external URL and empty fallback branches.

{{- end }}
---
apiVersion: v1
Expand Down Expand Up @@ -41,4 +48,13 @@ data:
{{- else }}
IFRAMELY_URL: http://{{ .Release.Name }}-iframely.{{ .Release.Namespace }}.svc.{{ .Values.env.default_cluster_domain | default "cluster.local" }}:8061/
{{- end }}

{{- if or .Values.ssl.tls_secret_name (and .Values.ssl.createIssuer .Values.ssl.generateCerts) }}
EXPORT_DOWNLOAD_BASE_URL: {{ .Values.env.export_download_base_url | default (printf "https://%s" .Values.license.licenseDomain) | quote }}
{{- else }}
EXPORT_DOWNLOAD_BASE_URL: {{ .Values.env.export_download_base_url | default (printf "http://%s" .Values.license.licenseDomain) | quote }}
{{- end }}

EXPORT_QUEUE_NAME: {{ .Values.env.export_queue_name | default "plane-exports" | quote }}

---
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ data:

FEATURE_FLAG_SERVER_BASE_URL: "http://{{ .Release.Name }}-monitor.{{ .Release.Namespace }}.svc.{{ .Values.env.default_cluster_domain | default "cluster.local" }}:8080"
PI_BASE_PATH: "/pi"
PLANE_INTERNAL_API_HOST: "http://{{ .Release.Name }}-api.{{ .Release.Namespace }}.svc.{{ .Values.env.default_cluster_domain | default "cluster.local" }}:8000"


{{- if eq .Values.env.pi_envs.cors_allowed_origins "*"}}
Expand Down Expand Up @@ -157,6 +158,9 @@ data:
BR_AWS_REGION: {{ .Values.services.pi.ai_providers.embedding_model.aws_region | default "us-east-1" | quote }}
{{- end }}

AI_USAGE_AGENT_MAX_TOKENS_BUDGET: {{ .Values.env.pi_envs.ai_usage_agent_max_tokens_budget | default "" | quote }}
AI_USAGE_ENFORCEMENT_ENABLED: {{ .Values.env.pi_envs.ai_usage_enforcement_enabled | ternary "1" "0" | quote }}

CELERY_VECTOR_SYNC_ENABLED: {{ .Values.env.pi_envs.celery.vector_sync_enabled | ternary "1" "0" | quote }}
CELERY_VECTOR_SYNC_INTERVAL: {{ .Values.env.pi_envs.celery.vector_sync_interval | default 3 | quote }}
CELERY_WORKSPACE_PLAN_SYNC_ENABLED: {{ .Values.env.pi_envs.celery.workspace_plan_sync_enabled | ternary "1" "0" | quote }}
Expand Down
14 changes: 14 additions & 0 deletions charts/plane-enterprise/templates/config-secrets/silo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,15 @@ stringData:
SLACK_CLIENT_SECRET: {{ .Values.services.silo.connectors.slack.client_secret | default "" | quote }}
SLACK_CLIENT_ID: {{ .Values.services.silo.connectors.slack.client_id | default "" | quote }}
SLACK_BASE_URL: {{ .Values.services.silo.connectors.slack.base_url | default "" | quote }}
SLACK_SIGNING_SECRET: {{ .Values.services.silo.connectors.slack.signing_secret | default "" | quote }}
{{- end }}
{{- if .Values.services.silo.connectors.github.enabled }}
GITHUB_CLIENT_SECRET: {{ .Values.services.silo.connectors.github.client_secret | default "" | quote }}
GITHUB_PRIVATE_KEY: {{ .Values.services.silo.connectors.github.private_key | default "" | quote }}
GITHUB_CLIENT_ID: {{ .Values.services.silo.connectors.github.client_id | default "" | quote }}
GITHUB_APP_NAME: {{ .Values.services.silo.connectors.github.app_name | default "" | quote }}
GITHUB_APP_ID: {{ .Values.services.silo.connectors.github.app_id | default "" | quote }}
GITHUB_WEBHOOK_SECRET: {{ .Values.services.silo.connectors.github.webhook_secret | default "" | quote }}
{{- end }}
{{- if .Values.services.silo.connectors.gitlab.enabled }}
GITLAB_CLIENT_SECRET: {{ .Values.services.silo.connectors.gitlab.client_secret | default "" | quote }}
Expand All @@ -57,6 +59,16 @@ stringData:
SENTRY_CLIENT_SECRET: {{ .Values.services.silo.connectors.sentry.client_secret | default "" | quote }}
SENTRY_INTEGRATION_SLUG: {{ .Values.services.silo.connectors.sentry.integration_slug | default "" | quote }}
{{- end }}
{{- if .Values.services.silo.connectors.bitbucket.enabled }}
BITBUCKET_CLIENT_ID: {{ .Values.services.silo.connectors.bitbucket.client_id | default "" | quote }}
BITBUCKET_CLIENT_SECRET: {{ .Values.services.silo.connectors.bitbucket.client_secret | default "" | quote }}
BITBUCKET_WEBHOOK_SECRET: {{ .Values.services.silo.connectors.bitbucket.webhook_secret | default "" | quote }}
{{- end }}

{{- if .Values.services.silo.connectors.hubspot.enabled }}
HUBSPOT_CLIENT_ID: {{ .Values.services.silo.connectors.hubspot.client_id | default "" | quote }}
HUBSPOT_CLIENT_SECRET: {{ .Values.services.silo.connectors.hubspot.client_secret | default "" | quote }}
{{- end }}
{{- end }}
---
{{- if .Values.services.silo.enabled }}
Expand Down Expand Up @@ -90,6 +102,7 @@ data:
{{- end }}

API_BASE_URL: "http://{{ .Release.Name }}-api.{{ .Release.Namespace }}.svc.{{ .Values.env.default_cluster_domain | default "cluster.local" }}:8000/"
API_INTERNAL_BASE_URL: "http://{{ .Release.Name }}-api.{{ .Release.Namespace }}.svc.{{ .Values.env.default_cluster_domain | default "cluster.local" }}:8000/"

{{- if or .Values.ssl.tls_secret_name (and .Values.ssl.createIssuer .Values.ssl.generateCerts) }}
SILO_API_BASE_URL: "https://{{ .Values.license.licenseDomain }}"
Expand All @@ -109,5 +122,6 @@ data:
SENTRY_ENVIRONMENT: {{ .Values.env.silo_envs.sentry_environment | default "development" | quote }}
SENTRY_TRACES_SAMPLE_RATE: {{ .Values.env.silo_envs.sentry_traces_sample_rate | default "0.1" | quote }}


{{- end }}
---
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@

{{- if .Values.services.live_exporter.enabled }}
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: {{ .Release.Namespace }}
name: {{ .Release.Name }}-live-exporter-wl
{{- include "plane.labelsAndAnnotations" (dict "context" $ "values" .Values.services.live_exporter) }}
spec:
replicas: {{ .Values.services.live_exporter.replicas | default 1 }}
selector:
matchLabels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-live-exporter
template:
metadata:
namespace: {{ .Release.Namespace }}
labels:
app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-live-exporter
{{- include "plane.commonLabels" $ | nindent 8 }}
annotations:
timestamp: {{ now | quote }}
spec:
{{- include "plane.podScheduling" .Values.services.live_exporter }}
{{- include "plane.podSecurityContext" . }}
containers:
- name: {{ .Release.Name }}-live-exporter
{{- include "plane.containerSecurityContext" . }}
imagePullPolicy: {{ .Values.services.live_exporter.pullPolicy | default "Always" }}
image: {{ .Values.services.live_exporter.image | default "makeplane/live-commercial" }}:{{ .Values.planeVersion }}
stdin: true
tty: true
resources:
requests:
memory: {{ .Values.services.live_exporter.memoryRequest | default "50Mi" | quote }}
cpu: {{ .Values.services.live_exporter.cpuRequest | default "50m" | quote }}
limits:
memory: {{ .Values.services.live_exporter.memoryLimit | default "2000Mi" | quote }}
cpu: {{ .Values.services.live_exporter.cpuLimit | default "1000m" | quote }}
envFrom:
- configMapRef:
name: {{ .Release.Name }}-live-vars
optional: false
- secretRef:
name: {{ if not (empty .Values.external_secrets.live_env_existingSecret) }}{{ .Values.external_secrets.live_env_existingSecret }}{{ else }}{{ .Release.Name }}-live-secrets{{ end }}
optional: false
env:
- name: LIVE_MODE
value: "exporter"
{{- if .Values.extraEnv }}
{{- toYaml .Values.extraEnv | nindent 10 }}
{{- end }}
serviceAccount: {{ .Release.Name }}-srv-account
serviceAccountName: {{ .Release.Name }}-srv-account
{{- end }}
Loading