Skip to content

Commit 1ef7ba8

Browse files
committed
refactor: simplify db credential handling
1 parent 898cf18 commit 1ef7ba8

File tree

6 files changed

+66
-72
lines changed

6 files changed

+66
-72
lines changed

backend/package.json

+18-18
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,28 @@
44
"description": "",
55
"private": true,
66
"scripts": {
7-
"watch": "NODE_ENV=development HOST_MODE=development tsc-watch --build --onSuccess \"node start-dev.js\"",
8-
"watch-yaml-parse-test": "NODE_ENV=development HOST_MODE=development tsc-watch --build --onSuccess \"node dist/yamlParseTest.js\"",
7+
"watch": "tsc-watch --build --onSuccess \"node start-dev.js\"",
8+
"watch-yaml-parse-test": "tsc-watch --build --onSuccess \"node dist/yamlParseTest.js\"",
99
"build": "tsc --build",
10-
"start-bot-dev": "NODE_ENV=development HOST_MODE=development node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9229 dist/index.js",
11-
"start-bot-dev-debug": "NODE_ENV=development DEBUG=true clinic heapprofiler --collect-only --dest .clinic-bot -- node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9229 dist/index.js",
12-
"start-bot-prod": "cross-env NODE_ENV=production node --enable-source-maps --stack-trace-limit=30 dist/index.js",
13-
"start-bot-prod-debug": "NODE_ENV=production DEBUG=true clinic heapprofiler --collect-only --dest .clinic-bot -- node --enable-source-maps --stack-trace-limit=30 dist/index.js",
14-
"watch-bot": "NODE_ENV=development HOST_MODE=development tsc-watch --build --onSuccess \"npm run start-bot-dev\"",
15-
"start-api-dev": "NODE_ENV=development HOST_MODE=development node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9239 dist/api/index.js",
16-
"start-api-dev-debug": "NODE_ENV=development DEBUG=true clinic heapprofiler --collect-only --dest .clinic-api -- node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9239 dist/api/index.js",
17-
"start-api-prod": "cross-env NODE_ENV=production node --enable-source-maps --stack-trace-limit=30 dist/api/index.js",
18-
"start-api-prod-debug": "NODE_ENV=production DEBUG=true clinic heapprofiler --collect-only --dest .clinic-api -- node --enable-source-maps --stack-trace-limit=30 dist/api/index.js",
19-
"watch-api": "NODE_ENV=development HOST_MODE=development tsc-watch --build --onSuccess \"npm run start-api-dev\"",
10+
"start-bot-dev": "node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9229 dist/index.js",
11+
"start-bot-dev-debug": "DEBUG=true clinic heapprofiler --collect-only --dest .clinic-bot -- node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9229 dist/index.js",
12+
"start-bot-prod": "node --enable-source-maps --stack-trace-limit=30 dist/index.js",
13+
"start-bot-prod-debug": "DEBUG=true clinic heapprofiler --collect-only --dest .clinic-bot -- node --enable-source-maps --stack-trace-limit=30 dist/index.js",
14+
"watch-bot": "tsc-watch --build --onSuccess \"npm run start-bot-dev\"",
15+
"start-api-dev": "node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9239 dist/api/index.js",
16+
"start-api-dev-debug": "DEBUG=true clinic heapprofiler --collect-only --dest .clinic-api -- node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9239 dist/api/index.js",
17+
"start-api-prod": "node --enable-source-maps --stack-trace-limit=30 dist/api/index.js",
18+
"start-api-prod-debug": "clinic heapprofiler --collect-only --dest .clinic-api -- node --enable-source-maps --stack-trace-limit=30 dist/api/index.js",
19+
"watch-api": "tsc-watch --build --onSuccess \"npm run start-api-dev\"",
2020
"typeorm": "node ../node_modules/typeorm/cli.js",
2121
"migrate": "npm run typeorm -- migration:run -d dist/data/dataSource.js",
22-
"migrate-prod": "NODE_ENV=production npm run migrate",
23-
"migrate-dev": "(export NODE_ENV=development; export HOST_MODE=development; npm run build && npm run migrate)",
22+
"migrate-prod": "npm run migrate",
23+
"migrate-dev": "npm run build && npm run migrate",
2424
"migrate-rollback": "npm run typeorm -- migration:revert -d dist/data/dataSource.js",
25-
"migrate-rollback-prod": "NODE_ENV=production npm run migrate-rollback",
26-
"migrate-rollback-dev": "(export NODE_ENV=development; export HOST_MODE=development; npm run build && npm run migrate-rollback)",
27-
"validate-active-configs": "NODE_ENV=development HOST_MODE=development node --enable-source-maps dist/validateActiveConfigs.js > ../config-errors.txt",
28-
"export-config-json-schema": "NODE_ENV=development HOST_MODE=development node --enable-source-maps dist/exportSchemas.js > ../config-schema.json",
25+
"migrate-rollback-prod": "npm run migrate-rollback",
26+
"migrate-rollback-dev": "npm run build && npm run migrate-rollback",
27+
"validate-active-configs": "node --enable-source-maps dist/validateActiveConfigs.js > ../config-errors.txt",
28+
"export-config-json-schema": "node --enable-source-maps dist/exportSchemas.js > ../config-schema.json",
2929
"test": "npm run build && npm run run-tests",
3030
"run-tests": "ava",
3131
"test-watch": "tsc-watch --build --onSuccess \"npx ava\""

backend/src/api/start.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { initGuildsAPI } from "./guilds/index";
1010
import { clientError, error, notFound } from "./responses";
1111
import { startBackgroundTasks } from "./tasks";
1212

13-
const apiPathPrefix = env.HOST_MODE === "lightweight" ? env.LIGHTWEIGHT_API_PATH_PREFIX || "" : "/api";
13+
const apiPathPrefix = env.NODE_ENV === "production" ? env.API_PATH_PREFIX ?? "" : "/api";
1414

1515
const app = express();
1616

backend/src/data/dataSource.ts

+16-28
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,22 @@ const entities = path.relative(process.cwd(), path.resolve(backendDir, "dist/dat
1111
const migrations = path.relative(process.cwd(), path.resolve(backendDir, "dist/migrations/*.js"));
1212

1313
type DbOpts = Pick<MysqlConnectionOptions, "host" | "port" | "username" | "password" | "database">;
14-
let dbOpts: DbOpts;
15-
if (env.HOST_MODE === "development") {
16-
dbOpts = {
17-
host: "mysql",
18-
port: 3306,
19-
username: "zeppelin",
20-
password: env.DEVELOPMENT_MYSQL_PASSWORD,
21-
database: "zeppelin",
22-
};
23-
} else if (env.HOST_MODE === "standalone") {
24-
dbOpts = {
25-
host: "mysql",
26-
port: 3306,
27-
username: "zeppelin",
28-
password: env.STANDALONE_MYSQL_PASSWORD,
29-
database: "zeppelin",
30-
};
31-
} else if (env.HOST_MODE === "lightweight") {
32-
dbOpts = {
33-
host: env.LIGHTWEIGHT_DB_HOST,
34-
port: env.LIGHTWEIGHT_DB_PORT,
35-
username: env.LIGHTWEIGHT_DB_USER,
36-
password: env.LIGHTWEIGHT_DB_PASSWORD,
37-
database: env.LIGHTWEIGHT_DB_DATABASE,
38-
};
39-
} else {
40-
throw new Error(`Unknown host mode: ${env.HOST_MODE}`);
41-
}
14+
const dbOpts: DbOpts =
15+
env.NODE_ENV === "production"
16+
? {
17+
host: env.DB_HOST,
18+
port: env.DB_PORT,
19+
username: env.DB_USER,
20+
password: env.DB_PASSWORD,
21+
database: env.DB_DATABASE,
22+
}
23+
: {
24+
host: "mysql",
25+
port: 3306,
26+
username: "zeppelin",
27+
password: env.DEVELOPMENT_MYSQL_PASSWORD,
28+
database: "zeppelin",
29+
};
4230

4331
export const dataSource = new DataSource({
4432
type: "mysql",

backend/src/env.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,22 @@ const envType = z.object({
3838

3939
PHISHERMAN_API_KEY: z.string().optional(),
4040

41-
DEVELOPMENT_MYSQL_PASSWORD: z.string().optional(), // Included here for the DB_PASSWORD default in development
42-
STANDALONE_MYSQL_PASSWORD: z.string().optional(), // Included here for the DB_PASSWORD default in production
41+
DB_HOST: z.string().optional(),
42+
DB_PORT: z.preprocess((v) => Number(v), z.number()).optional(),
43+
DB_USER: z.string().optional(),
44+
DB_PASSWORD: z.string().optional(),
45+
DB_DATABASE: z.string().optional(),
4346

44-
LIGHTWEIGHT_DB_HOST: z.string().optional(),
45-
LIGHTWEIGHT_DB_PORT: z.preprocess((v) => Number(v), z.number()).optional(),
46-
LIGHTWEIGHT_DB_USER: z.string().optional(),
47-
LIGHTWEIGHT_DB_PASSWORD: z.string().optional(),
48-
LIGHTWEIGHT_DB_DATABASE: z.string().optional(),
47+
DEVELOPMENT_MYSQL_PASSWORD: z.string().optional(),
4948

50-
LIGHTWEIGHT_API_PATH_PREFIX: z.string().optional(),
49+
API_PATH_PREFIX: z.string().optional(),
5150

52-
HOST_MODE: z.enum(["development", "standalone", "lightweight"]).optional().default("lightweight"),
5351
DEBUG: z
5452
.string()
5553
.optional()
5654
.transform((str) => str === "true"),
55+
56+
NODE_ENV: z.string().default("development"),
5757
});
5858

5959
let toValidate = { ...process.env };

docker-compose.lightweight.yml

+11-8
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,14 @@ services:
77
args:
88
# Used at compile-time by dashboard
99
API_URL:
10-
environment:
11-
HOST_MODE: lightweight
10+
environment: &env
11+
- NODE_ENV=production
12+
- DB_HOST=${LIGHTWEIGHT_DB_HOST}
13+
- DB_PORT=${LIGHTWEIGHT_DB_PORT}
14+
- DB_USER=${LIGHTWEIGHT_DB_USER}
15+
- DB_PASSWORD=${LIGHTWEIGHT_DB_PASSWORD}
16+
- DB_DATABASE=${LIGHTWEIGHT_DB_DATABASE}
17+
- API_PATH_PREFIX=${LIGHTWEIGHT_API_PATH_PREFIX}
1218
env_file:
1319
- .env
1420
working_dir: /zeppelin/backend
@@ -20,8 +26,7 @@ services:
2026
condition: service_completed_successfully
2127
build: *build
2228
restart: on-failure
23-
environment:
24-
HOST_MODE: lightweight
29+
environment: *env
2530
env_file:
2631
- .env
2732
ports:
@@ -35,8 +40,7 @@ services:
3540
condition: service_completed_successfully
3641
build: *build
3742
restart: on-failure
38-
environment:
39-
HOST_MODE: lightweight
43+
environment: *env
4044
env_file:
4145
- .env
4246
working_dir: /zeppelin/backend
@@ -48,8 +52,7 @@ services:
4852
condition: service_completed_successfully
4953
build: *build
5054
restart: on-failure
51-
environment:
52-
HOST_MODE: lightweight
55+
environment: *env
5356
env_file:
5457
- .env
5558
ports:

docker-compose.standalone.yml

+11-8
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,14 @@ services:
4242
args:
4343
# Used at compile-time by dashboard
4444
API_URL:
45-
environment:
46-
HOST_MODE: standalone
45+
environment: &env
46+
- NODE_ENV=production
47+
- DB_HOST=mysql
48+
- DB_PORT=3306
49+
- DB_USER=zeppelin
50+
- DB_PASSWORD=${STANDALONE_MYSQL_PASSWORD}
51+
- DB_DATABASE=zeppelin
52+
- API_PATH_PREFIX=/api
4753
env_file:
4854
- .env
4955
working_dir: /zeppelin/backend
@@ -55,8 +61,7 @@ services:
5561
condition: service_completed_successfully
5662
build: *build
5763
restart: on-failure
58-
environment:
59-
HOST_MODE: standalone
64+
environment: *env
6065
env_file:
6166
- .env
6267
working_dir: /zeppelin/backend
@@ -68,8 +73,7 @@ services:
6873
condition: service_completed_successfully
6974
build: *build
7075
restart: on-failure
71-
environment:
72-
HOST_MODE: standalone
76+
environment: *env
7377
env_file:
7478
- .env
7579
working_dir: /zeppelin/backend
@@ -81,8 +85,7 @@ services:
8185
condition: service_completed_successfully
8286
build: *build
8387
restart: on-failure
84-
environment:
85-
HOST_MODE: standalone
88+
environment: *env
8689
env_file:
8790
- .env
8891
working_dir: /zeppelin/dashboard

0 commit comments

Comments
 (0)