mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-02-10 06:45:28 -05:00
<!-- Clearly explain the need for these changes: --> Sentry was not being enabled in dev/prod deployments because environment variables were being incorrectly overwritten during the Docker build process. ### Changes 🏗️ - Fixed Dockerfile environment variable merging logic to prevent `.env.default` from overwriting `.env.production` values - Added `NODE_ENV=production` to build stage to ensure Next.js looks for production env files - Updated env file merging to only run when not in CI/CD (when `.env.production` doesn't exist) - When `.env.production` exists (CI/CD), now merges defaults with production values properly ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [ ] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [ ] Verify local Docker builds still work with `docker compose up` - [ ] Verify dev deployment has `NEXT_PUBLIC_APP_ENV=dev` in built JavaScript - [ ] Verify prod deployment has `NEXT_PUBLIC_APP_ENV=prod` in built JavaScript - [ ] Verify Sentry is enabled in dev/prod deployments (`isProdOrDev=true`) #### For configuration changes: - [x] `.env.default` is updated or already compatible with my changes - [x] `docker-compose.yml` is updated or already compatible with my changes - [x] I have included a list of my configuration changes in the PR description (under **Changes**) ### Technical Details **Root Cause:** 1. CI/CD workflow creates `.env.production` with correct values (e.g., `NEXT_PUBLIC_APP_ENV=dev`) 2. Dockerfile's env merging logic always created `.env` from `.env.default` 3. Next.js loads `.env.production` first, then `.env` second 4. Since `.env` is loaded after `.env.production`, it overwrites the values 5. `.env.default` has `NEXT_PUBLIC_APP_ENV=local`, causing `getAppEnv()` to return "local" instead of "dev"/"prod" 6. This made `isProdOrDev` evaluate to `false`, disabling Sentry **Solution:** The Dockerfile now checks if `.env.production` exists: - If yes (CI/CD): Merges `.env.default` + `.env.production` → `.env.production` (production values take precedence) - If no (local): Merges `.env.default` + `.env` → `.env` (user values take precedence) This ensures production deployments get the correct environment variables while preserving local development workflow. 🤖 Description generated + Investigation assisted with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
// This file configures the initialization of Sentry on the server.
|
|
// The config you add here will be used whenever the server handles a request.
|
|
// https://docs.sentry.io/platforms/javascript/guides/nextjs/
|
|
|
|
import {
|
|
AppEnv,
|
|
BehaveAs,
|
|
getAppEnv,
|
|
getBehaveAs,
|
|
getEnvironmentStr,
|
|
} from "@/lib/utils";
|
|
import * as Sentry from "@sentry/nextjs";
|
|
// import { NodeProfilingIntegration } from "@sentry/profiling-node";
|
|
|
|
const isProdOrDev = [AppEnv.PROD, AppEnv.DEV].includes(getAppEnv());
|
|
|
|
const isCloud = getBehaveAs() === BehaveAs.CLOUD;
|
|
const isDisabled = process.env.DISABLE_SENTRY === "true";
|
|
|
|
const shouldEnable = !isDisabled && isProdOrDev && isCloud;
|
|
|
|
Sentry.init({
|
|
dsn: "https://fe4e4aa4a283391808a5da396da20159@o4505260022104064.ingest.us.sentry.io/4507946746380288",
|
|
|
|
environment: getEnvironmentStr(),
|
|
|
|
enabled: shouldEnable,
|
|
|
|
// Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
|
|
tracesSampleRate: 1,
|
|
tracePropagationTargets: [
|
|
"localhost",
|
|
"localhost:8006",
|
|
/^https:\/\/dev\-builder\.agpt\.co\/api/,
|
|
/^https:\/\/.*\.agpt\.co\/api/,
|
|
],
|
|
|
|
// Setting this option to true will print useful information to the console while you're setting up Sentry.
|
|
debug: false,
|
|
|
|
// Integrations
|
|
integrations: [
|
|
Sentry.anrIntegration(),
|
|
// NodeProfilingIntegration,
|
|
// Sentry.fsIntegration(),
|
|
],
|
|
|
|
enableLogs: true,
|
|
});
|