Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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",
Expand Down
42 changes: 42 additions & 0 deletions scripts/env.check.ts
Original file line number Diff line number Diff line change
@@ -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)
}