diff --git a/.github/workflows/cli-publish.yml b/.github/workflows/cli-publish.yml index e4a1d63913..0d2d5cc04c 100644 --- a/.github/workflows/cli-publish.yml +++ b/.github/workflows/cli-publish.yml @@ -132,6 +132,15 @@ jobs: - name: Build SDK packages run: bun run build:sdk + env: + TELEMETRY_SERVICE_API_KEY: ${{ secrets.TELEMETRY_SERVICE_API_KEY }} + ERROR_SERVICE_API_KEY: ${{ secrets.ERROR_SERVICE_API_KEY }} + OTEL_TELEMETRY_ENABLED: ${{ secrets.OTEL_TELEMETRY_ENABLED }} + OTEL_LOGS_EXPORTER: otlp + OTEL_METRICS_EXPORTER: otlp + OTEL_EXPORTER_OTLP_PROTOCOL: ${{ secrets.OTEL_EXPORTER_OTLP_PROTOCOL }} + OTEL_EXPORTER_OTLP_ENDPOINT: ${{ secrets.OTEL_EXPORTER_OTLP_ENDPOINT }} + OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} - name: Run tests run: bun run test @@ -139,6 +148,15 @@ jobs: - name: Build platform binaries run: bun script/build.ts --install-native-variants --skip-sdk-build working-directory: sdk/apps/cli + env: + TELEMETRY_SERVICE_API_KEY: ${{ secrets.TELEMETRY_SERVICE_API_KEY }} + ERROR_SERVICE_API_KEY: ${{ secrets.ERROR_SERVICE_API_KEY }} + OTEL_TELEMETRY_ENABLED: ${{ secrets.OTEL_TELEMETRY_ENABLED }} + OTEL_LOGS_EXPORTER: otlp + OTEL_METRICS_EXPORTER: otlp + OTEL_EXPORTER_OTLP_PROTOCOL: ${{ secrets.OTEL_EXPORTER_OTLP_PROTOCOL }} + OTEL_EXPORTER_OTLP_ENDPOINT: ${{ secrets.OTEL_EXPORTER_OTLP_ENDPOINT }} + OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} - name: Verify build output env: @@ -313,6 +331,15 @@ jobs: - name: Build SDK packages if: steps.check_commits.outputs.skip != 'true' run: bun run build:sdk + env: + TELEMETRY_SERVICE_API_KEY: ${{ secrets.TELEMETRY_SERVICE_API_KEY }} + ERROR_SERVICE_API_KEY: ${{ secrets.ERROR_SERVICE_API_KEY }} + OTEL_TELEMETRY_ENABLED: ${{ secrets.OTEL_TELEMETRY_ENABLED }} + OTEL_LOGS_EXPORTER: otlp + OTEL_METRICS_EXPORTER: otlp + OTEL_EXPORTER_OTLP_PROTOCOL: ${{ secrets.OTEL_EXPORTER_OTLP_PROTOCOL }} + OTEL_EXPORTER_OTLP_ENDPOINT: ${{ secrets.OTEL_EXPORTER_OTLP_ENDPOINT }} + OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} - name: Run tests if: steps.check_commits.outputs.skip != 'true' @@ -349,6 +376,15 @@ jobs: if: steps.check_commits.outputs.skip != 'true' run: bun script/build.ts --install-native-variants --skip-sdk-build working-directory: sdk/apps/cli + env: + TELEMETRY_SERVICE_API_KEY: ${{ secrets.TELEMETRY_SERVICE_API_KEY }} + ERROR_SERVICE_API_KEY: ${{ secrets.ERROR_SERVICE_API_KEY }} + OTEL_TELEMETRY_ENABLED: ${{ secrets.OTEL_TELEMETRY_ENABLED }} + OTEL_LOGS_EXPORTER: otlp + OTEL_METRICS_EXPORTER: otlp + OTEL_EXPORTER_OTLP_PROTOCOL: ${{ secrets.OTEL_EXPORTER_OTLP_PROTOCOL }} + OTEL_EXPORTER_OTLP_ENDPOINT: ${{ secrets.OTEL_EXPORTER_OTLP_ENDPOINT }} + OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.OTEL_EXPORTER_OTLP_HEADERS }} - name: Verify build output if: steps.check_commits.outputs.skip != 'true' diff --git a/sdk/apps/cli/script/build.ts b/sdk/apps/cli/script/build.ts index 75a55c7ced..88470a173e 100644 --- a/sdk/apps/cli/script/build.ts +++ b/sdk/apps/cli/script/build.ts @@ -13,6 +13,30 @@ const cliDir = resolve(import.meta.dir, ".."); const rootDir = resolve(cliDir, "../.."); process.chdir(cliDir); +// Telemetry / OTEL environment variables that should be baked into the +// compiled binary at build time. Mirrors the list of secrets injected by the +// `cli-publish` GitHub Actions workflow. These are inlined via Bun's `define` +// so the CLI ships with the production telemetry configuration without +// requiring the end user to set any env vars. +const BUILD_TIME_INLINED_ENV_VARS = [ + "TELEMETRY_SERVICE_API_KEY", + "ERROR_SERVICE_API_KEY", + "OTEL_TELEMETRY_ENABLED", + "OTEL_LOGS_EXPORTER", + "OTEL_METRICS_EXPORTER", + "OTEL_EXPORTER_OTLP_PROTOCOL", + "OTEL_EXPORTER_OTLP_ENDPOINT", + "OTEL_EXPORTER_OTLP_HEADERS", +] as const; + +function buildInlinedEnvDefines(): Record { + const defines: Record = {}; + for (const name of BUILD_TIME_INLINED_ENV_VARS) { + defines[`process.env.${name}`] = JSON.stringify(process.env[name] ?? ""); + } + return defines; +} + const pkg = JSON.parse(readFileSync(join(cliDir, "package.json"), "utf-8")); const version: string = pkg.version; const repository: unknown = pkg.repository; @@ -128,6 +152,9 @@ async function buildCompiledBinary(input: { external: ["@anthropic-ai/vertex-sdk"], define: { OTUI_TREE_SITTER_WORKER_PATH: bunfsRoot + parserWorkerPath, + // Inline telemetry/OTEL env vars at build time so the compiled + // binary ships with production telemetry configuration baked in. + ...buildInlinedEnvDefines(), }, throw: false, });