release: Plane-EE v3.1.0 - #276
Conversation
…v vars Add GUNICORN_MAX_REQUESTS, GUNICORN_MAX_REQUESTS_JITTER, CELERY_TASK_PUBLISH_RETRY, and CELERY_BROKER_POOL_LIMIT to the app-vars ConfigMap so operators can tune worker rotation and broker pool behaviour without rebuilding the image. Defaults set to Kubernetes-friendly values (rotation disabled, publish retry enabled, pool bounded to 10) to eliminate the silent task-dispatch failures reported in issue #261. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ERNAL_API_HOST to pi-api Add to app-vars ConfigMap (configurable via values.yaml): - GUNICORN_MAX_REQUESTS (default 0 — rotation disabled, recommended for K8s) - GUNICORN_MAX_REQUESTS_JITTER (default 0) - CELERY_TASK_PUBLISH_RETRY (default True — prevent silent task drops on AMQP reconnect) - CELERY_BROKER_POOL_LIMIT (default 10 — bound connection pool to avoid stale accumulation) Add to pi-api-vars ConfigMap (hardcoded internal cluster URL): - PLANE_INTERNAL_API_HOST — points directly to the in-cluster API service Fixes the silent CSV export failures reported in issue #261 where gunicorn worker rotation caused stale AMQP connections to silently discard published tasks. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ETRY Align with existing boolean pattern (ternary without default) so that setting celery_task_publish_retry: false in values.yaml is respected. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…les for improved configuration
…e values for consistency
- IS_SELF_MANAGED hardcoded to "0" in app-vars and pi-api-vars ConfigMaps - AI_USAGE_AGENT_MAX_TOKENS_BUDGET added to api and pi containers (default: empty) - AI_USAGE_ENFORCEMENT_ENABLED added to pi containers only (default: 1) - Bump chart version 3.0.0 → 3.0.1 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… in pi-api-env.yaml
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…feat/combined-enterprise-envs
…ined-enterprise-envs
WalkthroughThe Plane Enterprise Helm chart adds a Live exporter Deployment, export queue settings, API runtime controls, connector credentials, and AI usage settings. It updates Plane version references and increments the chart version to ChangesEnterprise chart configuration
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant HelmRelease
participant LiveExporter
participant ConfigMapsSecrets
participant RabbitMQ
HelmRelease->>LiveExporter: Render enabled Deployment
HelmRelease->>ConfigMapsSecrets: Render export and broker settings
ConfigMapsSecrets->>LiveExporter: Inject environment configuration
LiveExporter->>RabbitMQ: Process export queue jobs
Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with 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.
Inline comments:
In `@charts/plane-enterprise/README.md`:
- Around line 501-504: Update the API deployment environment-variable table in
README.md to add rows for env.pi_envs.ai_usage_agent_max_tokens_budget,
env.pi_envs.ai_usage_enforcement_enabled, and env.pi_envs.plane_api_host,
matching their defaults and descriptions from questions.yml.
In `@charts/plane-enterprise/templates/config-secrets/app-env.yaml`:
- Line 118: Preserve an explicitly configured zero for
AI_USAGE_AGENT_MAX_TOKENS_BUDGET by replacing the falsy-value defaulting in both
occurrences: charts/plane-enterprise/templates/config-secrets/app-env.yaml:118
and charts/plane-enterprise/templates/config-secrets/pi-api-env.yaml:161. Keep
present values unchanged, or enforce that the input is provided as a string.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 9ae0547b-2283-4a9e-b9a3-46527b3ec35c
📒 Files selected for processing (6)
charts/plane-enterprise/Chart.yamlcharts/plane-enterprise/README.mdcharts/plane-enterprise/questions.ymlcharts/plane-enterprise/templates/config-secrets/app-env.yamlcharts/plane-enterprise/templates/config-secrets/pi-api-env.yamlcharts/plane-enterprise/values.yaml
Wires env vars defined in silo's env.ts schema that were absent from the plane-enterprise Helm chart: **Secrets (connector blocks):** - SLACK_SIGNING_SECRET — added to the slack connector conditional block - GITHUB_WEBHOOK_SECRET — added to the github connector conditional block - Bitbucket connector block (BITBUCKET_CLIENT_ID/SECRET/WEBHOOK_SECRET) - Flatfile connector block (FLATFILE_API_KEY) - HubSpot connector block (HUBSPOT_CLIENT_ID/SECRET) **ConfigMap:** - API_INTERNAL_BASE_URL — defaults to the same in-cluster API service DNS as API_BASE_URL; overridable via env.silo_envs.api_internal_base_url - IS_SELF_MANAGED — hardcoded "1" (EE deployments are always self-managed) values.yaml, questions.yml, and README.md updated accordingly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ORT_QUEUE_NAME env - Add live-exporter Deployment (same image as live, LIVE_MODE=exporter, no HTTP port) - Add AMQP_URL to live-secrets (Secret) for live and live-exporter - Add EXPORT_QUEUE_NAME to live-vars ConfigMap (default: plane-exports) - Declare services.live_exporter and env.export_queue_name in values.yaml - Add Rancher form entries in questions.yml - Document in README under Live Exporter and live_env_existingSecret sections - Bump chart version 3.0.0 → 3.1.0 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ployment Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Defaults to licenseDomain with protocol inferred from SSL settings. Configurable via env.export_download_base_url. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
charts/plane-enterprise/README.md (1)
550-574: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winDocument connector variables for external Silo Secrets.
When
external_secrets.silo_env_existingSecretis set, the chart does not generate the Silo Secret. The External Secrets Config table omitsSLACK_SIGNING_SECRET,GITHUB_WEBHOOK_SECRET,BITBUCKET_CLIENT_ID,BITBUCKET_CLIENT_SECRET,BITBUCKET_WEBHOOK_SECRET,FLATFILE_API_KEY,HUBSPOT_CLIENT_ID, andHUBSPOT_CLIENT_SECRET. Add these rows so external-secret deployments can configure the connectors.🤖 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/README.md` around lines 550 - 574, Update the External Secrets Config table in the README to document rows for SLACK_SIGNING_SECRET, GITHUB_WEBHOOK_SECRET, BITBUCKET_CLIENT_ID, BITBUCKET_CLIENT_SECRET, BITBUCKET_WEBHOOK_SECRET, FLATFILE_API_KEY, HUBSPOT_CLIENT_ID, and HUBSPOT_CLIENT_SECRET. Match the existing connector variable naming, defaults, conditional requirements, and descriptions used by the corresponding services.silo.connectors entries.
🤖 Prompt for all review comments with 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.
Inline comments:
In `@charts/plane-enterprise/Chart.yaml`:
- Around line 8-9: Align the Chart.yaml appVersion with the default image tag by
setting appVersion to 3.0.1, while leaving the chart version unchanged.
In `@charts/plane-enterprise/questions.yml`:
- Around line 354-358: Update the Silo Deployment configuration table in
README.md to document env.silo_envs.api_internal_base_url, including that it
overrides the API internal base URL and an empty value uses the in-cluster API
service URL.
---
Outside diff comments:
In `@charts/plane-enterprise/README.md`:
- Around line 550-574: Update the External Secrets Config table in the README to
document rows for SLACK_SIGNING_SECRET, GITHUB_WEBHOOK_SECRET,
BITBUCKET_CLIENT_ID, BITBUCKET_CLIENT_SECRET, BITBUCKET_WEBHOOK_SECRET,
FLATFILE_API_KEY, HUBSPOT_CLIENT_ID, and HUBSPOT_CLIENT_SECRET. Match the
existing connector variable naming, defaults, conditional requirements, and
descriptions used by the corresponding services.silo.connectors entries.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: f89361fb-3b22-4248-9937-f3bd1c56db7a
📒 Files selected for processing (6)
charts/plane-enterprise/Chart.yamlcharts/plane-enterprise/README.mdcharts/plane-enterprise/questions.ymlcharts/plane-enterprise/templates/config-secrets/app-env.yamlcharts/plane-enterprise/templates/config-secrets/silo.yamlcharts/plane-enterprise/values.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
- charts/plane-enterprise/templates/config-secrets/app-env.yaml
| - variable: env.silo_envs.api_internal_base_url | ||
| label: "API Internal Base URL" | ||
| description: "Internal cluster URL for the API service. Defaults to the in-cluster service DNS when left empty." | ||
| type: string | ||
| default: "" |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Document env.silo_envs.api_internal_base_url in charts/plane-enterprise/README.md.
Line 354 adds a supported override. The Silo Deployment table does not document this key. Add a row that states an empty value uses the in-cluster API service URL.
🤖 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/questions.yml` around lines 354 - 358, Update the
Silo Deployment configuration table in README.md to document
env.silo_envs.api_internal_base_url, including that it overrides the API
internal base URL and an empty value uses the in-cluster API service URL.
…g config Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… 3.2.0 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
charts/plane-enterprise/README.md (1)
458-481: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winDocument the remaining Live exporter settings.
Add rows for
env.export_download_base_urlandservices.live_exporter.pullPolicy. The chart exposes both settings, but this table does not document them.🤖 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/README.md` around lines 458 - 481, Update the README settings tables to document the exposed env.export_download_base_url and services.live_exporter.pullPolicy configuration keys, including their current defaults and concise descriptions consistent with the surrounding entries.
🤖 Prompt for all review comments with 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.
Inline comments:
In `@charts/plane-enterprise/templates/config-secrets/live-env.yaml`:
- Around line 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.
---
Outside diff comments:
In `@charts/plane-enterprise/README.md`:
- Around line 458-481: Update the README settings tables to document the exposed
env.export_download_base_url and services.live_exporter.pullPolicy configuration
keys, including their current defaults and concise descriptions consistent with
the surrounding entries.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: b25d1a78-79c5-4323-b10d-51e4a71910a5
📒 Files selected for processing (7)
charts/plane-enterprise/Chart.yamlcharts/plane-enterprise/README.mdcharts/plane-enterprise/questions.ymlcharts/plane-enterprise/templates/config-secrets/live-env.yamlcharts/plane-enterprise/templates/config-secrets/silo.yamlcharts/plane-enterprise/templates/workloads/live-exporter.deployment.yamlcharts/plane-enterprise/values.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
- charts/plane-enterprise/templates/config-secrets/silo.yaml
| {{- 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 }} |
There was a problem hiding this comment.
🗄️ 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.
What
Combines #271 and #272 into a single PR. Adds 7 new env vars to the
plane-enterprisechart across two ConfigMaps, plus documents them invalues.yaml,questions.yml, andREADME.md.app-varsConfigMap (templates/config-secrets/app-env.yaml):pi-api-varsConfigMap (templates/config-secrets/pi-api-env.yaml):Chart version bumped
3.0.0 → 3.0.1.Why
Gunicorn / Celery (from INFRA-456, originally #271): A 50% silent CSV export failure rate was traced to Gunicorn worker rotation (
--max-requestsin the image entrypoint). Each rotation causes a ~10–30 s AMQP reconnect window; withoutCELERY_TASK_PUBLISH_RETRY, failed publishes are silently dropped, leaving export records stuck inqueued. Without a pool limit, stale connections accumulate. These vars expose the tuning knobs needed to fix it.AI usage envs (from INFRA-465, originally #272):
AI_USAGE_AGENT_MAX_TOKENS_BUDGETandAI_USAGE_ENFORCEMENT_ENABLEDalign the chart with commercial deployment configs for AI token budget enforcement.PLANE_INTERNAL_API_HOST: Allows pi-api to reach the backend directly over the cluster network instead of going through the ingress.Scope / behavior
GUNICORN_MAX_REQUESTSapp-vars10001200. Set to0to disable.GUNICORN_MAX_REQUESTS_JITTERapp-vars1500when rotation is disabled.CELERY_TASK_PUBLISH_RETRYapp-varsTrueCELERY_BROKER_POOL_LIMITapp-vars100to disable.AI_USAGE_AGENT_MAX_TOKENS_BUDGETapp-vars,pi-api-vars""AI_USAGE_ENFORCEMENT_ENABLEDpi-api-vars"1"env.pi_envs.ai_usage_enforcement_enabled: falseto render"0".PLANE_INTERNAL_API_HOSTpi-api-varsservices.pi.enabled=true(template already gated).Testing
helm lint— clean, 0 failures.helm templatewith defaults:helm templatewith--set env.gunicorn_max_requests=0 --set env.gunicorn_max_requests_jitter=0 --set env.celery_task_publish_retry=false --set env.celery_broker_pool_limit=0:Related
🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Documentation
Chores