Fix/rc 1 (#89)
* Revert "packages(apps/web): upgrade next@15.5.0" This reverts commit 22e4f72ee6e36834672e44a25acf8a5797dcca8c. * docker-compose: add volumes * Update Dockerfiles to install specific version of turbo (2.3.2) for consistent dependency management * .github\workflows\deploy.yml: remove REDIS_PASSWORD env variable * Update deploy.yml to add REDIS_PASSWORD environment variable for improved configuration management * Reapply "packages(apps/web): upgrade next@15.5.0" This reverts commit bcb9be88dfd1b57d6ce6f47bedca4aa3e8db0eae. * refactor(bot): remove Redis integration from bot configuration - Eliminated Redis instance and related storage client from the bot's configuration, streamlining the setup and reducing dependencies. - Updated bot middleware to enhance performance and maintainability. * Revert "refactor(bot): remove Redis integration from bot configuration" This reverts commit 4fbbccb0a2967af0c92ff19fe337467347d9a91a. * docker compose: format * bot: fix production run (logger problem) * docker-compose: add app network to redis
This commit is contained in:
parent
81fa32c3d2
commit
0934417aaf
2
.github/workflows/deploy.yml
vendored
2
.github/workflows/deploy.yml
vendored
@ -25,7 +25,7 @@ jobs:
|
|||||||
echo "EMAIL_GRAPHQL=fake@example.com" >> .env
|
echo "EMAIL_GRAPHQL=fake@example.com" >> .env
|
||||||
echo "NEXTAUTH_SECRET=fakesecret" >> .env
|
echo "NEXTAUTH_SECRET=fakesecret" >> .env
|
||||||
echo "BOT_URL=http://localhost:3000" >> .env
|
echo "BOT_URL=http://localhost:3000" >> .env
|
||||||
echo "REDIS_PASSWORD=fake" > .env
|
echo "REDIS_PASSWORD=fake" >> .env
|
||||||
|
|
||||||
- name: Set image tags
|
- name: Set image tags
|
||||||
id: vars
|
id: vars
|
||||||
|
|||||||
@ -11,7 +11,7 @@ ENV PNPM_HOME="/pnpm"
|
|||||||
ENV PATH="$PNPM_HOME:$PATH"
|
ENV PATH="$PNPM_HOME:$PATH"
|
||||||
RUN apk add --no-cache libc6-compat && \
|
RUN apk add --no-cache libc6-compat && \
|
||||||
corepack enable && \
|
corepack enable && \
|
||||||
pnpm install turbo dotenv-cli --global
|
pnpm install turbo@2.3.2 dotenv-cli --global
|
||||||
|
|
||||||
FROM base AS pruner
|
FROM base AS pruner
|
||||||
ARG PROJECT
|
ARG PROJECT
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
import { type logger } from '@/utils/logger';
|
|
||||||
import { type AutoChatActionFlavor } from '@grammyjs/auto-chat-action';
|
import { type AutoChatActionFlavor } from '@grammyjs/auto-chat-action';
|
||||||
import { type CommandsFlavor } from '@grammyjs/commands';
|
import { type CommandsFlavor } from '@grammyjs/commands';
|
||||||
import { type ConversationFlavor } from '@grammyjs/conversations';
|
import { type ConversationFlavor } from '@grammyjs/conversations';
|
||||||
@ -8,13 +7,7 @@ import { type Context as DefaultContext, type SessionFlavor } from 'grammy';
|
|||||||
|
|
||||||
export type Context = ConversationFlavor<
|
export type Context = ConversationFlavor<
|
||||||
HydrateFlavor<
|
HydrateFlavor<
|
||||||
AutoChatActionFlavor &
|
AutoChatActionFlavor & CommandsFlavor & DefaultContext & I18nFlavor & SessionFlavor<SessionData>
|
||||||
CommandsFlavor &
|
|
||||||
DefaultContext &
|
|
||||||
I18nFlavor &
|
|
||||||
SessionFlavor<SessionData> & {
|
|
||||||
logger: typeof logger;
|
|
||||||
}
|
|
||||||
>
|
>
|
||||||
>;
|
>;
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import { type Context } from '../context';
|
import { type Context } from '../context';
|
||||||
import { getUpdateInfo } from '../helpers/logging';
|
import { getUpdateInfo } from '../helpers/logging';
|
||||||
import { KEYBOARD_REMOVE } from '@/config/keyboards';
|
import { KEYBOARD_REMOVE } from '@/config/keyboards';
|
||||||
|
import { logger } from '@/utils/logger';
|
||||||
import { ERRORS } from '@repo/graphql/constants/errors';
|
import { ERRORS } from '@repo/graphql/constants/errors';
|
||||||
import { type ErrorHandler } from 'grammy';
|
import { type ErrorHandler } from 'grammy';
|
||||||
|
|
||||||
@ -11,7 +12,7 @@ export const errorHandler: ErrorHandler<Context> = async (error) => {
|
|||||||
|
|
||||||
await ctx.reply(ctx.t(text), { ...KEYBOARD_REMOVE, parse_mode: 'HTML' });
|
await ctx.reply(ctx.t(text), { ...KEYBOARD_REMOVE, parse_mode: 'HTML' });
|
||||||
|
|
||||||
ctx.logger.error({
|
logger.error({
|
||||||
err: error.error,
|
err: error.error,
|
||||||
update: getUpdateInfo(ctx),
|
update: getUpdateInfo(ctx),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||||
import { type Context } from '../context';
|
import { type Context } from '../context';
|
||||||
|
import { logger } from '@/utils/logger';
|
||||||
import { type Update } from '@grammyjs/types';
|
import { type Update } from '@grammyjs/types';
|
||||||
import { type Middleware } from 'grammy';
|
import { type Middleware } from 'grammy';
|
||||||
|
|
||||||
@ -11,7 +12,7 @@ export function getUpdateInfo(context: Context): Omit<Update, 'update_id'> {
|
|||||||
|
|
||||||
export function logHandle(id: string): Middleware<Context> {
|
export function logHandle(id: string): Middleware<Context> {
|
||||||
return (context, next) => {
|
return (context, next) => {
|
||||||
context.logger.info({
|
logger.info({
|
||||||
msg: `Handle "${id}"`,
|
msg: `Handle "${id}"`,
|
||||||
...(id.startsWith('unhandled') ? { update: getUpdateInfo(context) } : {}),
|
...(id.startsWith('unhandled') ? { update: getUpdateInfo(context) } : {}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,12 +1,13 @@
|
|||||||
import { type Context } from '@/bot/context';
|
import { type Context } from '@/bot/context';
|
||||||
import { getUpdateInfo } from '@/bot/helpers/logging';
|
import { getUpdateInfo } from '@/bot/helpers/logging';
|
||||||
|
import { logger } from '@/utils/logger';
|
||||||
import { type Middleware } from 'grammy';
|
import { type Middleware } from 'grammy';
|
||||||
import { performance } from 'node:perf_hooks';
|
import { performance } from 'node:perf_hooks';
|
||||||
|
|
||||||
export function updateLogger(): Middleware<Context> {
|
export function updateLogger(): Middleware<Context> {
|
||||||
return async (ctx, next) => {
|
return async (ctx, next) => {
|
||||||
ctx.api.config.use((previous, method, payload, signal) => {
|
ctx.api.config.use((previous, method, payload, signal) => {
|
||||||
ctx.logger.debug({
|
logger.debug({
|
||||||
method,
|
method,
|
||||||
msg: 'Bot API call',
|
msg: 'Bot API call',
|
||||||
payload,
|
payload,
|
||||||
@ -15,7 +16,7 @@ export function updateLogger(): Middleware<Context> {
|
|||||||
return previous(method, payload, signal);
|
return previous(method, payload, signal);
|
||||||
});
|
});
|
||||||
|
|
||||||
ctx.logger.debug({
|
logger.debug({
|
||||||
msg: 'Update received',
|
msg: 'Update received',
|
||||||
update: getUpdateInfo(ctx),
|
update: getUpdateInfo(ctx),
|
||||||
});
|
});
|
||||||
@ -25,7 +26,7 @@ export function updateLogger(): Middleware<Context> {
|
|||||||
return next();
|
return next();
|
||||||
} finally {
|
} finally {
|
||||||
const endTime = performance.now();
|
const endTime = performance.now();
|
||||||
ctx.logger.debug({
|
logger.debug({
|
||||||
elapsed: endTime - startTime,
|
elapsed: endTime - startTime,
|
||||||
msg: 'Update processed',
|
msg: 'Update processed',
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/* eslint-disable turbo/no-undeclared-env-vars */
|
/* eslint-disable turbo/no-undeclared-env-vars */
|
||||||
import pino from 'pino';
|
import pino from 'pino';
|
||||||
|
|
||||||
export const logger = pino({
|
const logger = pino({
|
||||||
transport: {
|
transport: {
|
||||||
level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
|
level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
|
||||||
options: {
|
options: {
|
||||||
@ -11,3 +11,9 @@ export const logger = pino({
|
|||||||
target: 'pino-pretty',
|
target: 'pino-pretty',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
logger.info = logger.info.bind(logger);
|
||||||
|
logger.debug = logger.debug.bind(logger);
|
||||||
|
logger.error = logger.error.bind(logger);
|
||||||
|
|
||||||
|
export { logger };
|
||||||
|
|||||||
@ -11,7 +11,7 @@ ENV PNPM_HOME="/pnpm"
|
|||||||
ENV PATH="$PNPM_HOME:$PATH"
|
ENV PATH="$PNPM_HOME:$PATH"
|
||||||
RUN apk add --no-cache libc6-compat openssl && \
|
RUN apk add --no-cache libc6-compat openssl && \
|
||||||
corepack enable && \
|
corepack enable && \
|
||||||
pnpm install turbo dotenv-cli --global
|
pnpm install turbo@2.3.2 dotenv-cli --global
|
||||||
|
|
||||||
FROM base AS pruner
|
FROM base AS pruner
|
||||||
ARG PROJECT
|
ARG PROJECT
|
||||||
|
|||||||
@ -34,3 +34,6 @@ services:
|
|||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 3
|
retries: 3
|
||||||
start_period: 30s
|
start_period: 30s
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
redis-data:
|
||||||
|
|||||||
@ -5,7 +5,7 @@ services:
|
|||||||
- .env
|
- .env
|
||||||
restart: always
|
restart: always
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:3000/"]
|
test: ['CMD', 'curl', '-f', 'http://localhost:3000/']
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 3s
|
timeout: 3s
|
||||||
retries: 5
|
retries: 5
|
||||||
@ -22,7 +22,7 @@ services:
|
|||||||
- redis
|
- redis
|
||||||
networks:
|
networks:
|
||||||
- app
|
- app
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:8-alpine
|
image: redis:8-alpine
|
||||||
restart: always
|
restart: always
|
||||||
@ -45,6 +45,11 @@ services:
|
|||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 3
|
retries: 3
|
||||||
start_period: 30s
|
start_period: 30s
|
||||||
|
networks:
|
||||||
|
- app
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
redis-data:
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
app:
|
app:
|
||||||
|
|||||||
18
pnpm-lock.yaml
generated
18
pnpm-lock.yaml
generated
@ -23,7 +23,7 @@ catalogs:
|
|||||||
version: 2.2.2
|
version: 2.2.2
|
||||||
autoprefixer:
|
autoprefixer:
|
||||||
specifier: ^10.4.20
|
specifier: ^10.4.20
|
||||||
version: 10.4.21
|
version: 10.4.20
|
||||||
dayjs:
|
dayjs:
|
||||||
specifier: ^1.11.3
|
specifier: ^1.11.3
|
||||||
version: 1.11.13
|
version: 1.11.13
|
||||||
@ -35,7 +35,7 @@ catalogs:
|
|||||||
version: 9.21.0
|
version: 9.21.0
|
||||||
graphql:
|
graphql:
|
||||||
specifier: ^16.9.0
|
specifier: ^16.9.0
|
||||||
version: 16.11.0
|
version: 16.9.0
|
||||||
husky:
|
husky:
|
||||||
specifier: ^9.1.7
|
specifier: ^9.1.7
|
||||||
version: 9.1.7
|
version: 9.1.7
|
||||||
@ -44,13 +44,13 @@ catalogs:
|
|||||||
version: 9.0.2
|
version: 9.0.2
|
||||||
lint-staged:
|
lint-staged:
|
||||||
specifier: ^15.2.10
|
specifier: ^15.2.10
|
||||||
version: 15.5.2
|
version: 15.2.10
|
||||||
lucide-react:
|
lucide-react:
|
||||||
specifier: ^0.462.0
|
specifier: ^0.462.0
|
||||||
version: 0.462.0
|
version: 0.462.0
|
||||||
postcss:
|
postcss:
|
||||||
specifier: ^8.4.49
|
specifier: ^8.4.49
|
||||||
version: 8.5.6
|
version: 8.4.49
|
||||||
postcss-load-config:
|
postcss-load-config:
|
||||||
specifier: ^6.0.1
|
specifier: ^6.0.1
|
||||||
version: 6.0.1
|
version: 6.0.1
|
||||||
@ -59,7 +59,7 @@ catalogs:
|
|||||||
version: 3.6.2
|
version: 3.6.2
|
||||||
radashi:
|
radashi:
|
||||||
specifier: ^12.5.1
|
specifier: ^12.5.1
|
||||||
version: 12.6.0
|
version: 12.5.1
|
||||||
react:
|
react:
|
||||||
specifier: ^19.1.1
|
specifier: ^19.1.1
|
||||||
version: 19.1.1
|
version: 19.1.1
|
||||||
@ -68,19 +68,19 @@ catalogs:
|
|||||||
version: 19.1.1
|
version: 19.1.1
|
||||||
tailwindcss:
|
tailwindcss:
|
||||||
specifier: ^3.4.15
|
specifier: ^3.4.15
|
||||||
version: 3.4.17
|
version: 3.4.15
|
||||||
typescript:
|
typescript:
|
||||||
specifier: ^5.7
|
specifier: ^5.7
|
||||||
version: 5.8.3
|
version: 5.7.2
|
||||||
vite-tsconfig-paths:
|
vite-tsconfig-paths:
|
||||||
specifier: ^5.1.4
|
specifier: ^5.1.4
|
||||||
version: 5.1.4
|
version: 5.1.4
|
||||||
vitest:
|
vitest:
|
||||||
specifier: ^2.1.8
|
specifier: ^2.1.8
|
||||||
version: 2.1.9
|
version: 2.1.8
|
||||||
zod:
|
zod:
|
||||||
specifier: ^3.24.1
|
specifier: ^3.24.1
|
||||||
version: 3.25.71
|
version: 3.24.1
|
||||||
|
|
||||||
importers:
|
importers:
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user