Repository: supabase/supabase
File: scripts/generateLocalEnv.js (JavaScript)

Code before:
const fs = require('fs')
const generatedEnv = require('../keys.json')

/**
 * This script takes the API keys from the local environment, merges them with some predefined variables and saves them
 * to a env.test file in the studio app. This is needed to prepare the studio so that it can be run with the local
 * environment as the backend.
 */

const defaultEnv = {
  // NEXT_ANALYTICS_BACKEND_PROVIDER: 'postgres',
  // SUPABASE_REST_URL: 'http://127.0.0.1:54321/rest/v1/',
  // NEXT_PUBLIC_ENABLE_LOGS: 'false',
  // NEXT_PUBLIC_IS_PLATFORM: 'false',
  PG_META_CRYPTO_KEY: 'SAMPLE_KEY',
  POSTGRES_PASSWORD: 'postgres',
  POSTGRES_HOST: 'db',
  POSTGRES_DB: 'postgres',
  POSTGRES_PORT: '5432',
  SUPABASE_ANON_KEY: '$ANON_KEY',
  SUPABASE_SERVICE_KEY: '$SERVICE_ROLE_KEY',
  SUPABASE_URL: '$API_URL',
  STUDIO_PG_META_URL: '$API_URL/pg',
  SUPABASE_PUBLIC_URL: '$API_URL',
  SENTRY_IGNORE_API_RESOLUTION_ERROR: '1',
  LOGFLARE_URL: 'http://127.0.0.1:54327',
  LOGFLARE_API_KEY: 'api-key',
  NEXT_PUBLIC_SITE_URL: 'http://localhost:8082',
  NEXT_PUBLIC_GOTRUE_URL: '$SUPABASE_PUBLIC_URL/auth/v1',
  NEXT_PUBLIC_HCAPTCHA_SITE_KEY: '10000000-ffff-ffff-ffff-000000000001',
  NEXT_PUBLIC_NODE_ENV: 'test',
}

const environment = { ...generatedEnv, ...defaultEnv }

fs.writeFileSync(
  './apps/studio/.env.test',
  Object.keys(environment)
    .map((key) => `${key}=${environment[key]}`)
    .join('\n')
)


Review comment (suggestion):
FYI in https://github.com/supabase/supabase/pull/39366 I also had to change `LOGFLARE_API_KEY` -> `LOGFLARE_PRIVATE_ACCESS_TOKEN` and upgrade the `supabase` CLI dep.

https://supabase.slack.com/archives/C0161K73J1J/p1759519589826339?thread_ts=1759511078.709489&cid=C0161K73J1J

Code after:
const fs = require('fs')
const generatedEnv = require('../keys.json')

/**
 * This script takes the API keys from the local environment, merges them with some predefined variables and saves them
 * to a env.test file in the studio app. This is needed to prepare the studio so that it can be run with the local
 * environment as the backend.
 */

const defaultEnv = {
  // NEXT_ANALYTICS_BACKEND_PROVIDER: 'postgres',
  // SUPABASE_REST_URL: 'http://127.0.0.1:54321/rest/v1/',
  // NEXT_PUBLIC_ENABLE_LOGS: 'false',
  // NEXT_PUBLIC_IS_PLATFORM: 'false',
  PG_META_CRYPTO_KEY: 'SAMPLE_KEY',
  POSTGRES_PASSWORD: 'postgres',
  POSTGRES_HOST: 'db',
  POSTGRES_DB: 'postgres',
  POSTGRES_PORT: '5432',
  SUPABASE_ANON_KEY: '$ANON_KEY',
  SUPABASE_SERVICE_KEY: '$SERVICE_ROLE_KEY',
  SUPABASE_URL: '$API_URL',
  STUDIO_PG_META_URL: '$API_URL/pg',
  SUPABASE_PUBLIC_URL: '$API_URL',
  SENTRY_IGNORE_API_RESOLUTION_ERROR: '1',
  LOGFLARE_URL: 'http://127.0.0.1:54327',
  LOGFLARE_PRIVATE_ACCESS_TOKEN: 'api-key',
  NEXT_PUBLIC_SITE_URL: 'http://localhost:8082',
  NEXT_PUBLIC_GOTRUE_URL: '$SUPABASE_PUBLIC_URL/auth/v1',
  NEXT_PUBLIC_HCAPTCHA_SITE_KEY: '10000000-ffff-ffff-ffff-000000000001',
  NEXT_PUBLIC_NODE_ENV: 'test',
}

const environment = { ...generatedEnv, ...defaultEnv }

fs.writeFileSync(
  './apps/studio/.env.test',
  Object.keys(environment)
    .map((key) => `${key}=${environment[key]}`)
    .join('\n')
)