From 89b8589c7403ab841554ac81bd447b96a62bf6ec Mon Sep 17 00:00:00 2001 From: Script Raccoon Date: Thu, 9 Jul 2026 16:05:05 +0200 Subject: [PATCH] check that environment variables are up-to-date --- package.json | 3 ++- scripts/env.check.ts | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 scripts/env.check.ts diff --git a/package.json b/package.json index efd2ad791..aac44ed52 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "0.0.1", "type": "module", "scripts": { - "dev": "vite dev", + "dev": "pnpm env:check && vite dev", "dev:remote": "vite dev --mode prod", "dev:host": "vite dev --host", "build": "vite build", @@ -14,6 +14,7 @@ "format": "prettier --write .", "lint": "prettier --check .", "prepare": "husky", + "env:check": "tsx scripts/env.check", "db:shell": "sqlite3 databases/catdat/catdat.db", "db:kill": "rm -rf databases/catdat/catdat.db", "db:setup:catdat": "pnpm db:kill && tsx databases/catdat/scripts/setup.ts", diff --git a/scripts/env.check.ts b/scripts/env.check.ts new file mode 100644 index 000000000..bfe4550be --- /dev/null +++ b/scripts/env.check.ts @@ -0,0 +1,42 @@ +import { readFileSync } from 'node:fs' + +if (process.env.CI) { + process.exit(0) +} + +function get_environment_variables(path: string): string[] { + let file = '' + try { + file = readFileSync(path, 'utf8') + } catch (_) { + console.error(`❌ ${path} does not exist. Please create it first.`) + process.exit(1) + } + + return file + .split('\n') + .map((line) => line.trim()) + .filter((line) => line !== '' && !line.startsWith('#')) + .map((line) => line.split('=', 1)[0].trim()) +} + +const actual_variables = get_environment_variables('.env') +const example_variables = get_environment_variables('.env.example') + +if (!actual_variables.length) { + console.error( + '❌ .env does not contain any environment variables. Please update it from .env.example.' + ) + process.exit(1) +} + +const are_the_same = + actual_variables.length === example_variables.length && + example_variables.every((v) => actual_variables.includes(v)) + +if (are_the_same) { + console.info('✅ Environment variables are up to date.') +} else { + console.error('❌ .env is out of date. Please update it to match .env.example.') + process.exit(1) +}