#!/usr/bin/env bash set -euo pipefail chart_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" repo_root="$(cd "$chart_dir/../../.." && pwd)" tmp_dir="$(mktemp -d)" trap 'rm -rf "$tmp_dir"' EXIT assert_count() { local file="$1" local needle="$2" local expected="$3" local count count="$(grep -F -c -- "$needle" "$file" || true)" if [[ "$count" != "$expected" ]]; then printf 'Expected %s occurrences of %s, found %s\n' "$expected" "$needle" "$count" >&2 return 1 fi } assert_contains() { local file="$1" local needle="$2" if ! grep -F -q -- "$needle" "$file"; then printf 'Expected rendered chart to contain %s\n' "$needle" >&2 return 1 fi } assert_not_contains() { local file="$1" local needle="$2" if grep -F -q -- "$needle" "$file"; then printf 'Expected rendered chart not to contain %s\n' "$needle" >&2 return 1 fi } assert_file_contains() { assert_contains "$1" "$2" } assert_file_not_contains() { assert_not_contains "$1" "$2" } default_rendered="$tmp_dir/default.yaml" helm template openwork-ee "$chart_dir" --set inference.enabled=true > "$default_rendered" assert_contains "$default_rendered" 'DEN_API_NODE_OPTIONS: ""' assert_count "$default_rendered" 'name: NODE_OPTIONS' 2 assert_count "$default_rendered" 'valueFrom: null' 1 assert_not_contains "$default_rendered" 'key: DEN_API_NODE_OPTIONS' assert_count "$default_rendered" 'name: DEN_OBSERVABILITY_BACKEND' 2 assert_count "$default_rendered" 'value: "none"' 2 assert_not_contains "$default_rendered" 'name: OTEL_EXPORTER_OTLP_HEADERS' assert_not_contains "$default_rendered" 'name: SENTRY_DSN' otel_values="$tmp_dir/otel-values.yaml" otel_rendered="$tmp_dir/otel.yaml" cat > "$otel_values" <<'YAML' inference: enabled: true config: denApiNodeOptions: --max-old-space-size=4096 observability: backend: otel otel: endpoint: https://otel.example.test/otlp tracesEndpoint: https://otel.example.test/v1/traces metricsEndpoint: https://otel.example.test/v1/metrics logsEndpoint: https://otel.example.test/v1/logs exporters: metrics: none tracesSampler: parentbased_always_on headers: existingSecret: otel-runtime key: otlp-headers denApi: env: CUSTOM_DEN_API_ENV: api denWeb: env: CUSTOM_DEN_WEB_ENV: web YAML helm template openwork-ee "$chart_dir" -f "$otel_values" > "$otel_rendered" assert_contains "$otel_rendered" 'DEN_API_NODE_OPTIONS: "--max-old-space-size=4096"' assert_contains "$otel_rendered" 'value: "--max-old-space-size=4096"' assert_count "$otel_rendered" 'name: DEN_OBSERVABILITY_BACKEND' 2 assert_count "$otel_rendered" 'value: "otel"' 2 assert_count "$otel_rendered" 'name: OTEL_EXPORTER_OTLP_HEADERS' 2 assert_count "$otel_rendered" 'name: OTEL_SERVICE_NAME' 2 assert_count "$otel_rendered" 'name: OTEL_METRICS_EXPORTER' 2 assert_count "$otel_rendered" 'value: "parentbased_always_on"' 2 assert_not_contains "$otel_rendered" 'name: OTEL_TRACES_SAMPLER_ARG' assert_contains "$otel_rendered" 'value: "den-api"' assert_contains "$otel_rendered" 'value: "den-web"' assert_contains "$otel_rendered" 'name: "otel-runtime"' assert_contains "$otel_rendered" 'key: "otlp-headers"' assert_contains "$otel_rendered" 'name: CUSTOM_DEN_API_ENV' assert_contains "$otel_rendered" 'name: CUSTOM_DEN_WEB_ENV' assert_not_contains "$otel_rendered" 'name: SENTRY_AUTH_TOKEN' legacy_values="$tmp_dir/legacy-node-options-values.yaml" legacy_rendered="$tmp_dir/legacy-node-options.yaml" cat > "$legacy_values" <<'YAML' denApi: env: NODE_OPTIONS: --tls-max-v1.2 YAML helm template openwork-ee "$chart_dir" -f "$legacy_values" > "$legacy_rendered" assert_count "$legacy_rendered" 'name: NODE_OPTIONS' 2 assert_contains "$legacy_rendered" 'value: "--tls-max-v1.2"' assert_not_contains "$legacy_rendered" 'valueFrom: null' assert_not_contains "$legacy_rendered" 'key: DEN_API_NODE_OPTIONS' sentry_values="$tmp_dir/sentry-values.yaml" sentry_rendered="$tmp_dir/sentry.yaml" cat > "$sentry_values" <<'YAML' inference: enabled: true observability: backend: sentry sentry: dsnSecret: existingSecret: sentry-runtime key: dsn tracesSampleRate: "0.75" environment: production release: "2026.07.11" dist: web YAML helm template openwork-ee "$chart_dir" -f "$sentry_values" > "$sentry_rendered" assert_count "$sentry_rendered" 'name: DEN_OBSERVABILITY_BACKEND' 2 assert_count "$sentry_rendered" 'value: "sentry"' 2 assert_count "$sentry_rendered" 'name: SENTRY_DSN' 2 assert_contains "$sentry_rendered" 'name: "sentry-runtime"' assert_not_contains "$sentry_rendered" 'SENTRY_AUTH_TOKEN' assert_not_contains "$sentry_rendered" 'SENTRY_ORG' assert_not_contains "$sentry_rendered" 'SENTRY_PROJECT' assert_not_contains "$sentry_rendered" 'SENTRY_URL' assert_not_contains "$sentry_rendered" 'name: OTEL_EXPORTER_OTLP_HEADERS' assert_file_contains "$repo_root/packaging/docker/Dockerfile.den" '/app/ee/apps/den-api/dist/main.js' assert_file_not_contains "$repo_root/packaging/docker/Dockerfile.den" '/app/ee/apps/den-api/dist/server.js' assert_file_contains "$repo_root/packaging/docker/docker-compose.den-dev.yml" '/app/ee/apps/den-api/dist/main.js' assert_file_not_contains "$repo_root/packaging/docker/docker-compose.den-dev.yml" '/app/ee/apps/den-api/dist/server.js' assert_file_contains "$repo_root/.devcontainer/start-daytona-server.sh" 'pnpm --filter @openwork-ee/den-api exec tsx watch src/main.ts' assert_file_not_contains "$repo_root/.devcontainer/start-daytona-server.sh" 'ee/apps/den-api/src/server.ts' assert_file_contains "$repo_root/evals/packages/hosts/src/den-stack.ts" '"tsx", "src/main.ts"' assert_file_not_contains "$repo_root/evals/packages/hosts/src/den-stack.ts" '"tsx", "src/server.ts"'