-
Notifications
You must be signed in to change notification settings - Fork 29
release: Plane-EE:v3.0.0 #242
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
c39bf9d
2436a50
5ff862e
10b639e
baaefee
e3e04ed
0e8e3fe
a118d30
2ff3488
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| {{- if .Values.services.webhook_consumer.enabled }} | ||
| apiVersion: v1 | ||
| kind: ConfigMap | ||
| metadata: | ||
| namespace: {{ .Release.Namespace }} | ||
| name: {{ .Release.Name }}-webhook-consumer-vars | ||
| labels: | ||
| {{- include "plane.commonLabels" $ | nindent 4 }} | ||
| data: | ||
| WEBHOOK_QUEUE_NAME: {{ .Values.env.webhook_consumer_envs.queue_name | default "plane.webhook" | quote }} | ||
| WEBHOOK_PREFETCH_COUNT: {{ .Values.env.webhook_consumer_envs.prefetch_count | default 10 | quote }} | ||
| --- | ||
| {{- end }} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,80 @@ | ||
| {{- if .Values.services.webhook_consumer.enabled }} | ||
| apiVersion: apps/v1 | ||
| kind: Deployment | ||
| metadata: | ||
| namespace: {{ .Release.Namespace }} | ||
| name: {{ .Release.Name }}-webhook-consumer-wl | ||
| {{- include "plane.labelsAndAnnotations" (dict "context" $ "values" .Values.services.webhook_consumer) }} | ||
| spec: | ||
| replicas: {{ .Values.services.webhook_consumer.replicas | default 1 }} | ||
| selector: | ||
| matchLabels: | ||
| app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-webhook-consumer | ||
| template: | ||
| metadata: | ||
| namespace: {{ .Release.Namespace }} | ||
| labels: | ||
| app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-webhook-consumer | ||
| {{- include "plane.commonLabels" $ | nindent 8 }} | ||
| annotations: | ||
| timestamp: {{ now | quote }} | ||
| spec: | ||
| {{- include "plane.podScheduling" .Values.services.webhook_consumer }} | ||
| {{- include "plane.podSecurityContext" . }} | ||
| containers: | ||
| - name: {{ .Release.Name }}-webhook-consumer | ||
| {{- include "plane.containerSecurityContext" . }} | ||
| imagePullPolicy: {{ .Values.services.api.pullPolicy | default "Always" }} | ||
| image: {{ .Values.services.api.image | default "makeplane/backend-commercial" }}:{{ .Values.planeVersion }} | ||
| stdin: true | ||
| tty: true | ||
| resources: | ||
| requests: | ||
| memory: {{ .Values.services.webhook_consumer.memoryRequest | default "500Mi" | quote }} | ||
| cpu: {{ .Values.services.webhook_consumer.cpuRequest | default "250m" | quote }} | ||
| limits: | ||
| memory: {{ .Values.services.webhook_consumer.memoryLimit | default "1000Mi" | quote }} | ||
| cpu: {{ .Values.services.webhook_consumer.cpuLimit | default "500m" | quote}} | ||
| readinessProbe: | ||
| exec: | ||
| command: | ||
| - sh | ||
| - -c | ||
| - pgrep -f "python" > /dev/null | ||
| initialDelaySeconds: 10 | ||
| failureThreshold: 3 | ||
| periodSeconds: 30 | ||
| successThreshold: 1 | ||
| timeoutSeconds: 5 | ||
| command: | ||
| - ./bin/docker-entrypoint-webhook-consumer.sh | ||
| envFrom: | ||
| - configMapRef: | ||
| name: {{ .Release.Name }}-webhook-consumer-vars | ||
| optional: false | ||
| - configMapRef: | ||
| name: {{ .Release.Name }}-app-vars | ||
| optional: false | ||
| - secretRef: | ||
| name: {{ if not (empty .Values.external_secrets.app_env_existingSecret) }}{{ .Values.external_secrets.app_env_existingSecret }}{{ else }}{{ .Release.Name }}-app-secrets{{ end }} | ||
| optional: false | ||
| - secretRef: | ||
| name: {{ if not (empty .Values.external_secrets.doc_store_existingSecret) }}{{ .Values.external_secrets.doc_store_existingSecret }}{{ else }}{{ .Release.Name }}-doc-store-secrets{{ end }} | ||
| optional: false | ||
| - secretRef: | ||
| name: {{ if not (empty .Values.external_secrets.opensearch_existingSecret) }}{{ .Values.external_secrets.opensearch_existingSecret }}{{ else }}{{ .Release.Name }}-opensearch-secrets{{ end }} | ||
| optional: false | ||
| {{- if .Values.services.silo.enabled }} | ||
| - secretRef: | ||
| name: {{ if not (empty .Values.external_secrets.silo_env_existingSecret) }}{{ .Values.external_secrets.silo_env_existingSecret }}{{ else }}{{ .Release.Name }}-silo-secrets{{ end }} | ||
| optional: false | ||
| {{- end }} | ||
| {{- if .Values.extraEnv }} | ||
| env: | ||
| {{- toYaml .Values.extraEnv | nindent 10 }} | ||
| {{- end }} | ||
|
|
||
| serviceAccount: {{ .Release.Name }}-srv-account | ||
| serviceAccountName: {{ .Release.Name }}-srv-account | ||
| --- | ||
| {{- end }} |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -1,4 +1,4 @@ | ||||||
| planeVersion: v2.6.4 | ||||||
| planeVersion: v3.0.0 | ||||||
|
|
||||||
| dockerRegistry: | ||||||
| enabled: false | ||||||
|
|
@@ -359,6 +359,7 @@ services: | |||||
| enabled: false | ||||||
| client_id: '' | ||||||
| client_secret: '' | ||||||
| base_url: '' | ||||||
| github: | ||||||
| enabled: false | ||||||
| client_id: '' | ||||||
|
|
@@ -414,7 +415,20 @@ services: | |||||
| cpuLimit: 500m | ||||||
| memoryRequest: 50Mi | ||||||
| cpuRequest: 50m | ||||||
| pullPolicy: Always | ||||||
| assign_cluster_ip: false | ||||||
| nodeSelector: {} | ||||||
| tolerations: [] | ||||||
| affinity: {} | ||||||
| labels: {} | ||||||
| annotations: {} | ||||||
|
|
||||||
| webhook_consumer: | ||||||
| enabled: false | ||||||
| replicas: 1 | ||||||
| memoryLimit: 1000Mi | ||||||
| cpuLimit: 500m | ||||||
| memoryRequest: 500Mi | ||||||
| cpuRequest: 250m | ||||||
| assign_cluster_ip: false | ||||||
| nodeSelector: {} | ||||||
| tolerations: [] | ||||||
|
|
@@ -591,6 +605,11 @@ env: | |||||
| instance_admin_email: '' | ||||||
| web_url: '' | ||||||
|
|
||||||
| # Comma-separated list of IPs/CIDRs and hostnames that webhooks are allowed to target. | ||||||
| # Leave empty to allow all (no restriction). | ||||||
| webhook_allowed_ips: '' | ||||||
| webhook_allowed_hosts: '' | ||||||
|
|
||||||
| live_sentry_dsn: "" | ||||||
| live_sentry_environment: "" | ||||||
| live_sentry_traces_sample_rate: "" | ||||||
|
|
@@ -610,6 +629,7 @@ env: | |||||
| cors_allowed_origins: '' | ||||||
| jira_server_issues_page_size: 50 | ||||||
| jira_server_issues_parallel_pages: 1 | ||||||
| cursor_webhook_secret: 'TTqazTcoBajYKzIAeIKFZeTX9czAoUsG' | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win Do not ship a shared default webhook secret.
Proposed direction- cursor_webhook_secret: 'TTqazTcoBajYKzIAeIKFZeTX9czAoUsG'
+ cursor_webhook_secret: ''Then enforce it with Helm’s 📝 Committable suggestion
Suggested change
🧰 Tools🪛 Betterleaks (1.6.1)[high] 632-632: Detected a Generic API Key, potentially exposing access to various services and sensitive operations. (generic-api-key) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||||
|
|
||||||
| email_service_envs: | ||||||
| smtp_domain: '' | ||||||
|
|
@@ -637,6 +657,10 @@ env: | |||||
| exchange_name: "plane.event_stream" | ||||||
| event_types: "issue" | ||||||
|
|
||||||
| webhook_consumer_envs: | ||||||
| queue_name: "plane.webhook" | ||||||
| prefetch_count: 10 | ||||||
|
|
||||||
| runner_envs: | ||||||
| execution_timeout_ms: "10000" | ||||||
| init_timeout_ms: "5000" | ||||||
|
|
||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Use a unique, required Cursor webhook secret instead of a public fallback.
The chart currently emits a predictable secret when unset, while the README documents the same value. This permits forged Cursor webhook requests in default installations.
charts/plane-enterprise/templates/config-secrets/silo.yaml#L14-L14: remove the static fallback and require an externally supplied or persistently generated secret.charts/plane-enterprise/README.md#L571-L571: document the value as required/generated rather than providing a default.charts/plane-enterprise/README.md#L895-L895: replace the static example with a placeholder such as<your_random_secret>.📍 Affects 2 files
charts/plane-enterprise/templates/config-secrets/silo.yaml#L14-L14(this comment)charts/plane-enterprise/README.md#L571-L571charts/plane-enterprise/README.md#L895-L895🤖 Prompt for AI Agents