Skip to content

Add AI Workspace and Developer Portal Umbrella Helm Charts - #2898

Merged
DinithHerath merged 5 commits into
wso2:mainfrom
DinithHerath:main
Jul 27, 2026
Merged

Add AI Workspace and Developer Portal Umbrella Helm Charts#2898
DinithHerath merged 5 commits into
wso2:mainfrom
DinithHerath:main

Conversation

@DinithHerath

Copy link
Copy Markdown
Contributor

This pull request introduces initial support for umbrella Helm charts for the AI Workspace and Developer Portal products, including automated release workflows and secret provisioning scripts. The changes enable packaging, publishing, and releasing product-level Helm charts that bundle component charts, and provide tooling for secure, idempotent Kubernetes secret generation.
Related to #2557 and #2560

Helm Umbrella Charts and Release Automation:

  • Added a new GitHub Actions workflow for releasing the AI Workspace umbrella Helm chart, which automates versioning, packaging, OCI registry publishing, tagging, and GitHub Release creation (.github/workflows/ai-workspace-helm-release.yml).
  • Added a similar workflow for the Developer Portal umbrella Helm chart, providing the same automated packaging and release process (.github/workflows/developer-portal-helm-release.yml).

Helm Chart Structure and Metadata:

  • Introduced the initial Chart.yaml for the AI Workspace umbrella chart, defining its dependencies on the Platform API and AI Workspace UI component charts, along with metadata and maintainers (kubernetes/helm/ai-workspace-helm-chart/Chart.yaml).
  • Added a .helmignore file to the AI Workspace chart to exclude common local and development files from packaging (kubernetes/helm/ai-workspace-helm-chart/.helmignore).

Secret Provisioning and Security:

  • Added a robust, idempotent generate-secrets.sh script for the AI Workspace umbrella chart, which generates and manages Kubernetes secrets for all components, supports Developer Portal provisioning, and outputs a cumulative values-secrets.yaml for Helm installs (kubernetes/helm/ai-workspace-helm-chart/generate-secrets.sh).

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@DinithHerath, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 26 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 53e7b0a7-4d00-4840-8795-d0992752f8c8

📥 Commits

Reviewing files that changed from the base of the PR and between 46d07d4 and 4c300d6.

📒 Files selected for processing (6)
  • kubernetes/helm/ai-workspace-helm-chart/templates/NOTES.txt
  • kubernetes/helm/ai-workspace-helm-chart/templates/serviceaccount.yaml
  • kubernetes/helm/ai-workspace-helm-chart/templates/validation.yaml
  • kubernetes/helm/developer-portal-helm-chart/templates/NOTES.txt
  • kubernetes/helm/developer-portal-helm-chart/templates/serviceaccount.yaml
  • kubernetes/helm/developer-portal-helm-chart/templates/validation.yaml
📝 Walkthrough

Walkthrough

Adds AI Workspace and Developer Portal umbrella Helm charts with OCI dependencies, shared secret generation, installation guidance, validation and TLS guards, local overrides, and manual GHCR publication workflows.

Changes

Umbrella Helm delivery

Layer / File(s) Summary
Chart metadata, dependencies, and defaults
kubernetes/helm/ai-workspace-helm-chart/*, kubernetes/helm/developer-portal-helm-chart/*
Defines chart metadata, OCI dependencies, shared values, component enablement, local overrides, and Helm packaging exclusions.
Idempotent secret generation and references
kubernetes/helm/*/generate-secrets.sh
Creates or reuses component Secrets, preserves shared Platform API credentials, and writes references-only values files.
Render-time validation and TLS enforcement
kubernetes/helm/*/templates/validation.yaml, kubernetes/helm/*-ui-helm-chart/templates/deployment.yaml, kubernetes/helm/*-ui-helm-chart/values.yaml
Validates component and external API configuration and rejects unsupported self-signed TLS providers.
Service accounts and post-install guidance
kubernetes/helm/*/templates/*, kubernetes/helm/*/values-local.yaml
Adds conditional ServiceAccounts, component access instructions, authentication guidance, and local deployment settings.
Manual GHCR chart release workflows
.github/workflows/*-helm-release.yml
Adds manual workflows to validate, package, publish, tag, and draft-release both umbrella charts.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Operator
  participant GitHubActions
  participant Helm
  participant GHCR
  participant Kubernetes
  Operator->>GitHubActions: dispatch chart release
  GitHubActions->>Helm: update versions and resolve dependencies
  Helm->>GHCR: push OCI chart
  Operator->>Kubernetes: run generate-secrets.sh
  Kubernetes->>Kubernetes: create or reuse Secrets
  Operator->>Helm: install or upgrade with values-secrets.yaml
Loading

Possibly related PRs

  • wso2/api-platform#2820: Updates the same UI TLS defaults and deployment validation used by the new umbrella charts.

Suggested reviewers: krishanx92, renuka-fernando, tharsanan1

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description covers purpose and goals, but it omits most required template sections like approach, tests, security checks, docs, and test environment. Add the missing template sections: Approach, User stories, Documentation, Automation tests, Security checks, Samples, and Test environment.
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: adding umbrella Helm charts for AI Workspace and Developer Portal.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with 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.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 5

🧹 Nitpick comments (2)
kubernetes/helm/ai-workspace-helm-chart/generate-secrets.sh (2)

110-113: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Generated admin password only shown via terminal echo.

The one-time-generated ADMIN_PASSWORD is printed to stdout with no other durable, access-controlled record. Terminal scrollback/shell history/CI logs can retain it in plaintext far longer than intended for a highly-privileged admin credential.

  • kubernetes/helm/ai-workspace-helm-chart/generate-secrets.sh#L110-L113: in addition to (or instead of) echoing, write the credential to a chmod 600 local file (e.g. $OUT_FILE-adjacent .admin-credentials excluded via .gitignore) so it isn't solely dependent on terminal capture.
  • kubernetes/helm/developer-portal-helm-chart/generate-secrets.sh#L111-L114: apply the same change here.
🤖 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 `@kubernetes/helm/ai-workspace-helm-chart/generate-secrets.sh` around lines 110
- 113, The generated ADMIN_PASSWORD is only emitted through terminal output.
Update the credential-generation completion block in
kubernetes/helm/ai-workspace-helm-chart/generate-secrets.sh at lines 110-113 and
kubernetes/helm/developer-portal-helm-chart/generate-secrets.sh at lines 111-114
to also write the username and password to a local, access-controlled
credentials file adjacent to OUT_FILE, set its permissions to chmod 600, and
ensure the file is excluded from version control; retain or remove the terminal
echo as appropriate, but do not leave the credential solely in stdout.

72-144: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract shared logic between the two generate-secrets.sh scripts.

Both scripts duplicate the helper functions (gen_key, secret_exists, secret_has_key, bcrypt_hash), the entire Platform API secret provisioning block (RSA keypair generation, bcrypt admin credential), and the Developer Portal / AI Workspace UI secret blocks almost verbatim. Any future fix to security-sensitive logic (e.g. bcrypt cost factor, key size, admin credential handling) has to be applied twice, and nothing enforces that the two copies stay in sync.

  • kubernetes/helm/ai-workspace-helm-chart/generate-secrets.sh#L72-L144: extract the helpers and the Platform API/Developer Portal/AI Workspace UI provisioning blocks into a shared sourced file (e.g. kubernetes/helm/_scripts/secrets-common.sh), keeping only the umbrella-specific defaults (RELEASE, DEVELOPER_PORTAL default, output ordering) in this wrapper.
  • kubernetes/helm/developer-portal-helm-chart/generate-secrets.sh#L73-L143: source the same shared file instead of re-implementing identical logic.
🤖 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 `@kubernetes/helm/ai-workspace-helm-chart/generate-secrets.sh` around lines 72
- 144, Extract the duplicated helpers and Platform API, AI Workspace UI, and
Developer Portal secret-provisioning logic from
kubernetes/helm/ai-workspace-helm-chart/generate-secrets.sh lines 72-144 and
kubernetes/helm/developer-portal-helm-chart/generate-secrets.sh lines 73-143
into a shared sourced file such as kubernetes/helm/_scripts/secrets-common.sh.
Source that file from both wrappers, retaining only umbrella-specific defaults,
RELEASE handling, DEVELOPER_PORTAL defaults, and output ordering in each
wrapper; preserve the existing gen_key, secret_exists, secret_has_key,
bcrypt_hash, and provisioning behavior.
🤖 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 @.github/workflows/ai-workspace-helm-release.yml:
- Line 25: Replace the hardcoded REGISTRY_USERNAME in
.github/workflows/ai-workspace-helm-release.yml:25-25 with the configured
repository/environment variable, and add validation before helm registry login
that fails when it is missing. Apply the identical variable and missing-value
validation to .github/workflows/developer-portal-helm-release.yml:25-25,
ensuring neither workflow contains a functional credential default.

In `@kubernetes/helm/ai-workspace-helm-chart/templates/NOTES.txt`:
- Line 31: Update the health URL ternary expressions in
kubernetes/helm/ai-workspace-helm-chart/templates/NOTES.txt lines 31-31 and
kubernetes/helm/developer-portal-helm-chart/templates/NOTES.txt lines 31-31 to
use the apip.platformApi.internalURL helper’s tlsEnabled default, so missing
global.platformApi.tlsEnabled resolves to https consistently with the chart
defaults.

In `@kubernetes/helm/ai-workspace-helm-chart/templates/serviceaccount.yaml`:
- Around line 1-2: Default global.serviceAccount to an empty map before
assigning or reading $sa in both service-account templates:
kubernetes/helm/ai-workspace-helm-chart/templates/serviceaccount.yaml:1-2 and
kubernetes/helm/developer-portal-helm-chart/templates/serviceaccount.yaml:1-2.
Preserve the existing $sa.create, $sa.annotations, and
$sa.automountServiceAccountToken behavior while ensuring
external-service-account-only overrides render safely.

In `@kubernetes/helm/ai-workspace-helm-chart/templates/validation.yaml`:
- Around line 11-15: Update the validation blocks in
kubernetes/helm/ai-workspace-helm-chart/templates/validation.yaml lines 11-15
and kubernetes/helm/developer-portal-helm-chart/templates/validation.yaml lines
11-15 to require the external Platform API URL for each enabled portal
independently: validate $aiwUrl only when AI Workspace is enabled and validate
$dpUrl only when Developer Portal is enabled, while preserving the existing
platform-api.enabled and external-URL failure behavior.

In `@kubernetes/helm/developer-portal-helm-chart/templates/NOTES.txt`:
- Around line 71-77: Update the Developer Portal URL examples in the NOTES
template for the NodePort, LoadBalancer, and port-forward branches to select
HTTP when certificateProvider is none and HTTPS otherwise. Apply the same
protocol selection consistently to each displayed URL while preserving the
existing host, port, and path values.

---

Nitpick comments:
In `@kubernetes/helm/ai-workspace-helm-chart/generate-secrets.sh`:
- Around line 110-113: The generated ADMIN_PASSWORD is only emitted through
terminal output. Update the credential-generation completion block in
kubernetes/helm/ai-workspace-helm-chart/generate-secrets.sh at lines 110-113 and
kubernetes/helm/developer-portal-helm-chart/generate-secrets.sh at lines 111-114
to also write the username and password to a local, access-controlled
credentials file adjacent to OUT_FILE, set its permissions to chmod 600, and
ensure the file is excluded from version control; retain or remove the terminal
echo as appropriate, but do not leave the credential solely in stdout.
- Around line 72-144: Extract the duplicated helpers and Platform API, AI
Workspace UI, and Developer Portal secret-provisioning logic from
kubernetes/helm/ai-workspace-helm-chart/generate-secrets.sh lines 72-144 and
kubernetes/helm/developer-portal-helm-chart/generate-secrets.sh lines 73-143
into a shared sourced file such as kubernetes/helm/_scripts/secrets-common.sh.
Source that file from both wrappers, retaining only umbrella-specific defaults,
RELEASE handling, DEVELOPER_PORTAL defaults, and output ordering in each
wrapper; preserve the existing gen_key, secret_exists, secret_has_key,
bcrypt_hash, and provisioning behavior.
🪄 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: 009154b7-7b58-4e21-9ad8-dd883391cd70

📥 Commits

Reviewing files that changed from the base of the PR and between cf1a19e and 46d07d4.

📒 Files selected for processing (22)
  • .github/workflows/ai-workspace-helm-release.yml
  • .github/workflows/developer-portal-helm-release.yml
  • kubernetes/helm/ai-workspace-helm-chart/.helmignore
  • kubernetes/helm/ai-workspace-helm-chart/Chart.yaml
  • kubernetes/helm/ai-workspace-helm-chart/generate-secrets.sh
  • kubernetes/helm/ai-workspace-helm-chart/templates/NOTES.txt
  • kubernetes/helm/ai-workspace-helm-chart/templates/serviceaccount.yaml
  • kubernetes/helm/ai-workspace-helm-chart/templates/validation.yaml
  • kubernetes/helm/ai-workspace-helm-chart/values-local.yaml
  • kubernetes/helm/ai-workspace-helm-chart/values.yaml
  • kubernetes/helm/ai-workspace-ui-helm-chart/templates/deployment.yaml
  • kubernetes/helm/ai-workspace-ui-helm-chart/values.yaml
  • kubernetes/helm/developer-portal-helm-chart/.helmignore
  • kubernetes/helm/developer-portal-helm-chart/Chart.yaml
  • kubernetes/helm/developer-portal-helm-chart/generate-secrets.sh
  • kubernetes/helm/developer-portal-helm-chart/templates/NOTES.txt
  • kubernetes/helm/developer-portal-helm-chart/templates/serviceaccount.yaml
  • kubernetes/helm/developer-portal-helm-chart/templates/validation.yaml
  • kubernetes/helm/developer-portal-helm-chart/values-local.yaml
  • kubernetes/helm/developer-portal-helm-chart/values.yaml
  • kubernetes/helm/developer-portal-ui-helm-chart/templates/deployment.yaml
  • kubernetes/helm/developer-portal-ui-helm-chart/values.yaml

Comment thread .github/workflows/ai-workspace-helm-release.yml
Comment thread kubernetes/helm/ai-workspace-helm-chart/templates/NOTES.txt Outdated
Comment thread kubernetes/helm/ai-workspace-helm-chart/templates/serviceaccount.yaml Outdated
Comment thread kubernetes/helm/ai-workspace-helm-chart/templates/validation.yaml Outdated
Comment thread kubernetes/helm/developer-portal-helm-chart/templates/NOTES.txt Outdated
@DinithHerath
DinithHerath merged commit 471f00e into wso2:main Jul 27, 2026
9 checks passed
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.

2 participants