diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 8e79ff7..184d828 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -25,7 +25,7 @@ jobs: echo "EMAIL_GRAPHQL=fake@example.com" >> .env echo "NEXTAUTH_SECRET=fakesecret" >> .env echo "BOT_URL=http://localhost:3000" >> .env - echo "REDIS_PASSWORD=fake" > .env + echo "REDIS_PASSWORD=fake" >> .env - name: Set image tags id: vars diff --git a/apps/bot/Dockerfile b/apps/bot/Dockerfile index b581437..eaaef82 100644 --- a/apps/bot/Dockerfile +++ b/apps/bot/Dockerfile @@ -11,7 +11,7 @@ ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN apk add --no-cache libc6-compat && \ corepack enable && \ - pnpm install turbo dotenv-cli --global + pnpm install turbo@2.3.2 dotenv-cli --global FROM base AS pruner ARG PROJECT diff --git a/apps/bot/src/bot/context.ts b/apps/bot/src/bot/context.ts index 47816b0..d359f31 100644 --- a/apps/bot/src/bot/context.ts +++ b/apps/bot/src/bot/context.ts @@ -1,4 +1,3 @@ -import { type logger } from '@/utils/logger'; import { type AutoChatActionFlavor } from '@grammyjs/auto-chat-action'; import { type CommandsFlavor } from '@grammyjs/commands'; import { type ConversationFlavor } from '@grammyjs/conversations'; @@ -8,13 +7,7 @@ import { type Context as DefaultContext, type SessionFlavor } from 'grammy'; export type Context = ConversationFlavor< HydrateFlavor< - AutoChatActionFlavor & - CommandsFlavor & - DefaultContext & - I18nFlavor & - SessionFlavor & { - logger: typeof logger; - } + AutoChatActionFlavor & CommandsFlavor & DefaultContext & I18nFlavor & SessionFlavor > >; diff --git a/apps/bot/src/bot/handlers/errors.ts b/apps/bot/src/bot/handlers/errors.ts index 074f660..b3abd02 100644 --- a/apps/bot/src/bot/handlers/errors.ts +++ b/apps/bot/src/bot/handlers/errors.ts @@ -1,6 +1,7 @@ import { type Context } from '../context'; import { getUpdateInfo } from '../helpers/logging'; import { KEYBOARD_REMOVE } from '@/config/keyboards'; +import { logger } from '@/utils/logger'; import { ERRORS } from '@repo/graphql/constants/errors'; import { type ErrorHandler } from 'grammy'; @@ -11,7 +12,7 @@ export const errorHandler: ErrorHandler = async (error) => { await ctx.reply(ctx.t(text), { ...KEYBOARD_REMOVE, parse_mode: 'HTML' }); - ctx.logger.error({ + logger.error({ err: error.error, update: getUpdateInfo(ctx), }); diff --git a/apps/bot/src/bot/helpers/logging.ts b/apps/bot/src/bot/helpers/logging.ts index dd7a651..c14dbec 100644 --- a/apps/bot/src/bot/helpers/logging.ts +++ b/apps/bot/src/bot/helpers/logging.ts @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import { type Context } from '../context'; +import { logger } from '@/utils/logger'; import { type Update } from '@grammyjs/types'; import { type Middleware } from 'grammy'; @@ -11,7 +12,7 @@ export function getUpdateInfo(context: Context): Omit { export function logHandle(id: string): Middleware { return (context, next) => { - context.logger.info({ + logger.info({ msg: `Handle "${id}"`, ...(id.startsWith('unhandled') ? { update: getUpdateInfo(context) } : {}), }); diff --git a/apps/bot/src/bot/middlewares/update-logger.ts b/apps/bot/src/bot/middlewares/update-logger.ts index c3c6922..33c3207 100644 --- a/apps/bot/src/bot/middlewares/update-logger.ts +++ b/apps/bot/src/bot/middlewares/update-logger.ts @@ -1,12 +1,13 @@ import { type Context } from '@/bot/context'; import { getUpdateInfo } from '@/bot/helpers/logging'; +import { logger } from '@/utils/logger'; import { type Middleware } from 'grammy'; import { performance } from 'node:perf_hooks'; export function updateLogger(): Middleware { return async (ctx, next) => { ctx.api.config.use((previous, method, payload, signal) => { - ctx.logger.debug({ + logger.debug({ method, msg: 'Bot API call', payload, @@ -15,7 +16,7 @@ export function updateLogger(): Middleware { return previous(method, payload, signal); }); - ctx.logger.debug({ + logger.debug({ msg: 'Update received', update: getUpdateInfo(ctx), }); @@ -25,7 +26,7 @@ export function updateLogger(): Middleware { return next(); } finally { const endTime = performance.now(); - ctx.logger.debug({ + logger.debug({ elapsed: endTime - startTime, msg: 'Update processed', }); diff --git a/apps/bot/src/utils/logger.ts b/apps/bot/src/utils/logger.ts index c440158..e1791fa 100644 --- a/apps/bot/src/utils/logger.ts +++ b/apps/bot/src/utils/logger.ts @@ -1,7 +1,7 @@ /* eslint-disable turbo/no-undeclared-env-vars */ import pino from 'pino'; -export const logger = pino({ +const logger = pino({ transport: { level: process.env.NODE_ENV === 'production' ? 'info' : 'debug', options: { @@ -11,3 +11,9 @@ export const logger = pino({ target: 'pino-pretty', }, }); + +logger.info = logger.info.bind(logger); +logger.debug = logger.debug.bind(logger); +logger.error = logger.error.bind(logger); + +export { logger }; diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index eb62d37..c83e7dd 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -11,7 +11,7 @@ ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN apk add --no-cache libc6-compat openssl && \ corepack enable && \ - pnpm install turbo dotenv-cli --global + pnpm install turbo@2.3.2 dotenv-cli --global FROM base AS pruner ARG PROJECT diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 362754a..9f6e8ca 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -34,3 +34,6 @@ services: timeout: 10s retries: 3 start_period: 30s + +volumes: + redis-data: diff --git a/docker-compose.yml b/docker-compose.yml index 827dfb7..018dcdc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: - .env restart: always healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:3000/"] + test: ['CMD', 'curl', '-f', 'http://localhost:3000/'] interval: 10s timeout: 3s retries: 5 @@ -22,7 +22,7 @@ services: - redis networks: - app - + redis: image: redis:8-alpine restart: always @@ -45,6 +45,11 @@ services: timeout: 10s retries: 3 start_period: 30s + networks: + - app + +volumes: + redis-data: networks: app: diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6054bc9..fdc6c6f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,7 +23,7 @@ catalogs: version: 2.2.2 autoprefixer: specifier: ^10.4.20 - version: 10.4.21 + version: 10.4.20 dayjs: specifier: ^1.11.3 version: 1.11.13 @@ -35,7 +35,7 @@ catalogs: version: 9.21.0 graphql: specifier: ^16.9.0 - version: 16.11.0 + version: 16.9.0 husky: specifier: ^9.1.7 version: 9.1.7 @@ -44,13 +44,13 @@ catalogs: version: 9.0.2 lint-staged: specifier: ^15.2.10 - version: 15.5.2 + version: 15.2.10 lucide-react: specifier: ^0.462.0 version: 0.462.0 postcss: specifier: ^8.4.49 - version: 8.5.6 + version: 8.4.49 postcss-load-config: specifier: ^6.0.1 version: 6.0.1 @@ -59,7 +59,7 @@ catalogs: version: 3.6.2 radashi: specifier: ^12.5.1 - version: 12.6.0 + version: 12.5.1 react: specifier: ^19.1.1 version: 19.1.1 @@ -68,19 +68,19 @@ catalogs: version: 19.1.1 tailwindcss: specifier: ^3.4.15 - version: 3.4.17 + version: 3.4.15 typescript: specifier: ^5.7 - version: 5.8.3 + version: 5.7.2 vite-tsconfig-paths: specifier: ^5.1.4 version: 5.1.4 vitest: specifier: ^2.1.8 - version: 2.1.9 + version: 2.1.8 zod: specifier: ^3.24.1 - version: 3.25.71 + version: 3.24.1 importers: