Files
cline/scripts/build-npm-package.sh
T
Daniel Steigman e9eb7ae179 fix(cli): Add telemetry settings support to Go host bridge (#6906)
* build: add npm package build script with telemetry injection

Add a new build script that automates the NPM package creation process with proper telemetry key injection. The script:

- Validates required environment variables (TELEMETRY_SERVICE_API_KEY, ERROR_SERVICE_API_KEY)
- Verifies Node.js can access environment variables
- Builds Go CLI binaries for all platforms
- Compiles standalone package with esbuild
- Verifies telemetry keys are properly injected into compiled code
- Provides colored output and detailed error messages

Added npm script `build:npm` to package.json for easy invocation.

This ensures consistent builds with telemetry properly configured for production deployments.

* feat(hostbridge): add telemetry settings support for CLI mode

Add GetTelemetrySettings and SubscribeToTelemetrySettings methods to EnvService to handle telemetry configuration in CLI mode.

- GetTelemetrySettings retrieves telemetry status from POSTHOG_TELEMETRY_ENABLED environment variable
- SubscribeToTelemetrySettings provides a stream for telemetry setting updates, sending initial state and keeping stream open
- In CLI mode, telemetry settings are static and determined by environment variable at startup

This enables proper telemetry control and monitoring in CLI environments.
2025-10-15 19:13:39 -07:00

155 lines
5.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Script to build the Cline NPM package with telemetry keys injected
# This script ensures all environment variables are properly set and builds are successful
set -e # Exit on error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Required environment variables
REQUIRED_VARS=(
"TELEMETRY_SERVICE_API_KEY"
"ERROR_SERVICE_API_KEY"
)
# Optional but recommended environment variables
OPTIONAL_VARS=(
"CLINE_ENVIRONMENT"
"POSTHOG_TELEMETRY_ENABLED"
)
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}Cline NPM Package Build Script${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
# Step 1: Verify required environment variables are set
echo -e "${BLUE}Step 1: Verifying environment variables...${NC}"
MISSING_VARS=()
for VAR in "${REQUIRED_VARS[@]}"; do
if [ -z "${!VAR}" ]; then
MISSING_VARS+=("$VAR")
echo -e "${RED}✗ $VAR is not set${NC}"
else
# Show first 10 chars for verification (don't expose full key)
VAR_VALUE="${!VAR}"
echo -e "${GREEN}✓ $VAR is set (${VAR_VALUE:0:10}...)${NC}"
fi
done
# Check optional variables
for VAR in "${OPTIONAL_VARS[@]}"; do
if [ -z "${!VAR}" ]; then
echo -e "${YELLOW}⚠ $VAR is not set (optional)${NC}"
else
echo -e "${GREEN}✓ $VAR is set: ${!VAR}${NC}"
fi
done
if [ ${#MISSING_VARS[@]} -gt 0 ]; then
echo -e "\n${RED}Error: Missing required environment variables:${NC}"
printf '%s\n' "${MISSING_VARS[@]}"
echo -e "\n${YELLOW}Please set these variables before running the build:${NC}"
echo -e "export TELEMETRY_SERVICE_API_KEY=\"your_posthog_api_key\""
echo -e "export ERROR_SERVICE_API_KEY=\"your_error_tracking_api_key\""
exit 1
fi
# Step 2: Verify Node.js can see the environment variables
echo -e "\n${BLUE}Step 2: Verifying Node.js can access environment variables...${NC}"
if node -e "
const telemetryKey = process.env.TELEMETRY_SERVICE_API_KEY;
const errorKey = process.env.ERROR_SERVICE_API_KEY;
if (!telemetryKey || !errorKey) {
console.error('Node.js cannot see environment variables!');
process.exit(1);
}
console.log('✓ TELEMETRY_SERVICE_API_KEY visible to Node.js');
console.log('✓ ERROR_SERVICE_API_KEY visible to Node.js');
"; then
echo -e "${GREEN}✓ Node.js can access environment variables${NC}"
else
echo -e "${RED}✗ Node.js cannot access environment variables${NC}"
echo -e "${YELLOW}Make sure to use 'export' when setting variables:${NC}"
echo -e "export TELEMETRY_SERVICE_API_KEY=\"...\""
exit 1
fi
# Step 3: Clean previous builds
echo -e "\n${BLUE}Step 3: Cleaning previous builds...${NC}"
rm -rf dist-standalone
echo -e "${GREEN}✓ Cleaned dist-standalone directory${NC}"
# Step 4: Build Go CLI binaries for all platforms
echo -e "\n${BLUE}Step 4: Building Go CLI binaries for all platforms...${NC}"
if npm run compile-cli-all-platforms; then
echo -e "${GREEN}✓ Go CLI binaries built successfully${NC}"
# Verify binaries were created
if ls cli/bin/cline-* 1> /dev/null 2>&1; then
echo -e "${GREEN}✓ CLI binaries verified:${NC}"
ls -lh cli/bin/cline-* | awk '{print " " $9 " (" $5 ")"}'
else
echo -e "${RED}✗ No CLI binaries found in cli/bin/${NC}"
exit 1
fi
else
echo -e "${RED}✗ Failed to build Go CLI binaries${NC}"
exit 1
fi
# Step 5: Build the standalone package with esbuild
echo -e "\n${BLUE}Step 5: Building standalone package with esbuild...${NC}"
if npm run compile-standalone-npm; then
echo -e "${GREEN}✓ Standalone package built successfully${NC}"
else
echo -e "${RED}✗ Failed to build standalone package${NC}"
exit 1
fi
# Step 6: Verify telemetry keys were injected
echo -e "\n${BLUE}Step 6: Verifying telemetry keys were injected...${NC}"
# Check if the compiled file still has process.env references (bad)
if grep -q "process.env.TELEMETRY_SERVICE_API_KEY" dist-standalone/cline-core.js; then
echo -e "${RED}✗ Keys were NOT injected! Found 'process.env.TELEMETRY_SERVICE_API_KEY' in compiled code${NC}"
echo -e "${YELLOW}This means the environment variables were not replaced during build${NC}"
exit 1
fi
# Check if actual keys are present (good)
if grep -q "data.cline.bot" dist-standalone/cline-core.js; then
# Extract a snippet of the PostHog config
POSTHOG_CONFIG=$(grep -A 3 "data.cline.bot" dist-standalone/cline-core.js | head -5)
if echo "$POSTHOG_CONFIG" | grep -q "apiKey.*phc_"; then
echo -e "${GREEN}✓ Telemetry keys successfully injected into compiled code${NC}"
else
echo -e "${YELLOW}⚠ PostHog config found but apiKey format unclear${NC}"
echo -e "${YELLOW}Config snippet:${NC}"
echo "$POSTHOG_CONFIG"
fi
else
echo -e "${YELLOW}⚠ Could not verify PostHog config in compiled code${NC}"
fi
# Step 7: Display build summary
echo -e "\n${BLUE}========================================${NC}"
echo -e "${GREEN}Build completed successfully!${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
echo -e "${GREEN}Package location:${NC} dist-standalone/"
echo -e "${GREEN}Package version:${NC} $(node -p "require('./dist-standalone/package.json').version" 2>/dev/null || echo "unknown")"
echo ""
echo -e "${BLUE}Next steps:${NC}"
echo -e "1. Test locally: ${YELLOW}cd dist-standalone && npm link${NC}"
echo -e "2. Verify: ${YELLOW}cline version${NC}"
echo -e "3. Publish: ${YELLOW}cd dist-standalone && npm publish${NC}"
echo ""
echo -e "${YELLOW}Note: Check PostHog dashboard after running cline commands to verify telemetry${NC}"