Skip to content

Conversation

@yagni92
Copy link

@yagni92 yagni92 commented Nov 11, 2025

What this PR does / why we need it

This PR adds support for n8n's form functionality by adding two new ingress paths to the Helm chart:

  • form-waiting/ routes to the webhook service for handling form submissions in waiting state
  • form-test/ routes to the main service for form testing

These paths are essential for n8n's form to work properly.

Special notes for your reviewer

The routing logic follows the existing pattern in the ingress template:

  • Form submissions in waiting state need to be handled by the webhook service (similar to existing form/ and webhook-waiting/ paths)
  • Form test workflows should be routed to the main service (similar to existing webhook-test/ path)

This change is backward compatible and only adds new functionality when the webhook service is enabled.

Checklist

Please place an 'x' in all applicable fields and remove unrelated items.

Version and Documentation

Testing and Validation

  • Ran ah lint locally without errors
  • Ran Chart-Testing: ct lint --chart-dirs charts/n8n --charts charts/n8n --validate-maintainers=false
  • Tested chart installation locally
  • Tested with example configurations in /examples directory

Summary by CodeRabbit

  • New Features

    • Added ingress routes for form-waiting and form-test endpoints to enable direct access through the ingress controller.
  • Version

    • Chart version updated to 2.0.2.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 11, 2025

Walkthrough

This pull request updates the n8n Helm chart from version 2.0.1 to 2.0.2 and adds two new ingress routes (form-waiting and form-test) for form submission handling, routing to the webhook and main services respectively.

Changes

Cohort / File(s) Change Summary
Chart metadata
charts/n8n/Chart.yaml
Bumped chart version from 2.0.1 to 2.0.2 and updated changelog entry to reflect new ingress paths for form routing (changed from changed to added kind).
Ingress routing
charts/n8n/templates/ingress.yaml
Added two new ingress paths: form-waiting/ routing to webhook service, and form-test/ routing to main service, alongside existing form and webhook paths.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Verify that new path routes (form-waiting, form-test) are correctly templated with proper service/port mappings
  • Confirm pathType and trimSuffix logic for new paths aligns with existing webhook and form paths
  • Check changelog entry accuracy in Chart.yaml

Possibly related PRs

Suggested reviewers

  • RoseSecurity

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: add form-waiting and form-test paths to ingress routing' directly and accurately describes the main change in the PR: adding two new ingress paths to support n8n's form functionality.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between eae5f20 and 5f775d4.

📒 Files selected for processing (2)
  • charts/n8n/Chart.yaml (2 hunks)
  • charts/n8n/templates/ingress.yaml (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-09-02T08:05:39.372Z
Learnt from: tsch157
Repo: 8gears/n8n-helm-chart PR: 239
File: charts/n8n/Chart.yaml:3-4
Timestamp: 2025-09-02T08:05:39.372Z
Learning: n8n 1.110.0 is a pre-release version and should not be used in production deployments. Always verify if a version is stable before recommending upgrades in the n8n Helm chart.

Applied to files:

  • charts/n8n/Chart.yaml
🔇 Additional comments (2)
charts/n8n/Chart.yaml (1)

3-3: Chart metadata updates are correct.

The patch version bump (2.0.1 → 2.0.2) and artifacthub.io/changes annotation appropriately document the addition of the new form paths.

Also applies to: 37-38

charts/n8n/templates/ingress.yaml (1)

71-84: New form paths correctly follow the established routing pattern.

Both new paths are correctly routed: form-waiting/ to the webhook service and form-test/ to the main service, consistent with the existing patterns for webhook-waiting/ and webhook-test/.

Note on pathType inheritance: These new paths inherit pathType from the base path, consistent with all existing subpaths (webhook/, webhook-test/, etc.). A previous review flagged a potential routing issue if users configure the base path with pathType: Exact—derived subpaths would then fail to match requests. If this becomes a concern, consider hardcoding pathType: Prefix for all subpaths or explicitly documenting that the base path must use Prefix. For now, the implementation is consistent with existing code.


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@babu97 babu97 left a comment

Choose a reason for hiding this comment

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

Looks good for me, it hasn't broken dev instance

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
README.md (1)

101-140: Fix YAML indentation in the ingress example (currently inconsistent / likely invalid on copy-paste).
paths: is nested under the - host: item; the paths: key should align with host: under the same list item. Also consider including service/port only if that’s actually configurable in values (don’t imply it is).

 ingress:
   enabled: false
   annotations: {}
   # define a custom ingress class Name, like "traefik" or "nginx"
   className: ""
   hosts:
     - host: workflow.example.com
-      paths:
-        - path: /
-          pathType: Prefix
+      paths:
+        - path: /
+          pathType: Prefix
   tls:
     - hosts:
         - workflow.example.com
       secretName: host-domain-cert
 # ... next n8n specific section
🧹 Nitpick comments (2)
charts/n8n/values.yaml (1)

35-45: Breaking values change: ingress.hosts[].paths is now objects; ensure migration is documented.
Defaults are good, but existing users with paths: ["/"] will render invalid templates unless they update values (major chart bump helps, but a clear README migration note prevents surprises).

README.md (1)

787-799: Valkey section: good direction; consider clarifying “replaces Redis section” to prevent confusion.
The header and link help, but readers coming from older chart versions may not realize how valkey: relates to prior redis: settings and/or external Redis. A one-liner here would reduce migration friction.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ef39a2d and eae5f20.

⛔ Files ignored due to path filters (1)
  • charts/n8n/Chart.lock is excluded by !**/*.lock
📒 Files selected for processing (10)
  • .github/workflows/lint-test.yaml (1 hunks)
  • README.md (4 hunks)
  • charts/n8n/Chart.yaml (2 hunks)
  • charts/n8n/templates/NOTES.txt (1 hunks)
  • charts/n8n/templates/ingress.yaml (1 hunks)
  • charts/n8n/values.yaml (2 hunks)
  • examples/README.md (1 hunks)
  • examples/values_full.yaml (3 hunks)
  • examples/values_small_prod.yaml (1 hunks)
  • helmfile.yaml (0 hunks)
💤 Files with no reviewable changes (1)
  • helmfile.yaml
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-09-02T08:05:39.372Z
Learnt from: tsch157
Repo: 8gears/n8n-helm-chart PR: 239
File: charts/n8n/Chart.yaml:3-4
Timestamp: 2025-09-02T08:05:39.372Z
Learning: n8n 1.110.0 is a pre-release version and should not be used in production deployments. Always verify if a version is stable before recommending upgrades in the n8n Helm chart.

Applied to files:

  • charts/n8n/Chart.yaml
🪛 LanguageTool
README.md

[grammar] ~145-~145: Use a hyphen to join words.
Context: ...oned in the excerpt below. Treat the n8n provided configuration documentation as ...

(QB_NEW_EN_HYPHEN)

🔇 Additional comments (10)
examples/README.md (1)

30-33: Good update to a newer CloudNativePG manifest URL, but consider pinning guidance to avoid silent drift.
Using a fixed release asset is good; you may also want to mention (in text) that users should pick the CNPG release matching their cluster / operator version expectations.

examples/values_small_prod.yaml (1)

61-65: Ingress example updated correctly to the new {path, pathType} shape.
This is consistent with the updated ingress template.

charts/n8n/templates/NOTES.txt (1)

3-6: NOTES rendering matches the new ingress paths object model.
LGTM.

examples/values_full.yaml (3)

39-42: Queue Redis host update looks consistent with the Valkey subchart rename.


103-108: Ingress example updated correctly to include pathType.


81-92: Valkey example values confirmed to match chart 0.8.1 specification.

The replicaCount, auth.enabled, and dataStorage.enabled values all match the chart defaults. The resources.requests are custom overrides that align with the chart's documented example pattern (the chart itself defaults to empty resources with commented examples).

charts/n8n/values.yaml (1)

686-697: Valkey section rename is clear; please ensure README uses the same terminology consistently.

charts/n8n/templates/ingress.yaml (1)

33-41: Ingress per-path fields look correct and consistent with examples/NOTES.

charts/n8n/Chart.yaml (2)

3-4: No action required. The appVersion: 1.122.4 is a stable release and safe for production use.


27-31: Valkey dependency v0.8.1 confirmed with correct repository and expected values schema.

The chart contains all expected top-level properties: replicaCount, auth, and dataStorage. The repository URL (https://valkey.io/valkey-helm/) is correct. The values schema is properly structured and ready for use.

Comment on lines 38 to 42
- name: Add Helm Repositories
run: |
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add valkey https://valkey.io/valkey-helm/
helm repo update

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

Valkey Helm repository https://valkey.io/valkey-helm/ official documented

💡 Result:

The official Valkey Helm repository page (with usage docs) is hosted at https://valkey.io/valkey-helm/ — add with:
helm repo add valkey https://valkey.io/valkey-helm/
helm repo update
helm install valkey valkey/valkey. [1]

The chart source and full README/releases (valkey-io/valkey-helm) are on GitHub: https://github.com/valkey-io/valkey-helm. [2]

Sources:
[1] Valkey Helm Charts — https://valkey.io/valkey-helm/
[2] valkey-io/valkey-helm (GitHub README & releases) — https://github.com/valkey-io/valkey-helm


Acknowledge the external dependency risk for CI stability.
The Valkey Helm repository URL (https://valkey.io/valkey-helm/) is official and properly documented. However, relying on this external endpoint means ct install/lint may intermittently fail if the repository becomes unavailable. Consider caching the repo index or using mirror strategies to improve CI reliability.

Comment on lines 41 to 85
{{- if $.Values.webhook.enabled }}
- path: {{ . }}webhook/
pathType: Prefix
- path: {{ trimSuffix "/" .path }}/webhook/
pathType: {{ .pathType }}
backend:
service:
name: {{ $fullName }}-webhook
port:
number: {{ $.Values.webhook.service.port | default 80 }}
# Note: The default URL for manual workflow executions is /webhook-test/*. Make sure that these URLs route to your main process.
- path: {{ . }}webhook-test/
pathType: Prefix
- path: {{ trimSuffix "/" .path }}/webhook-test/
pathType: {{ .pathType }}
backend:
service:
name: {{ $fullName }}
port:
number: {{ $.Values.main.service.port | default 80 }}
- path: {{ . }}webhook-waiting/
pathType: Prefix
number: {{ $.Values.main.service.port | default 80 }}
- path: {{ trimSuffix "/" .path }}/webhook-waiting/
pathType: {{ .pathType }}
backend:
service:
name: {{ $fullName }}-webhook
port:
number: {{ $.Values.webhook.service.port | default 80 }}
- path: {{ trimSuffix "/" .path }}/form/
pathType: {{ .pathType }}
backend:
service:
name: {{ $fullName }}-webhook
port:
number: {{ $.Values.webhook.service.port | default 80 }}
- path: {{ . }}form/
pathType: Prefix
- path: {{ trimSuffix "/" .path }}/form-waiting/
pathType: {{ .pathType }}
backend:
service:
name: {{ $fullName }}-webhook
port:
number: {{ $.Values.webhook.service.port | default 80 }}
- path: {{ trimSuffix "/" .path }}/form-test/
pathType: {{ .pathType }}
backend:
service:
name: {{ $fullName }}
port:
number: {{ $.Values.main.service.port | default 80 }}
{{- end }}
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Potential routing bug if users set pathType: Exact on base paths (derived subpaths will stop matching).
Right now /webhook/, /webhook-test/, /webhook-waiting/, /form* inherit .pathType. For correctness/safety, consider hardcoding Prefix for these derived subpaths (or explicitly validating/documenting that base pathType must be Prefix).

           {{- if $.Values.webhook.enabled }}
           - path: {{ trimSuffix "/" .path }}/webhook/
-            pathType: {{ .pathType }}
+            pathType: Prefix
...
           - path: {{ trimSuffix "/" .path }}/webhook-test/
-            pathType: {{ .pathType }}
+            pathType: Prefix
...
           - path: {{ trimSuffix "/" .path }}/webhook-waiting/
-            pathType: {{ .pathType }}
+            pathType: Prefix
...
           - path: {{ trimSuffix "/" .path }}/form/
-            pathType: {{ .pathType }}
+            pathType: Prefix
...
           - path: {{ trimSuffix "/" .path }}/form-waiting/
-            pathType: {{ .pathType }}
+            pathType: Prefix
...
           - path: {{ trimSuffix "/" .path }}/form-test/
-            pathType: {{ .pathType }}
+            pathType: Prefix
           {{- end }}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{{- if $.Values.webhook.enabled }}
- path: {{ . }}webhook/
pathType: Prefix
- path: {{ trimSuffix "/" .path }}/webhook/
pathType: {{ .pathType }}
backend:
service:
name: {{ $fullName }}-webhook
port:
number: {{ $.Values.webhook.service.port | default 80 }}
# Note: The default URL for manual workflow executions is /webhook-test/*. Make sure that these URLs route to your main process.
- path: {{ . }}webhook-test/
pathType: Prefix
- path: {{ trimSuffix "/" .path }}/webhook-test/
pathType: {{ .pathType }}
backend:
service:
name: {{ $fullName }}
port:
number: {{ $.Values.main.service.port | default 80 }}
- path: {{ . }}webhook-waiting/
pathType: Prefix
number: {{ $.Values.main.service.port | default 80 }}
- path: {{ trimSuffix "/" .path }}/webhook-waiting/
pathType: {{ .pathType }}
backend:
service:
name: {{ $fullName }}-webhook
port:
number: {{ $.Values.webhook.service.port | default 80 }}
- path: {{ trimSuffix "/" .path }}/form/
pathType: {{ .pathType }}
backend:
service:
name: {{ $fullName }}-webhook
port:
number: {{ $.Values.webhook.service.port | default 80 }}
- path: {{ . }}form/
pathType: Prefix
- path: {{ trimSuffix "/" .path }}/form-waiting/
pathType: {{ .pathType }}
backend:
service:
name: {{ $fullName }}-webhook
port:
number: {{ $.Values.webhook.service.port | default 80 }}
- path: {{ trimSuffix "/" .path }}/form-test/
pathType: {{ .pathType }}
backend:
service:
name: {{ $fullName }}
port:
number: {{ $.Values.main.service.port | default 80 }}
{{- end }}
{{- if $.Values.webhook.enabled }}
- path: {{ trimSuffix "/" .path }}/webhook/
pathType: Prefix
backend:
service:
name: {{ $fullName }}-webhook
port:
number: {{ $.Values.webhook.service.port | default 80 }}
# Note: The default URL for manual workflow executions is /webhook-test/*. Make sure that these URLs route to your main process.
- path: {{ trimSuffix "/" .path }}/webhook-test/
pathType: Prefix
backend:
service:
name: {{ $fullName }}
port:
number: {{ $.Values.main.service.port | default 80 }}
- path: {{ trimSuffix "/" .path }}/webhook-waiting/
pathType: Prefix
backend:
service:
name: {{ $fullName }}-webhook
port:
number: {{ $.Values.webhook.service.port | default 80 }}
- path: {{ trimSuffix "/" .path }}/form/
pathType: Prefix
backend:
service:
name: {{ $fullName }}-webhook
port:
number: {{ $.Values.webhook.service.port | default 80 }}
- path: {{ trimSuffix "/" .path }}/form-waiting/
pathType: Prefix
backend:
service:
name: {{ $fullName }}-webhook
port:
number: {{ $.Values.webhook.service.port | default 80 }}
- path: {{ trimSuffix "/" .path }}/form-test/
pathType: Prefix
backend:
service:
name: {{ $fullName }}
port:
number: {{ $.Values.main.service.port | default 80 }}
{{- end }}

Comment on lines 141 to 147
## N8N Specific Config Section in Values File

Every possible n8n config value can be set,
even if it is not mentioned in the excerpt below.
Treat the n8n provided configuration documentation as the source of truth,
this Charts just forwards everything down to the n8n pods.

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Tighten wording + fix grammar (“n8n-provided”, “this chart”).
This section reads a bit unpolished and includes a grammar issue flagged by static analysis.

-Every possible n8n config value can be set,
+Every possible n8n config value can be set,
 even if it is not mentioned in the excerpt below.
-Treat the n8n provided configuration documentation as the source of truth,
-this Charts just forwards everything down to the n8n pods.
+Treat the n8n-provided configuration documentation as the source of truth;
+this chart just forwards everything down to the n8n pods.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## N8N Specific Config Section in Values File
Every possible n8n config value can be set,
even if it is not mentioned in the excerpt below.
Treat the n8n provided configuration documentation as the source of truth,
this Charts just forwards everything down to the n8n pods.
## N8N Specific Config Section in Values File
Every possible n8n config value can be set,
even if it is not mentioned in the excerpt below.
Treat the n8n-provided configuration documentation as the source of truth;
this chart just forwards everything down to the n8n pods.
🧰 Tools
🪛 LanguageTool

[grammar] ~145-~145: Use a hyphen to join words.
Context: ...oned in the excerpt below. Treat the n8n provided configuration documentation as ...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
In README.md around lines 141-147, the wording is unpolished and has grammar
issues (use "n8n-provided" and "this chart"). Replace the current sentences with
a tighter, grammatically-correct version such as: "Every possible n8n
configuration value can be set; see the n8n-provided configuration documentation
as the source of truth — this chart forwards all settings to the n8n pods."
Ensure hyphenation on "n8n-provided" and use "this chart" (singular) along with
concise punctuation.

Comment on lines 180 to 186
# ... next k8s specific values section
```
## Kubernetes Specific Values Section

this section of the `yaml` file contains the typical Kubernetes specific setting
related to the application deployment and operation but not the application itself.

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Fix broken Markdown fencing/indentation around the “Kubernetes Specific Values Section”.
The closing fence appears indented as if it’s part of the YAML block (Line 181-182), which can break rendering and copy/paste. Also start the paragraph with a capital letter.

-  # ... next k8s specific values section
-  ```
-## Kubernetes Specific Values Section
+  # ... next k8s specific values section
+```
+
+## Kubernetes Specific Values Section
@@
-this section of the `yaml` file contains the typical Kubernetes specific setting 
+This section of the `yaml` file contains typical Kubernetes-specific settings
 related to the application deployment and operation but not the application itself.

Also applies to: 181-182

🤖 Prompt for AI Agents
In README.md around lines 180 to 186, the Markdown code-fence and paragraph
capitalization are incorrect: move the closing triple-backtick out of the
indented YAML block so the fence is on its own line, ensure an opening fence
precedes the "## Kubernetes Specific Values Section" heading (so the fenced
block is properly closed), and change the paragraph start to "This" and reword
to "typical Kubernetes-specific settings" to fix capitalization and hyphenation;
update both occurrences noted (lines ~181-182 and the paragraph) accordingly.

This adds two new ingress paths:
- form-waiting/ routes to the webhook service
- form-test/ routes to the main service

Signed-off-by: Yoni Golob <[email protected]>
@yagni92 yagni92 force-pushed the feat/add-form-paths-ingress branch from eae5f20 to 5f775d4 Compare December 14, 2025 10:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants