Skip to content

Refactor config interpolation in gateway#2761

Merged
Krishanx92 merged 9 commits into
wso2:mainfrom
thivindu:config-interpolation
Jul 22, 2026
Merged

Refactor config interpolation in gateway#2761
Krishanx92 merged 9 commits into
wso2:mainfrom
thivindu:config-interpolation

Conversation

@thivindu

@thivindu thivindu commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Summary

Completes the gateway's move to the config-interpolation model across every deployment surface (Go, Docker Compose, Kubernetes Helm/operator, conformance, AI Workspace, and docs). The legacy koanf APIP_GW_* env-override layer is removed. development/demo mode is removed, and at-rest AES-256 encryption is now mandatory and fail-closed - nothing is auto-generated; a provisioning step (setup.sh for Compose, a Secret for Kubernetes) supplies the key.

Approach

Gateway (Go) — gateway/gateway-controller, gateway/gateway-runtime/policy-engine

  • Removed the koanf env.Provider(EnvPrefix="APIP_GW_") override from both config loaders; env now reaches config only via {{ env }} interpolation tokens. Tokenized the shipped config.toml / config-template.toml / IT test configs.
  • aesgcm/keymgmt.go: removed the dev-mode key auto-generation; the key file is now required — the server fails closed with a descriptive error if it's missing. Updated unit tests.
  • Immutable-gateway builder template writes definitions_path into the baked config instead of an APIP_GW_* ENV.

Provisioning & Compose — gateway/

  • New gateway/scripts/setup.sh: provisions the HTTPS listener cert, the AES-256 key (default-aesgcm256-v1.bin), and api-platform.env. No demo mode; does not prompt for the (optional) control-plane host/token.
  • Sample/distribution composes migrated to env_file: (api-platform.env, required: true, format: raw) and bind-mount the AES key. Removed APIP_GW_DEVELOPMENT_MODE.

Kubernetes — kubernetes/helm, kubernetes/gateway-operator, kubernetes/conformance

  • gateway-helm-chart: the rendered config.toml ConfigMap re-plumbs the control-plane token and DB passwords via literal {{ env "APIP_GW_CONTROLLER_..." "" }} tokens (emitted with a backtick raw-string, since the koanf override no longer injects them); control-plane host rendered directly. Removed gateway.developmentMode; the encryption fail-closed guard has no bypass. Reconciled a vestigial duplicate value tree; logging default preserved.
  • operator-helm-chart + gateway-operator/config/gateway_values.yaml + operator docs/samples/embedded-manifest: dropped developmentMode, documented the mandatory encryption key, removed stale APIP_GW_* override docs.
  • helm/resources/* demos: dropped dev-mode, enabled encryptionKeys, added key-Secret steps to their READMEs.
  • conformance/install-wso2-gateway.sh: provisions a throwaway AES-256 key Secret in gateway-conformance-infra and enables encryptionKeys so the fail-closed gateway boots.

AI Workspace — portals/ai-workspace/.../gateways

  • Self-hosted gateway registration steps updated to the new flow (setup.sh → inject vars into api-platform.env → docker compose up) with canonical APIP_GW_CONTROLLER_CONTROLPLANE_* names.
  • Version-gated: v1.2+ gets the new flow; < v1.2 keeps the legacy configs/keys.env + GATEWAY_* + --env-file flow.
  • Extracted the two version-specific flows into a new GatewaySetupSteps.tsx (GatewaySetupStepsV1_2Plus / GatewaySetupStepsPreV1_2); ViewGateway.tsx just picks one via isGatewayV12OrAbove(...).

Docs

  • Gateway READMEs, quick-start, immutable-gateway, bottom-up guide, DEBUG_GUIDE, operator CONFIGURATION.md rewritten to the interpolation model.
  • gateway-helm-chart/README.md restructured so creating the encryption-key Secret is a required Step 1 before helm install (every example now includes the encryptionKeys flags), plus a Troubleshooting section for the fail-closed/missing-secret case.

Breaking changes / upgrade notes

  • Plain APIP_GW_* env vars no longer override config. Values reach config only through {{ env }} tokens in config.toml. Helm/operator users who relied on env overrides must move settings into the chart values / config.toml.
  • No demo mode. A gateway now fails to start without its AES-256 key.
    • Compose: run ./scripts/setup.sh before docker compose up.
    • Helm: create a gateway-encryption-keys Secret and set gateway.controller.encryptionKeys.enabled=true + secretName (see the chart README). The chart refuses to render otherwise.
  • gateway.developmentMode value removed from the charts.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

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

Next review available in: 11 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

Run ID: 0cad7261-c44a-414b-9686-83e08e8ad001

📥 Commits

Reviewing files that changed from the base of the PR and between 66eda2e and 80f7a47.

⛔ Files ignored due to path filters (3)
  • go.work.sum is excluded by !**/*.sum
  • kubernetes/conformance/runner/go.sum is excluded by !**/*.sum
  • kubernetes/gateway-operator/go.sum is excluded by !**/*.sum
📒 Files selected for processing (9)
  • gateway/build-manifest.yaml
  • gateway/distribution/README.md
  • kubernetes/conformance/runner/go.mod
  • kubernetes/gateway-operator/go.mod
  • kubernetes/helm/gateway-helm-chart/README.md
  • kubernetes/helm/resources/apim-apigateway-restapi-operator-demo/README.md
  • kubernetes/helm/resources/apim-gateway-api-operator-demo/README.md
  • kubernetes/helm/resources/gateway-api-operator-demo/README.md
  • portals/ai-workspace/src/pages/appShell/appShellPages/gateways/GatewaySetupSteps.tsx
📝 Walkthrough

Walkthrough

Gateway configuration now uses explicit TOML interpolation instead of automatic APIP_GW_ overrides. The change also makes encryption provisioning mandatory, adds a setup script and shared env-file wiring, updates Kubernetes deployment paths, and adds version-specific gateway setup UI flows.

Changes

Gateway configuration and provisioning

Layer / File(s) Summary
Configuration loading and interpolation
gateway/gateway-controller/pkg/config/*, gateway/gateway-runtime/policy-engine/internal/config/*
Loaders now apply config files over defaults, resolve {{ env }} and {{ file }} tokens, and ignore environment variables that are not referenced by tokens.
Runtime configuration and compose wiring
gateway/configs/*, gateway/docker-compose*.yaml, gateway/distribution/*, gateway/it/*
Configuration templates, compose services, image defaults, and integration fixtures use explicit interpolation and required api-platform.env files.
Local setup and encryption provisioning
gateway/scripts/setup.sh, gateway/Makefile, gateway/gateway-controller/pkg/encryption/*, kubernetes/conformance/*, kubernetes/helm/*
Setup tooling provisions certificates, AES-256 keys, and runtime environment files; controller startup and Helm rendering require encryption keys.
Documentation and debugging guidance
.agents/skills/gateway-debug/*, docs/gateway/*, gateway/*README.md, gateway/DEBUG_GUIDE.md
Documentation describes token-based configuration, updated variable names, setup requirements, and encryption-key prerequisites.
Gateway setup UI flows
portals/ai-workspace/src/pages/appShell/appShellPages/gateways/*
Gateway setup instructions are shared across version-specific flows, with matching env-file generation, commands, downloads, and reconfiguration controls.
Dependency manifests
**/go.mod
Direct and indirect Go module requirements are refreshed across gateway, CLI, Kubernetes, SDK, platform, and test modules.

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

Possibly related PRs

  • wso2/api-platform#2639: Both changes update the gateway distribution packaging flow to copy additional distribution files.

Suggested reviewers: pubudu538, malinthaprasan, ashera96, renuka-fernando, anugayan

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ⚠️ Warning The description is missing required template sections like Purpose, Goals, User stories, Tests, Security checks, Samples, Related PRs, and Test environment. Fill in the required template sections, especially Purpose, Goals, User stories, Documentation, Automation tests, Security checks, Samples, Related PRs, and Test environment.
✅ Passed checks (3 passed)
Check name Status Explanation
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.
Title check ✅ Passed Title matches the main change: gateway config interpolation refactor and related config/env updates.
✨ 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: 1

🧹 Nitpick comments (1)
gateway/configs/config-template.toml (1)

14-14: 🧹 Nitpick | 🔵 Trivial | 💤 Low value

Consider generating a unique gateway_id dynamically.

The default gateway_id is still the static "platform-gateway-id" placeholder. Based on learnings, when deploying multiple gateways against a shared database, ensure that deployment scripts or configurations dynamically generate and inject a unique ID (preferably UUIDv7) via the APIP_GW_CONTROLLER_SERVER_GATEWAY_ID environment variable to prevent identification collisions.

🤖 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 `@gateway/configs/config-template.toml` at line 14, Update the gateway_id
configuration in the template to require or generate a deployment-specific
unique identifier, preferably UUIDv7, through
APIP_GW_CONTROLLER_SERVER_GATEWAY_ID instead of falling back to the static
"platform-gateway-id" value. Ensure deployment scripts or configuration inputs
inject a distinct ID for each gateway instance.

Source: Learnings

🤖 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 `@gateway/configs/config.toml`:
- Around line 39-61: Add the missing [controller.storage.postgres] configuration
block to config.toml with explicit env interpolation tokens for its Postgres
settings, and add deployment_sync_enabled under [controller.controlplane] using
the corresponding environment override token and default. Preserve the existing
configuration structure and naming conventions so Docker Compose users can
configure Postgres and deployment sync through api-platform.env.

---

Nitpick comments:
In `@gateway/configs/config-template.toml`:
- Line 14: Update the gateway_id configuration in the template to require or
generate a deployment-specific unique identifier, preferably UUIDv7, through
APIP_GW_CONTROLLER_SERVER_GATEWAY_ID instead of falling back to the static
"platform-gateway-id" value. Ensure deployment scripts or configuration inputs
inject a distinct ID for each gateway instance.
🪄 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

Run ID: 7f189a96-dd91-4fe6-a94e-a98395682ccf

📥 Commits

Reviewing files that changed from the base of the PR and between 995663e and 16ea1d8.

⛔ Files ignored due to path filters (2)
  • gateway/gateway-controller/go.sum is excluded by !**/*.sum
  • gateway/gateway-runtime/policy-engine/go.sum is excluded by !**/*.sum
📒 Files selected for processing (24)
  • .agents/skills/gateway-debug/SKILL.md
  • docs/gateway/bottom-up-api-deployment-guide.md
  • docs/gateway/immutable-gateway.md
  • gateway/.gitignore
  • gateway/DEBUG_GUIDE.md
  • gateway/README.md
  • gateway/configs/config-template.toml
  • gateway/configs/config.toml
  • gateway/distribution/docker-compose.yaml
  • gateway/docker-compose-perf.yaml
  • gateway/docker-compose.debug.yaml
  • gateway/docker-compose.yaml
  • gateway/gateway-builder/templates/Dockerfile.gateway-controller.tmpl
  • gateway/gateway-controller/README.md
  • gateway/gateway-controller/go.mod
  • gateway/gateway-controller/pkg/config/config.go
  • gateway/gateway-controller/pkg/config/config_test.go
  • gateway/gateway-runtime/README.md
  • gateway/gateway-runtime/policy-engine/go.mod
  • gateway/gateway-runtime/policy-engine/internal/config/config.go
  • gateway/gateway-runtime/policy-engine/internal/config/config_test.go
  • gateway/it/test-config.toml
  • gateway/it/test-config.vhosts-multi.toml
  • gateway/it/test-config.vhosts-single.toml
💤 Files with no reviewable changes (2)
  • gateway/gateway-runtime/policy-engine/go.mod
  • gateway/gateway-controller/go.mod

Comment thread gateway/configs/config.toml
@github-actions

Copy link
Copy Markdown
Contributor

Dependency Validation Results

Dependency name: github.com/envoyproxy/go-control-plane/envoy
Version: v1.36.0 (was v1.37.0)
Allowed range: >=v1.36.0
Approved: ✅ Yes

Dependency name: google.golang.org/grpc
Version: v1.79.3 (was v1.82.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v1.82.0]

Dependency name: github.com/gorilla/websocket
Version: v1.5.3 (was v1.5.4-0.20250319132907-e064f32e3674)
Allowed range: >=v1.5.3
Approved: ✅ Yes

Dependency name: github.com/testcontainers/testcontainers-go/modules/compose
Version: v0.40.0 (was v0.43.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v0.43.0]

Dependency name: github.com/envoyproxy/go-control-plane/envoy
Version: v1.36.0 (was v1.37.0)
Allowed range: >=v1.36.0
Approved: ✅ Yes

Dependency name: go.opentelemetry.io/otel
Version: v1.41.0 (was v1.44.0)
Allowed range: >=v1.39.0
Approved: ✅ Yes

Dependency name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
Version: v1.41.0 (was v1.44.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v1.44.0]

Dependency name: go.opentelemetry.io/otel/sdk
Version: v1.41.0 (was v1.44.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v1.44.0]

Dependency name: go.opentelemetry.io/otel/trace
Version: v1.41.0 (was v1.44.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v1.44.0]

Dependency name: go.opentelemetry.io/proto/otlp
Version: v1.9.0 (was v1.10.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v1.10.0]

Dependency name: google.golang.org/grpc
Version: v1.79.3 (was v1.82.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v1.82.0]

Dependency name: github.com/testcontainers/testcontainers-go/modules/compose
Version: v0.40.0 (was v0.43.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v0.43.0]


Next Steps

  1. Review the validation failures listed above
  2. Check if dependencies are in the approved dependency list
  3. Options to resolve:
    • Remove the unapproved dependencies from this PR
    • OR submit a PR to add these dependencies to the approved list in engineering-governance
  4. Once resolved, push changes to re-run validation

This PR is blocked until all dependencies are approved.

⚠️ Please verify the scope of the dependencies usage is necessary

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

Dependency Validation Results

Dependency name: github.com/envoyproxy/go-control-plane/envoy
Version: v1.36.0 (was v1.37.0)
Allowed range: >=v1.36.0
Approved: ✅ Yes

Dependency name: google.golang.org/grpc
Version: v1.79.3 (was v1.82.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v1.82.0]

Dependency name: github.com/gorilla/websocket
Version: v1.5.3 (was v1.5.4-0.20250319132907-e064f32e3674)
Allowed range: >=v1.5.3
Approved: ✅ Yes

Dependency name: github.com/testcontainers/testcontainers-go/modules/compose
Version: v0.40.0 (was v0.43.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v0.43.0]

Dependency name: github.com/envoyproxy/go-control-plane/envoy
Version: v1.36.0 (was v1.37.0)
Allowed range: >=v1.36.0
Approved: ✅ Yes

Dependency name: go.opentelemetry.io/otel
Version: v1.41.0 (was v1.44.0)
Allowed range: >=v1.39.0
Approved: ✅ Yes

Dependency name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
Version: v1.41.0 (was v1.44.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v1.44.0]

Dependency name: go.opentelemetry.io/otel/sdk
Version: v1.41.0 (was v1.44.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v1.44.0]

Dependency name: go.opentelemetry.io/otel/trace
Version: v1.41.0 (was v1.44.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v1.44.0]

Dependency name: go.opentelemetry.io/proto/otlp
Version: v1.9.0 (was v1.10.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v1.10.0]

Dependency name: google.golang.org/grpc
Version: v1.79.3 (was v1.82.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v1.82.0]

Dependency name: github.com/testcontainers/testcontainers-go/modules/compose
Version: v0.40.0 (was v0.43.0)
Approved: ❌ No - Version constraint not met - approved versions: [>=v0.43.0]


Next Steps

  1. Review the validation failures listed above
  2. Check if dependencies are in the approved dependency list
  3. Options to resolve:
    • Remove the unapproved dependencies from this PR
    • OR submit a PR to add these dependencies to the approved list in engineering-governance
  4. Once resolved, push changes to re-run validation

This PR is blocked until all dependencies are approved.

⚠️ Please verify the scope of the dependencies usage is necessary

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 20, 2026
@thivindu
thivindu force-pushed the config-interpolation branch from e45976c to 66eda2e Compare July 21, 2026 13:49
@thivindu
thivindu marked this pull request as ready for review July 21, 2026 13:52

@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: 4

Caution

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

⚠️ Outside diff range comments (2)
kubernetes/gateway-operator/internal/controller/resources/api-platform-gateway-k8s-manifests.yaml (2)

114-119: 🩺 Stability & Availability | 🔴 Critical | 🏗️ Heavy lift

Missing encryption key volume mount in the static manifest.

The changes in keymgmt.go make the AES-256 encryption key file mandatory; the gateway-controller will unconditionally exit at startup if it is missing. While the Helm chart was updated to enforce and mount this key secret, this static operator manifest lacks the corresponding volume and volume mount for the encryption key.

Deploying this manifest will result in a CrashLoopBackOff as the controller fails to find the key file. Please add a volume (e.g., from a Kubernetes Secret) and mount it to the expected path in this manifest.

🤖 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/gateway-operator/internal/controller/resources/api-platform-gateway-k8s-manifests.yaml`
around lines 114 - 119, The static gateway-controller manifest is missing the
mandatory AES-256 encryption key Secret mount. Update the container volumeMounts
near /app/config/config.yaml to mount the key at the path expected by
keymgmt.go, and add the corresponding Secret-backed volume in the pod spec using
the existing manifest naming conventions.

149-149: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Update the mounted controller config to TOML
api-platform-gateway-k8s-manifests.yaml:149 still embeds YAML as config.yaml, but gateway-controller loads config with a TOML parser. Convert this manifest payload to TOML and rename the key/path to config.toml so the controller can start with the shipped config.

🤖 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/gateway-operator/internal/controller/resources/api-platform-gateway-k8s-manifests.yaml`
at line 149, Update the embedded controller configuration in the manifest’s
config map from YAML to TOML, and rename the `config.yaml` key and corresponding
mounted path to `config.toml`. Preserve all existing configuration values while
converting their syntax to valid TOML so gateway-controller can load the shipped
config.
🧹 Nitpick comments (2)
portals/ai-workspace/src/pages/appShell/appShellPages/gateways/GatewaySetupSteps.tsx (1)

127-135: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Icon-only copy button needs an accessible name.

The IconButton renders only a <Copy /> glyph with no text, so screen readers announce nothing actionable. You already have copyLabel in scope — reuse it as the accessible label.

♿ Proposed fix
             <IconButton
               size="small"
+              aria-label={copyLabel}
               onClick={() => onCopy(clipboardText, copyLabel)}
             >
               <Copy />
             </IconButton>
🤖 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
`@portals/ai-workspace/src/pages/appShell/appShellPages/gateways/GatewaySetupSteps.tsx`
around lines 127 - 135, Update the IconButton in GatewaySetupSteps to provide an
accessible name using the existing copyLabel value, while preserving its current
size, click handler, and Copy icon behavior.
kubernetes/helm/resources/apim-gateway-api-operator-demo/README.md (1)

63-68: 🔒 Security & Privacy | 🔵 Trivial | 💤 Low value

Cleanup the raw encryption key file after secret creation.

Both demo README files instruct users to create an AES-256 encryption key on disk but do not include a cleanup step to remove the raw key file afterward. Leaving the key on the filesystem exposes the at-rest encryption secret.

  • kubernetes/helm/resources/apim-gateway-api-operator-demo/README.md#L63-L68: append rm default-aesgcm256-v1.bin to the bash snippet to clean up the file.
  • kubernetes/helm/resources/gateway-api-operator-demo/README.md#L87-L92: append rm default-aesgcm256-v1.bin to the bash snippet to clean up the file.
🤖 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/resources/apim-gateway-api-operator-demo/README.md` around
lines 63 - 68, Add a cleanup command after secret creation in both README bash
snippets: kubernetes/helm/resources/apim-gateway-api-operator-demo/README.md
lines 63-68 and kubernetes/helm/resources/gateway-api-operator-demo/README.md
lines 87-92. Remove default-aesgcm256-v1.bin after kubectl create secret
completes.
🤖 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 `@docs/gateway/quick-start-guide.md`:
- Around line 135-139: Remove the https:// scheme from the
APIP_GW_CONTROLLER_CONTROLPLANE_HOST example so it uses plain host:port
formatting in docs/gateway/quick-start-guide.md (lines 135-139) and
gateway/distribution/README.md (lines 87-91); keep the token example unchanged.

In `@kubernetes/conformance/runner/go.mod`:
- Around line 66-69: Update the k8s.io/apiextensions-apiserver dependency in the
Kubernetes module requirements to v0.35.2, aligning it with k8s.io/api,
k8s.io/apimachinery, and k8s.io/client-go while preserving the existing indirect
dependency designation.

In `@kubernetes/helm/gateway-helm-chart/README.md`:
- Around line 37-42: Remove the temporary unencrypted key file immediately after
each Kubernetes Secret creation command: add the cleanup step at
kubernetes/helm/gateway-helm-chart/README.md lines 37-42 and 67-76, and
kubernetes/helm/resources/apim-apigateway-restapi-operator-demo/README.md lines
43-48. Also inspect other demo README instructions, including
gateway-api-operator-demo/README.md, and apply the same cleanup wherever this
key-generation and Secret-upload pattern appears.
- Around line 136-140: Update the secret verification command in the README to
use kubectl describe secret instead of extracting and printing secret data.
Revise the accompanying guidance to confirm default-aesgcm256-v1.bin appears
under Data with 32 bytes, while retaining the controller-log check for
encryption-key errors.

---

Outside diff comments:
In
`@kubernetes/gateway-operator/internal/controller/resources/api-platform-gateway-k8s-manifests.yaml`:
- Around line 114-119: The static gateway-controller manifest is missing the
mandatory AES-256 encryption key Secret mount. Update the container volumeMounts
near /app/config/config.yaml to mount the key at the path expected by
keymgmt.go, and add the corresponding Secret-backed volume in the pod spec using
the existing manifest naming conventions.
- Line 149: Update the embedded controller configuration in the manifest’s
config map from YAML to TOML, and rename the `config.yaml` key and corresponding
mounted path to `config.toml`. Preserve all existing configuration values while
converting their syntax to valid TOML so gateway-controller can load the shipped
config.

---

Nitpick comments:
In `@kubernetes/helm/resources/apim-gateway-api-operator-demo/README.md`:
- Around line 63-68: Add a cleanup command after secret creation in both README
bash snippets:
kubernetes/helm/resources/apim-gateway-api-operator-demo/README.md lines 63-68
and kubernetes/helm/resources/gateway-api-operator-demo/README.md lines 87-92.
Remove default-aesgcm256-v1.bin after kubectl create secret completes.

In
`@portals/ai-workspace/src/pages/appShell/appShellPages/gateways/GatewaySetupSteps.tsx`:
- Around line 127-135: Update the IconButton in GatewaySetupSteps to provide an
accessible name using the existing copyLabel value, while preserving its current
size, click handler, and Copy icon 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

Run ID: 63f562ec-57d8-4505-abcb-b29ca52134be

📥 Commits

Reviewing files that changed from the base of the PR and between 16ea1d8 and 66eda2e.

⛔ Files ignored due to path filters (19)
  • cli/it/go.sum is excluded by !**/*.sum
  • cli/src/go.sum is excluded by !**/*.sum
  • common/go.sum is excluded by !**/*.sum
  • event-gateway/gateway-builder/go.sum is excluded by !**/*.sum
  • event-gateway/gateway-controller/go.sum is excluded by !**/*.sum
  • event-gateway/gateway-runtime/go.sum is excluded by !**/*.sum
  • event-gateway/it/go.sum is excluded by !**/*.sum
  • gateway/gateway-builder/go.sum is excluded by !**/*.sum
  • gateway/gateway-controller/go.sum is excluded by !**/*.sum
  • gateway/gateway-runtime/policy-engine/go.sum is excluded by !**/*.sum
  • gateway/it/go.sum is excluded by !**/*.sum
  • go.work.sum is excluded by !**/*.sum
  • kubernetes/conformance/runner/go.sum is excluded by !**/*.sum
  • kubernetes/gateway-operator/go.sum is excluded by !**/*.sum
  • platform-api/go.sum is excluded by !**/*.sum
  • sdk/ai/go.sum is excluded by !**/*.sum
  • tests/ai-workspace-cli-e2e/go.sum is excluded by !**/*.sum
  • tests/integration-e2e/go.sum is excluded by !**/*.sum
  • tests/mock-servers/mock-platform-api/go.sum is excluded by !**/*.sum
📒 Files selected for processing (72)
  • .agents/skills/gateway-debug/SKILL.md
  • cli/it/go.mod
  • cli/src/go.mod
  • common/go.mod
  • docs/gateway/bottom-up-api-deployment-guide.md
  • docs/gateway/immutable-gateway.md
  • docs/gateway/quick-start-guide.md
  • event-gateway/docker-compose.dev.yaml
  • event-gateway/docker-compose.test.postgres.yaml
  • event-gateway/docker-compose.test.sqlserver.yaml
  • event-gateway/docker-compose.yaml
  • event-gateway/gateway-builder/go.mod
  • event-gateway/gateway-controller/go.mod
  • event-gateway/gateway-runtime/go.mod
  • event-gateway/it/go.mod
  • gateway/.gitignore
  • gateway/DEBUG_GUIDE.md
  • gateway/Makefile
  • gateway/README.md
  • gateway/configs/config-template.toml
  • gateway/configs/config.toml
  • gateway/distribution/README.md
  • gateway/distribution/docker-compose.yaml
  • gateway/docker-compose-perf.yaml
  • gateway/docker-compose.debug.yaml
  • gateway/docker-compose.yaml
  • gateway/gateway-builder/go.mod
  • gateway/gateway-builder/templates/Dockerfile.gateway-controller.tmpl
  • gateway/gateway-controller/README.md
  • gateway/gateway-controller/go.mod
  • gateway/gateway-controller/pkg/config/config.go
  • gateway/gateway-controller/pkg/config/config_test.go
  • gateway/gateway-controller/pkg/encryption/aesgcm/keymgmt.go
  • gateway/gateway-controller/pkg/encryption/aesgcm/keymgmt_test.go
  • gateway/gateway-runtime/README.md
  • gateway/gateway-runtime/policy-engine/go.mod
  • gateway/gateway-runtime/policy-engine/internal/config/config.go
  • gateway/gateway-runtime/policy-engine/internal/config/config_test.go
  • gateway/it/go.mod
  • gateway/it/test-config.toml
  • gateway/it/test-config.vhosts-multi.toml
  • gateway/it/test-config.vhosts-single.toml
  • gateway/scripts/setup.sh
  • kubernetes/conformance/README.md
  • kubernetes/conformance/install-wso2-gateway.sh
  • kubernetes/conformance/runner/go.mod
  • kubernetes/gateway-operator/config/gateway_values.yaml
  • kubernetes/gateway-operator/config/samples/operator-config.yaml
  • kubernetes/gateway-operator/docs/CONFIGURATION.md
  • kubernetes/gateway-operator/go.mod
  • kubernetes/gateway-operator/internal/controller/resources/api-platform-gateway-k8s-manifests.yaml
  • kubernetes/helm/gateway-helm-chart/README.md
  • kubernetes/helm/gateway-helm-chart/templates/gateway/controller/deployment.yaml
  • kubernetes/helm/gateway-helm-chart/templates/gateway/gateway-config.yaml
  • kubernetes/helm/gateway-helm-chart/values-local.yaml
  • kubernetes/helm/gateway-helm-chart/values.yaml
  • kubernetes/helm/operator-helm-chart/values.yaml
  • kubernetes/helm/resources/apigateway-restapi-operator-demo/01-gateway-values-configmap.yaml
  • kubernetes/helm/resources/apigateway-restapi-operator-demo/README.md
  • kubernetes/helm/resources/apim-apigateway-restapi-operator-demo/01-gateway-values-configmap.yaml
  • kubernetes/helm/resources/apim-apigateway-restapi-operator-demo/README.md
  • kubernetes/helm/resources/apim-gateway-api-operator-demo/01-gateway-values-configmap.yaml
  • kubernetes/helm/resources/apim-gateway-api-operator-demo/README.md
  • kubernetes/helm/resources/gateway-api-operator-demo/01-gateway-values-configmap.yaml
  • kubernetes/helm/resources/gateway-api-operator-demo/README.md
  • platform-api/go.mod
  • portals/ai-workspace/src/pages/appShell/appShellPages/gateways/GatewaySetupSteps.tsx
  • portals/ai-workspace/src/pages/appShell/appShellPages/gateways/ViewGateway.tsx
  • sdk/ai/go.mod
  • tests/ai-workspace-cli-e2e/go.mod
  • tests/integration-e2e/go.mod
  • tests/mock-servers/mock-platform-api/go.mod
💤 Files with no reviewable changes (4)
  • event-gateway/docker-compose.dev.yaml
  • event-gateway/docker-compose.yaml
  • event-gateway/docker-compose.test.sqlserver.yaml
  • event-gateway/docker-compose.test.postgres.yaml
🚧 Files skipped from review as they are similar to previous changes (19)
  • gateway/.gitignore
  • gateway/docker-compose.debug.yaml
  • gateway/it/test-config.toml
  • gateway/gateway-builder/templates/Dockerfile.gateway-controller.tmpl
  • gateway/README.md
  • gateway/distribution/docker-compose.yaml
  • gateway/gateway-runtime/policy-engine/internal/config/config.go
  • docs/gateway/immutable-gateway.md
  • docs/gateway/bottom-up-api-deployment-guide.md
  • gateway/gateway-runtime/policy-engine/internal/config/config_test.go
  • gateway/gateway-runtime/README.md
  • gateway/gateway-controller/pkg/config/config_test.go
  • gateway/it/test-config.vhosts-single.toml
  • gateway/docker-compose-perf.yaml
  • gateway/gateway-controller/README.md
  • gateway/it/test-config.vhosts-multi.toml
  • gateway/configs/config-template.toml
  • gateway/gateway-controller/pkg/config/config.go
  • gateway/DEBUG_GUIDE.md

Comment thread docs/gateway/quick-start-guide.md
Comment thread kubernetes/conformance/runner/go.mod
Comment thread kubernetes/helm/gateway-helm-chart/README.md
Comment thread kubernetes/helm/gateway-helm-chart/README.md Outdated
The blocks below extract those env vars and run `dlv` from a single Bash
invocation.

> ⚠️ **Config change — the `APIP_GW_` prefix override was removed.** The gateway loaders now read

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.

Instead of stating prefix override was removed I guess we have to update the skill to use proper configs.

@Krishanx92
Krishanx92 merged commit 576086d into wso2:main Jul 22, 2026
17 of 19 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.

3 participants