Conversation
Signed-off-by: tfwang <tfwang@alauda.io>
WalkthroughDocumentation-only changes: two existing solution guides received minor wording clarifications, and a new comprehensive Label Studio installation and deployment guide was added. Changes
Sequence Diagram(s)Estimated code review effort🎯 1 (Trivial) | ⏱️ ~3 minutes Possibly related PRs
Pre-merge checks (3 passed)✅ Passed checks (3 passed)
Poem
Tip 👮 Agentic pre-merge checks are now available in preview!Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.
Please see the documentation for more information. Example: reviews:
pre_merge_checks:
custom_checks:
- name: "Undocumented Breaking Changes"
mode: "warning"
instructions: |
Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).Please share your feedback with us on this Discord post. ✨ Finishing touches🧪 Generate unit tests
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
🧹 Nitpick comments (7)
docs/en/solutions/How_to_Install_and_use_Featureform.md (1)
363-363: Minor phrasing improvement (optional)“need to be available” reads fine; if you want imperative style across docs, consider “must be available.”
- PostgreSQL and Redis services need to be available. The following methods can be used to set them up: + PostgreSQL and Redis services must be available. The following methods can be used to set them up:docs/en/solutions/How_to_install_and_use_Label_Studio.md (6)
146-147: Parameterize package version (optional)Hardcoding
label-studio.ALL.v1.20.0-1.tgzmay drift. Consider templating or referencing the chart/appVersion to reduce future edits.-violet push ... label-studio.ALL.v1.20.0-1.tgz +# Example (replace <VERSION> with the packaged version) +violet push ... label-studio.ALL.v<VERSION>.tgz
215-225: Database auto-creation claim needs nuanceLabel Studio migrates tables, but creating the database itself requires proper DB privileges or pre-creation. Reword to avoid implying DB will always be auto-created.
- dbName: labelstudio # Database name, note: database will be created automatically + dbName: labelstudio # Target database namePlease confirm whether your chart/init container creates the database when absent; if not, add a note to pre-create or ensure the PostgreSQL user has CREATEDB.
232-244: Avoid duplicating Redis password in URL and SecretIf password is embedded in
host(redis://:pwd@host:port/db) and also provided via Secret, behavior can be ambiguous. Suggest documenting that only one method should be used.- host: "redis://your-redis-host:6379/1" # Redis connection address, format: redis://[:password]@host:port/db + host: "redis://your-redis-host:6379/1" # Redis connection address, format: redis://[:password]@host:port/db + # Use either password in URL OR the Secret below, not both.
248-259: Default Service type LoadBalancer: add guidance for environments without LBMany clusters lack an external LB controller. Suggest defaulting to ClusterIP with Ingress, or add a short note to switch to NodePort/Ingress when no LB is available.
- type: LoadBalancer # Can be changed to NodePort or ClusterIP + type: LoadBalancer # Change to NodePort or ClusterIP if no external LB controller is available
294-301: Service name verificationService name
<Application Name>-ls-applooks chart-specific. If the chart enforces a suffix, consider linking or noting the exact naming rule (e.g.,<release-name>-ls-app).-The `Service` name is: `<Application Name>-ls-app`. +The `Service` name is: `<release-name>-ls-app` (replace with your application/release name).Please confirm the actual Helm release naming in
3rdparty/chart-label-studio.
170-179: Redis “Sentinel then switch to standalone” instruction reads oddSelecting “Redis Sentinel” and then changing
spec.archtostandalonemay confuse readers. If this is a UI constraint, add a brief rationale; otherwise, provide a direct path to create standalone without first choosing Sentinel.- 1. When creating the `Redis` instance, select `Redis Sentinel` for `Architecture`. + 1. If the UI lacks a standalone option, temporarily select `Redis Sentinel` and then edit YAML.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
docs/en/solutions/How_to_Install_and_use_Evidently.md(1 hunks)docs/en/solutions/How_to_Install_and_use_Featureform.md(2 hunks)docs/en/solutions/How_to_install_and_use_Label_Studio.md(1 hunks)
🔇 Additional comments (3)
docs/en/solutions/How_to_Install_and_use_Evidently.md (1)
219-219: Wording tweak LGTMClarifies post-creation editability without altering procedure flow.
docs/en/solutions/How_to_Install_and_use_Featureform.md (1)
231-231: Wording tweak LGTMKeeps instructions consistent with Evidently doc step 5.
docs/en/solutions/How_to_install_and_use_Label_Studio.md (1)
308-314: Access control wording too broad — soften wording and verify for v1.20.xThe sentence "All users have the same functional permissions and can access all projects" is misleading; permissions and project visibility depend on edition/configuration (signup, RBAC, project membership). Replace with:
-- All users have the same functional permissions and can access all projects +- In the default open signup mode, any user can register. Project visibility and roles depend on your Label Studio edition/configuration. +- For production, disable open signup and manage access via invites/links and project membership.Verify exact behavior for the packaged v1.20.x against the official Label Studio RBAC/docs and align wording.
| label-studio: | ||
| app: | ||
| ingress: | ||
| enabled: true # Enable Ingress functionality | ||
| host: localhost # Access domain, must be set, cannot fill IP address, only domain name | ||
| tls: | ||
| - secretName: certificate-secret # Secret name storing TLS certificate | ||
| global: | ||
| extraEnvironmentVars: | ||
| LABEL_STUDIO_HOST: https://x.x.x.x # Browser access address, used to set the base address for loading frontend resources | ||
| ``` |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Ingress host vs LABEL_STUDIO_HOST inconsistency
You note host must be a domain, but the example for LABEL_STUDIO_HOST uses an IP with https, which will commonly fail TLS/SNI. Align the examples to a domain.
- host: localhost # Access domain, must be set, cannot fill IP address, only domain name
+ host: label-studio.example.com # Access domain (DNS name required)
...
- LABEL_STUDIO_HOST: https://x.x.x.x # Browser access address, used to set the base address for loading frontend resources
+ LABEL_STUDIO_HOST: https://label-studio.example.com # Public base URL used by the app📝 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.
| label-studio: | |
| app: | |
| ingress: | |
| enabled: true # Enable Ingress functionality | |
| host: localhost # Access domain, must be set, cannot fill IP address, only domain name | |
| tls: | |
| - secretName: certificate-secret # Secret name storing TLS certificate | |
| global: | |
| extraEnvironmentVars: | |
| LABEL_STUDIO_HOST: https://x.x.x.x # Browser access address, used to set the base address for loading frontend resources | |
| ``` | |
| label-studio: | |
| app: | |
| ingress: | |
| enabled: true # Enable Ingress functionality | |
| host: label-studio.example.com # Access domain (DNS name required) | |
| tls: | |
| - secretName: certificate-secret # Secret name storing TLS certificate | |
| global: | |
| extraEnvironmentVars: | |
| LABEL_STUDIO_HOST: https://label-studio.example.com # Public base URL used by the app |
🤖 Prompt for AI Agents
In docs/en/solutions/How_to_install_and_use_Label_Studio.md around lines 266 to
276, the ingress host comment requires a domain but the LABEL_STUDIO_HOST
example uses an IP (https://x.x.x.x) which will break TLS/SNI; change the
LABEL_STUDIO_HOST example to a domain-based URL (e.g.
https://label-studio.example.com) and ensure the comment and example
consistently indicate a domain-only host (no raw IP), updating any explanatory
text to match.
| global: | ||
| extraEnvironmentVars: | ||
| LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK: true | ||
| ``` |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Environment variable booleans should be strings
Kubernetes env vars are strings; Helm/YAML booleans may render unexpectedly. Quote the value to ensure the container receives "true".
- LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK: true
+ LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK: "true"📝 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.
| global: | |
| extraEnvironmentVars: | |
| LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK: true | |
| ``` | |
| global: | |
| extraEnvironmentVars: | |
| LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK: "true" |
🤖 Prompt for AI Agents
In docs/en/solutions/How_to_install_and_use_Label_Studio.md around lines 285 to
288, the YAML sets LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK as a bare boolean
which can be interpreted incorrectly by Helm/Kubernetes; change the value to a
quoted string (e.g., "true") so the environment variable is delivered to the
container as the literal string "true".
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (2)
docs/en/solutions/How_to_install_and_use_Label_Studio.md (2)
285-288: Env var boolean must be a stringKubernetes envs are strings; quote it to avoid Helm/YAML boolean coercion.
global: extraEnvironmentVars: - LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK: true + LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK: "true"
266-276: Ingress host still mismatched with LABEL_STUDIO_HOSTUse a real domain for both to avoid TLS/SNI issues and ensure external reachability. This aligns with the earlier review note.
label-studio: app: ingress: enabled: true # Enable Ingress functionality - host: localhost # Access domain (must be DNS name, not IP address) + host: label-studio.example.com # Access domain (DNS name required; no raw IP) tls: - secretName: certificate-secret # Secret name storing TLS certificate global: extraEnvironmentVars: - LABEL_STUDIO_HOST: https://label-studio.example.com # Web access URL for frontend resource loading + LABEL_STUDIO_HOST: https://label-studio.example.com # Public base URL used by the app
🧹 Nitpick comments (6)
docs/en/solutions/How_to_install_and_use_Label_Studio.md (6)
172-179: Unordered list style and clarity for Redis architecture
- Use dash for unordered lists (markdownlint MD004).
- Clarify that “Standalone” is preferred; only fall back to YAML edit if UI lacks it.
- * Create a `Redis` in `standalone` mode: - - 1. When creating the `Redis` instance, select `Redis Sentinel` for `Architecture`. - - 2. After setting all parameters, switch to `YAML` mode, change `spec.arch` to `standalone`, then click the `Create` button. - - 3. After creation, switch to the `Alauda Container Platform` view and find the `Service` named `rfr-<Redis instance name>-read-write`, which is the access address for this Redis instance. + - Create a `Redis` in `standalone` mode: + 1. Preferred: When creating the `Redis` instance, select `Redis Standalone` for `Architecture` (if available). + 2. If not available: select `Redis Sentinel`, switch to `YAML` mode, set `spec.arch: standalone`, then click `Create`. + 3. After creation, in `Alauda Container Platform` find the `Service` `rfr-<Redis instance name>-read-write` for the access address.
153-154: Minor wording polishRemove repetition for clarity.
-Label Studio stores data in a database and requires persistent storage. The cluster needs to have CSI pre-installed or `PersistentVolume` pre-prepared. +Label Studio stores data in a database and requires persistent storage. Ensure CSI is installed in the cluster or pre-create the required `PersistentVolume`.
220-221: Database auto-creation note may be inaccurateDB creation often requires elevated privileges; some charts require the DB to exist. Reword to avoid over-promising.
- dbName: labelstudio # Database name, note: database will be created automatically + dbName: labelstudio # Database name; ensure the user can create it, or pre-create the DB if required by your environment/chart
235-237: Prefer Secret over embedding passwords in URLsTo avoid leakage via logs/env dumps, recommend Secret-first and keep URL without credentials.
- password: # Optional, password can be included in host or provided separately via Secret + password: # Recommended: provide password via Secret; avoid embedding credentials in the URL
238-244: Consider noting rediss:// for TLSWhen SSL is enabled, many clients expect
rediss://scheme. Add a tip to reduce config confusion.ssl: # Optional redisSslCertReqs: "optional" # SSL certificate requirements: "" means not required, "optional", "required" redisSslSecretName: "redis-ssl-secret" # SSL certificate Secret name redisSslCaCertsSecretKey: "ca.crt" # CA certificate Secret key redisSslCertFileSecretKey: "tls.crt" # Client certificate Secret key redisSslKeyFileSecretKey: "tls.key" # Client private key Secret key + # Tip: If SSL is enabled, use the rediss:// scheme in the host, e.g., "rediss://your-redis-host:6379/1".
302-305: Ingress access section: add DNS/TLS prerequisitesSmall addition to prevent common misconfigurations.
-If Ingress is enabled, please access through the configured LABEL_STUDIO_HOST. +If Ingress is enabled, access via the configured LABEL_STUDIO_HOST. Ensure the DNS record points to the Ingress controller and the TLS certificate covers this host.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
docs/en/solutions/How_to_install_and_use_Label_Studio.md(1 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
docs/en/solutions/How_to_install_and_use_Label_Studio.md
172-172: Unordered list style
Expected: dash; Actual: asterisk
(MD004, ul-style)
🔇 Additional comments (3)
docs/en/solutions/How_to_install_and_use_Label_Studio.md (3)
271-273: Verify TLS hosts handling in chart valuesIf the chart mirrors K8s Ingress spec, tls.hosts is required by many templates. Confirm the chart auto-wires hosts from
ingress.host; otherwise add it.tls: - - secretName: certificate-secret # Secret name storing TLS certificate + - secretName: certificate-secret # Secret name storing TLS certificate + hosts: + - label-studio.example.com
311-313: User permissions statement likely inaccurate; verify and softenLabel Studio supports roles/project-level permissions. Reword or confirm against official docs.
-- All users have the same functional permissions and can access all projects +- By default, newly registered users can sign in; project visibility and actions depend on roles/permissions configured by admins/owners.Would you like me to cross-check the latest role model and update this section accordingly?
216-225: Chart values keys: confirm they match 3rdparty/chart-label-studio schemaKeys like
global.pgConfig.*must align with the chart. Please verify against the chart’s values.yaml to avoid no-op configs.
| If the `Service` type is `LoadBalancer` and the load balancer controller in the environment has assigned an access address, please access through that address. | ||
|
|
||
| If the `Service` type is `LoadBalancer` or `NodePort`, access is available through `node IP` with its `NodePort`. | ||
|
|
There was a problem hiding this comment.
🛠️ Refactor suggestion
Service access wording is misleading for LoadBalancer
LoadBalancer is typically accessed via the LB’s external address, not node IP:nodePort. Restrict node IP guidance to NodePort only.
If the `Service` type is `LoadBalancer` and the load balancer controller in the environment has assigned an access address, please access through that address.
-
-If the `Service` type is `LoadBalancer` or `NodePort`, access is available through `node IP` with its `NodePort`.
+If the `Service` type is `NodePort`, access is available through `node IP` with its `nodePort`.📝 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.
| If the `Service` type is `LoadBalancer` and the load balancer controller in the environment has assigned an access address, please access through that address. | |
| If the `Service` type is `LoadBalancer` or `NodePort`, access is available through `node IP` with its `NodePort`. | |
| If the `Service` type is `LoadBalancer` and the load balancer controller in the environment has assigned an access address, please access through that address. | |
| If the `Service` type is `NodePort`, access is available through `node IP` with its `nodePort`. |
🤖 Prompt for AI Agents
In docs/en/solutions/How_to_install_and_use_Label_Studio.md around lines 298 to
301, the guidance for Service access conflates LoadBalancer and NodePort; update
the wording to state that LoadBalancer should be accessed via the load
balancer’s external/ingress address assigned by the cloud/controller, and
restrict the node IP:nodePort access instruction to only NodePort services,
adjusting the sentences to clearly separate the two cases and remove the
suggestion to use node IP:nodePort for LoadBalancer.
* add document for Label Studio Signed-off-by: tfwang <tfwang@alauda.io>
Summary by CodeRabbit