diff --git a/.gitignore b/.gitignore index 07e6e47..ab69d30 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /node_modules +secrets/*/.env.production diff --git a/packages/backend/docker-compose.yml b/docker-compose.yml similarity index 90% rename from packages/backend/docker-compose.yml rename to docker-compose.yml index fe4332d..9444d54 100644 --- a/packages/backend/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: shm_size: 128mb restart: unless-stopped env_file: - - .env.production.local + - secrets/database/.env.production volumes: - hallmaster-database:/var/lib/postgresql/data:rw ports: @@ -24,13 +24,13 @@ services: condition: service_healthy image: hallmaster-backend build: - context: ../.. + context: . dockerfile: packages/backend/Dockerfile container_name: hallmaster-backend ports: - "3000:3000" env_file: - - .env.production.local + - secrets/backend/.env.production networks: - hallmaster-network volumes: diff --git a/packages/backend/.env.development.local.example b/packages/backend/.env.development.local.example deleted file mode 100644 index 7c67733..0000000 --- a/packages/backend/.env.development.local.example +++ /dev/null @@ -1,17 +0,0 @@ -SHARDS_PER_CLUSTER=3 -DISCORD_BOT_TOKEN_ENV_NAME=DISCORD_BOT_TOKEN -TOTAL_SHARDS_ENV_NAME=TOTAL_SHARDS -SHARD_ID_LIST_ENV_NAME=SHARD_ID_LIST - -POSTGRES_USER=pguser -POSTGRES_PASSWORD=pgpassword -POSTGRES_DB=hallmaster -PGHOST=localhost -DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${PGHOST}:5432/${POSTGRES_DB} - -# python3 -c "import random,string;print(''.join([random.choice(string.hexdigits[:16]) for _ in range(32)]))" -JWT_SECRET=XXX -JWT_EXPIRES_IN=12h # 15m, 1d, ... - -# This enables logging of all incoming requests -# LOG_REQUESTS=true diff --git a/packages/backend/.env.example b/packages/backend/.env.example new file mode 100644 index 0000000..45d6097 --- /dev/null +++ b/packages/backend/.env.example @@ -0,0 +1,10 @@ +DISCORD_BOT_TOKEN_ENV_NAME=DISCORD_BOT_TOKEN + +DATABASE_URL=postgresql://pguser:pgpassword@hallmaster-postgres:5432/hallmaster + +# python3 -c "import random,string;print(''.join([random.choice(string.hexdigits[:16]) for _ in range(32)]))" +JWT_SECRET=XXX +JWT_EXPIRES_IN=12h # 15m, 1d, ... + +# This enables logging of all incoming requests +# LOG_REQUESTS=true diff --git a/packages/backend/.env.production.local.example b/packages/backend/.env.production.local.example deleted file mode 100644 index 669934c..0000000 --- a/packages/backend/.env.production.local.example +++ /dev/null @@ -1,17 +0,0 @@ -SHARDS_PER_CLUSTER=3 -DISCORD_BOT_TOKEN_ENV_NAME=DISCORD_BOT_TOKEN -TOTAL_SHARDS_ENV_NAME=TOTAL_SHARDS -SHARD_ID_LIST_ENV_NAME=SHARD_ID_LIST - -POSTGRES_USER=pguser -POSTGRES_PASSWORD=pgpassword -POSTGRES_DB=hallmaster -PGHOST=hallmaster-postgres -DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${PGHOST}:5432/${POSTGRES_DB} - -# python3 -c "import random,string;print(''.join([random.choice(string.hexdigits[:16]) for _ in range(32)]))" -JWT_SECRET=XXX -JWT_EXPIRES_IN=12h # 15m, 1d, ... - -# This enables logging of all incoming requests -# LOG_REQUESTS=true diff --git a/packages/backend/package.json b/packages/backend/package.json index 72c2cbd..f6170cc 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -10,9 +10,9 @@ }, "scripts": { "build": "nest build", - "start": "dotenv -e .env.development.local -- nest start", - "start:dev": "dotenv -e .env.development.local -- nest start --watch", - "start:debug": "dotenv -e .env.development.local -- nest start --debug --watch", + "start": "dotenv -e .env -- nest start", + "start:dev": "dotenv -e .env -- nest start --watch", + "start:debug": "dotenv -e .env -- nest start --debug --watch", "start:prod": "prisma migrate deploy && node dist/src/main", "lint": "eslint \"src/**/*.ts\"", "lint:fix": "eslint --fix \"src/**/*.ts\"", @@ -23,12 +23,12 @@ "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch", "test:cov": "NODE_OPTIONS=--experimental-vm-modules jest --coverage", "test:debug": "NODE_OPTIONS=--experimental-vm-modules node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "prisma:reset": "dotenv -e .env.development.local -- prisma migrate reset", - "prisma:migrate": "dotenv -e .env.development.local -- prisma migrate dev", + "prisma:reset": "dotenv -e .env -- prisma migrate reset", + "prisma:migrate": "dotenv -e .env -- prisma migrate dev", "prisma:generate": "DATABASE_URL=postgres://null:null@null:5432/null prisma generate", - "prisma:deploy": "dotenv -e .env.development.local -- prisma migrate deploy", - "prisma:studio": "dotenv -e .env.development.local -- prisma studio", - "prisma:format": "dotenv -e .env.development.local -- prisma format" + "prisma:deploy": "dotenv -e .env -- prisma migrate deploy", + "prisma:studio": "dotenv -e .env -- prisma studio", + "prisma:format": "dotenv -e .env -- prisma format" }, "dependencies": { "@fastify/compress": "8.3.1", @@ -64,6 +64,7 @@ "@swc/cli": "0.6.0", "@swc/core": "1.15.11", "@types/jest": "30.0.0", + "@types/mocha": "^10.0.10", "@types/node": "22.19.11", "@types/pg": "8.16.0", "@types/supertest": "6.0.3", diff --git a/packages/backend/src/bot/bot.service.spec.ts b/packages/backend/src/bot/bot.service.spec.ts index 18b0ce2..779cf40 100644 --- a/packages/backend/src/bot/bot.service.spec.ts +++ b/packages/backend/src/bot/bot.service.spec.ts @@ -6,10 +6,9 @@ import { PrismaClientKnownRequestError } from '@prisma/client/runtime/client'; import type { DeepMockProxy } from 'jest-mock-extended'; import { mockDeep } from 'jest-mock-extended'; -import type { CreateBotDto, UpdateBotDto } from 'src/index.dto.js'; - import { ClustersService } from '../clusters/clusters.service.js'; import { DockerService } from '../docker/docker.service.js'; +import type { CreateBotDto, UpdateBotDto } from '../index.dto.js'; import { PrismaService } from '../prisma/prisma.service.js'; import { BotService } from './bot.service.js'; diff --git a/packages/backend/tsconfig.json b/packages/backend/tsconfig.json index 8c091b5..dc6ff8d 100644 --- a/packages/backend/tsconfig.json +++ b/packages/backend/tsconfig.json @@ -28,10 +28,10 @@ "target": "ES2023", "lib": ["ES2023"], + "types": ["jest", "mocha"], "experimentalDecorators": true, "emitDecoratorMetadata": true, - "baseUrl": "./", "incremental": true, "skipLibCheck": true } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3918b1e..bf04974 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -117,6 +117,9 @@ importers: '@types/jest': specifier: 30.0.0 version: 30.0.0 + '@types/mocha': + specifier: ^10.0.10 + version: 10.0.10 '@types/node': specifier: 22.19.11 version: 22.19.11 @@ -2537,6 +2540,9 @@ packages: '@types/methods@1.1.4': resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} + '@types/mocha@10.0.10': + resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} + '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -9203,6 +9209,8 @@ snapshots: '@types/methods@1.1.4': {} + '@types/mocha@10.0.10': {} + '@types/ms@2.1.0': {} '@types/node@12.20.55': {} diff --git a/secrets/backend/.env.production.example b/secrets/backend/.env.production.example new file mode 100644 index 0000000..45d6097 --- /dev/null +++ b/secrets/backend/.env.production.example @@ -0,0 +1,10 @@ +DISCORD_BOT_TOKEN_ENV_NAME=DISCORD_BOT_TOKEN + +DATABASE_URL=postgresql://pguser:pgpassword@hallmaster-postgres:5432/hallmaster + +# python3 -c "import random,string;print(''.join([random.choice(string.hexdigits[:16]) for _ in range(32)]))" +JWT_SECRET=XXX +JWT_EXPIRES_IN=12h # 15m, 1d, ... + +# This enables logging of all incoming requests +# LOG_REQUESTS=true diff --git a/secrets/database/.env.production.example b/secrets/database/.env.production.example new file mode 100644 index 0000000..e47727b --- /dev/null +++ b/secrets/database/.env.production.example @@ -0,0 +1,3 @@ +POSTGRES_USER=pguser +POSTGRES_PASSWORD=pgpassword +POSTGRES_DB=hallmaster