Skip to content

feat: add Helm chart for Kubernetes deployment#3

Merged
aryatavakoli merged 17 commits into
mainfrom
feat/helm-chart
Jun 5, 2026
Merged

feat: add Helm chart for Kubernetes deployment#3
aryatavakoli merged 17 commits into
mainfrom
feat/helm-chart

Conversation

@aryatavakoli

@aryatavakoli aryatavakoli commented May 29, 2026

Copy link
Copy Markdown
Contributor
  • Adds a Helm chart under helm/ for deploying gRPC Studio to Kubernetes
  • Supports insecure, TLS, and mTLS connections; bearer token and OAuth2 auth; standard Ingress, nginx-ingress, and Istio ingress patterns
  • Adds CI workflow (helm-ci.yaml) with lint, template render, and kind install test — path-filtered to helm/**
  • Adds release workflow (helm-release.yaml) with release-please automation and manual workflow_dispatch trigger

New files

Path Description
helm/ Chart templates, application config templates, and deployment examples
.github/ct.yaml chart-testing config pointed at helm/
.github/workflows/helm-ci.yaml Lint + template render + kind install test
.github/workflows/helm-release.yaml release-please + GHCR OCI push

Test plan

  • Helm CI workflow passes lint + template render on this PR
  • helm lint ./helm passes locally
  • helm template grpc-studio ./helm -f helm/examples/basic/values.yaml renders cleanly

@aryatavakoli aryatavakoli self-assigned this May 29, 2026
Adds a Helm chart under helm/ for deploying gRPC Studio to Kubernetes.
Supports insecure, TLS, and mTLS connections; bearer token and OAuth2
auth; standard Ingress, nginx-ingress, and Istio ingress patterns.

- helm/: chart templates, application config templates, examples
- .github/ct.yaml: chart-testing config pointed at helm/
- .github/workflows/helm-ci.yaml: lint + template render + kind install
- .github/workflows/helm-release.yaml: release-please + GHCR OCI push,
  with workflow_dispatch for manual publishes and HELM_RELEASE_TOKEN
  fallback for orgs where GITHUB_TOKEN cannot push packages
- .dockerignore: exclude helm/ from Docker build context
- README.md: add Helm Chart section
…ease

Adds manual publish trigger with a version input, and uses
HELM_RELEASE_TOKEN (falling back to GITHUB_TOKEN) for both
release-please and GHCR login to handle org package-write restrictions.
- Rename connection: -> client: to match backend config schema
- Fix auth.plugins rendering null -> {} when no plugins configured
- Fix env var CONFIG_PATH -> GRPC_STUDIO_CONFIG
- Rename insecure mode -> plaintext everywhere (actual enum value)
- Remove schema fields that don't exist: auth.defaultPlugin, logging,
  cache.schema/protoset, health.interval, proxy, ui, security, features
- Remove stale frontend template fields: schema, generateCommand endpoints,
  proxy section, ui/security/features blocks
- Fix frontend endpoints.schema -> endpoints.descriptorSet
…vsubst

The frontend image writes nginx.conf from nginx.conf.template at startup
using envsubst with BACKEND_URL. Mounting a ConfigMap over /etc/nginx/nginx.conf
as read-only blocked that write and crashed the container.

Remove configmap-frontend-nginx.yaml, nginx.conf.tpl, and the nginx-config
volume/volumeMount from the frontend deployment. BACKEND_URL env var is
already set correctly from the backend service name.
Replace the placeholder httpbin image in TESTING.md with the actual
PetStore gRPC server, which exercises the proto3 feature set the chart
is meant to drive against. Also fix the port-forward service name typo.
The chart emitted several config keys the backend/frontend never read, and
defaulted CORS to a value that crashes the backend:

- Frontend auth used a non-existent 'oidc' provider; the app only supports
  'entra-id'. Emit the entraId block and add cloud/redirectUri/scopes.
- Wire ui.api.websocketTimeout and align endpoints (descriptorSet, health)
  with what the frontend parser actually reads.
- Wire backend reflection cache (cache.reflection.ttlMs/maxEntries); the old
  app.cache.* block was in seconds and never emitted.
- Backend logging is env-driven: map backend.logging.level/format to
  LOG_LEVEL/LOG_FORMAT instead of a dead app.logging config block.
- Default backend.server.cors.origins to [] instead of ['*']. A wildcard
  origin with credentials is rejected at startup (CrashLoopBackOff).
- Drop dead ui.* blocks (proxy/theme/forms/display/security/features) and
  unused app.logging/app.cache keys.
- Add checksum/config pod annotation so config-only upgrades roll the pods.

Docs: hand-maintained README values table covering only wired values
(dropped the helm-docs automation); sharpened the CORS troubleshooting row.
yamllint (via ct lint) requires min-spaces-from-content: 2; the aligned
logging comments used a single space and failed CI.

@pranavpsawant pranavpsawant 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.

I tested the local helm install, and seems to work as expected.

@aryatavakoli aryatavakoli merged commit cf6931e into main Jun 5, 2026
11 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