mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 21:01:08 +02:00
Implement rock-solid automated testing infrastructure for mana-core-auth with daily execution, notifications, and comprehensive monitoring. Test Suite Improvements: - Fix all 36 failing BetterAuthService tests (missing service mocks) - Add 21 JwtAuthGuard tests achieving 100% statement coverage - Create silentError helper to suppress intentional error logs - Fix Todo backend TaskService test structure - Add jose mock for JWT testing - Configure jest collectCoverageFrom for mana-core-auth GitHub Actions Workflow: - Daily automated test execution (2 AM UTC + manual trigger) - Matrix parallelization across 6 backend services - PostgreSQL and Redis service containers - Coverage enforcement (80% threshold) - Multi-channel notifications (Discord, Slack, GitHub Issues) - Support for success notifications (opt-in) Test Infrastructure: - Coverage aggregation across multiple services - Flaky test detection with 30-run history tracking - Performance metrics tracking with regression detection - Test data seeding and cleanup scripts - Comprehensive test reporting with formatted metrics Documentation: - TESTING_GUIDE.md (4000+ words) - Complete testing documentation - AUTOMATED_TESTING_SYSTEM.md - System architecture and workflows - DISCORD_NOTIFICATIONS_SETUP.md - Discord webhook setup guide - TESTING_DEPLOYMENT_CHECKLIST.md - Pre-deployment verification - TESTING_QUICK_REFERENCE.md - Quick command reference Final Result: - 180/180 tests passing (100% pass rate) - Zero console errors in test output - Automated daily testing with rich notifications - Production-ready test infrastructure
176 lines
12 KiB
JSON
176 lines
12 KiB
JSON
{
|
|
"name": "manacore-monorepo",
|
|
"version": "1.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"description": "Manacore Monorepo containing manacore, manadeck, picture, chat, zitare, and presi",
|
|
"scripts": {
|
|
"dev": "turbo run dev",
|
|
"build": "turbo run build",
|
|
"test": "turbo run test",
|
|
"test:cov": "./scripts/run-tests-with-coverage.sh",
|
|
"test:seed": "./scripts/test-data/seed-test-data.sh",
|
|
"test:cleanup": "./scripts/test-data/cleanup-test-data.sh",
|
|
"lint": "turbo run lint",
|
|
"lint:root": "eslint . --cache",
|
|
"lint:fix": "eslint . --fix --cache",
|
|
"type-check": "turbo run type-check --filter='./apps/**' --filter='./packages/**' --filter='./services/**'",
|
|
"type-check:all": "turbo run type-check",
|
|
"clean": "turbo run clean",
|
|
"format": "prettier --config .prettierrc.json --write \"**/*.{ts,tsx,js,jsx,json,md,svelte,astro}\"",
|
|
"format:check": "prettier --config .prettierrc.json --check \"**/*.{ts,tsx,js,jsx,json,md,svelte,astro}\"",
|
|
"validate:monorepo": "node scripts/validate-monorepo.mjs",
|
|
"validate:runtime-config": "node scripts/validate-runtime-config.mjs",
|
|
"svelte-check": "./scripts/svelte-check-staged.sh",
|
|
"build:check": "./scripts/build-check-staged.sh",
|
|
"build:check:all": "./scripts/build-check-staged.sh --all",
|
|
"setup:env": "node scripts/generate-env.mjs",
|
|
"setup:db": "./scripts/setup-databases.sh",
|
|
"setup:db:chat": "./scripts/setup-databases.sh chat",
|
|
"setup:db:auth": "./scripts/setup-databases.sh auth",
|
|
"build:packages": "pnpm --filter '@manacore/*' build",
|
|
"postinstall": "node scripts/generate-env.mjs || true && pnpm run build:packages || true",
|
|
"manacore:dev": "turbo run dev --filter=manacore...",
|
|
"manadeck:dev": "turbo run dev --filter=manadeck...",
|
|
"picture:dev": "turbo run dev --filter=picture...",
|
|
"chat:dev": "turbo run dev --filter=chat...",
|
|
"dev:manacore:web": "pnpm --filter @manacore/web dev",
|
|
"dev:manacore:landing": "pnpm --filter @manacore/landing dev",
|
|
"dev:manacore:mobile": "pnpm --filter @manacore/mobile dev",
|
|
"dev:manacore:app": "pnpm --filter @manacore/web dev",
|
|
"dev:manacore:backends": "concurrently -n auth,chat,calendar,contacts,todo,picture,manadeck -c blue,green,yellow,magenta,cyan,white,gray \"pnpm dev:auth\" \"pnpm dev:chat:backend\" \"pnpm dev:calendar:backend\" \"pnpm dev:contacts:backend\" \"pnpm dev:todo:backend\" \"pnpm dev:picture:backend\" \"pnpm dev:manadeck:backend\"",
|
|
"dev:manacore:full": "concurrently -n web,backends -c cyan,yellow \"pnpm dev:manacore:web\" \"pnpm dev:manacore:backends\"",
|
|
"dev:manadeck:web": "pnpm --filter @manadeck/web dev",
|
|
"dev:manadeck:landing": "pnpm --filter @manadeck/landing dev",
|
|
"dev:manadeck:backend": "pnpm --filter @manadeck/backend dev",
|
|
"dev:manadeck:mobile": "pnpm --filter @manadeck/mobile dev",
|
|
"dev:manadeck:app": "turbo run dev --filter=@manadeck/web --filter=@manadeck/backend",
|
|
"dev:picture:web": "pnpm --filter @picture/web dev",
|
|
"dev:picture:landing": "pnpm --filter @picture/landing dev",
|
|
"dev:picture:mobile": "pnpm --filter @picture/mobile dev",
|
|
"dev:picture:backend": "pnpm --filter @picture/backend dev",
|
|
"dev:picture:app": "turbo run dev --filter=@picture/web --filter=@picture/backend",
|
|
"dev:picture:full": "./scripts/setup-databases.sh picture && ./scripts/setup-databases.sh auth && concurrently -n auth,backend,web -c blue,green,cyan \"pnpm dev:auth\" \"pnpm dev:picture:backend\" \"pnpm dev:picture:web\"",
|
|
"dev:chat:mobile": "pnpm --filter @chat/mobile dev",
|
|
"dev:chat:web": "pnpm --filter @chat/web dev",
|
|
"dev:chat:landing": "pnpm --filter @chat/landing dev",
|
|
"dev:chat:backend": "pnpm --filter @chat/backend start:dev",
|
|
"dev:chat:app": "turbo run dev --filter=@chat/web --filter=@chat/backend",
|
|
"dev:auth": "pnpm --filter mana-core-auth start:dev",
|
|
"dev:chat:full": "./scripts/setup-databases.sh chat && ./scripts/setup-databases.sh auth && concurrently -n auth,backend,web -c blue,green,cyan \"pnpm dev:auth\" \"pnpm dev:chat:backend\" \"pnpm dev:chat:web\"",
|
|
"zitare:dev": "turbo run dev --filter=zitare...",
|
|
"dev:zitare:mobile": "pnpm --filter @zitare/mobile dev",
|
|
"dev:zitare:web": "pnpm --filter @zitare/web dev",
|
|
"dev:zitare:landing": "pnpm --filter @zitare/landing dev",
|
|
"dev:zitare:backend": "pnpm --filter @zitare/backend dev",
|
|
"dev:zitare:app": "turbo run dev --filter=@zitare/web --filter=@zitare/backend",
|
|
"dev:zitare:full": "./scripts/setup-databases.sh zitare && ./scripts/setup-databases.sh auth && concurrently -n auth,backend,web -c blue,green,cyan \"pnpm dev:auth\" \"pnpm dev:zitare:backend\" \"pnpm dev:zitare:web\"",
|
|
"contacts:dev": "turbo run dev --filter=contacts...",
|
|
"dev:contacts:mobile": "pnpm --filter @contacts/mobile dev",
|
|
"dev:contacts:web": "pnpm --filter @contacts/web dev",
|
|
"dev:contacts:landing": "pnpm --filter @contacts/landing dev",
|
|
"dev:contacts:backend": "pnpm --filter @contacts/backend dev",
|
|
"dev:contacts:app": "turbo run dev --filter=@contacts/web --filter=@contacts/backend",
|
|
"dev:contacts:full": "./scripts/setup-databases.sh contacts && ./scripts/setup-databases.sh auth && pnpm contacts:db:seed && concurrently -n auth,backend,web -c blue,green,cyan \"pnpm dev:auth\" \"pnpm dev:contacts:backend\" \"pnpm dev:contacts:web\"",
|
|
"contacts:db:push": "pnpm --filter @contacts/backend db:push",
|
|
"contacts:db:studio": "pnpm --filter @contacts/backend db:studio",
|
|
"contacts:db:seed": "pnpm --filter @contacts/backend db:seed",
|
|
"calendar:dev": "turbo run dev --filter=calendar...",
|
|
"dev:calendar:mobile": "pnpm --filter @calendar/mobile dev",
|
|
"dev:calendar:web": "pnpm --filter @calendar/web dev",
|
|
"dev:calendar:landing": "pnpm --filter @calendar/landing dev",
|
|
"dev:calendar:backend": "pnpm --filter @calendar/backend dev",
|
|
"dev:calendar:app": "turbo run dev --filter=@calendar/web --filter=@calendar/backend",
|
|
"dev:calendar:full": "./scripts/setup-databases.sh calendar && ./scripts/setup-databases.sh auth && concurrently -n auth,backend,web -c blue,green,cyan \"pnpm dev:auth\" \"pnpm dev:calendar:backend\" \"pnpm dev:calendar:web\"",
|
|
"calendar:db:push": "pnpm --filter @calendar/backend db:push",
|
|
"calendar:db:studio": "pnpm --filter @calendar/backend db:studio",
|
|
"calendar:db:seed": "pnpm --filter @calendar/backend db:seed",
|
|
"todo:dev": "turbo run dev --filter=todo...",
|
|
"dev:todo:web": "pnpm --filter @todo/web dev",
|
|
"dev:todo:landing": "pnpm --filter @todo/landing dev",
|
|
"dev:todo:backend": "pnpm --filter @todo/backend dev",
|
|
"dev:todo:app": "turbo run dev --filter=@todo/web --filter=@todo/backend",
|
|
"dev:todo:full": "./scripts/setup-databases.sh todo && ./scripts/setup-databases.sh auth && concurrently -n auth,backend,web -c blue,green,cyan \"pnpm dev:auth\" \"pnpm dev:todo:backend\" \"pnpm dev:todo:web\"",
|
|
"todo:db:push": "pnpm --filter @todo/backend db:push",
|
|
"todo:db:studio": "pnpm --filter @todo/backend db:studio",
|
|
"todo:db:seed": "pnpm --filter @todo/backend db:seed",
|
|
"dev:tags-test": "./scripts/setup-databases.sh todo && ./scripts/setup-databases.sh calendar && ./scripts/setup-databases.sh contacts && ./scripts/setup-databases.sh auth && concurrently -n auth,todo-be,todo-web,cal-be,cal-web,con-be,con-web -c blue,green,cyan,yellow,magenta,red,white \"pnpm dev:auth\" \"pnpm dev:todo:backend\" \"pnpm dev:todo:web\" \"pnpm dev:calendar:backend\" \"pnpm dev:calendar:web\" \"pnpm dev:contacts:backend\" \"pnpm dev:contacts:web\"",
|
|
"voxel-lava:dev": "turbo run dev --filter=@voxel-lava/web --filter=@voxel-lava/backend",
|
|
"dev:voxel-lava:web": "pnpm --filter @voxel-lava/web dev",
|
|
"dev:voxel-lava:backend": "pnpm --filter @voxel-lava/backend start:dev",
|
|
"dev:voxel-lava:app": "turbo run dev --filter=@voxel-lava/web --filter=@voxel-lava/backend",
|
|
"voxel-lava:db:push": "pnpm --filter @voxel-lava/backend db:push",
|
|
"voxel-lava:db:studio": "pnpm --filter @voxel-lava/backend db:studio",
|
|
"mana-games:dev": "turbo run dev --filter=mana-games...",
|
|
"dev:mana-games:web": "pnpm --filter @mana-games/web dev",
|
|
"dev:mana-games:backend": "pnpm --filter @mana-games/backend dev",
|
|
"dev:mana-games:app": "turbo run dev --filter=@mana-games/web --filter=@mana-games/backend",
|
|
"figgos:dev": "turbo run dev --filter=figgos...",
|
|
"dev:figgos:mobile": "pnpm --filter @figgos/mobile dev",
|
|
"dev:figgos:web": "pnpm --filter @figgos/web dev",
|
|
"dev:figgos:backend": "pnpm --filter @figgos/backend dev",
|
|
"dev:figgos:app": "turbo run dev --filter=@figgos/web --filter=@figgos/backend",
|
|
"dev:figgos:ios": "pnpm --filter @figgos/mobile ios",
|
|
"dev:figgos:android": "pnpm --filter @figgos/mobile android",
|
|
"figgos:db:push": "pnpm --filter @figgos/backend db:push",
|
|
"figgos:db:studio": "pnpm --filter @figgos/backend db:studio",
|
|
"worldream:dev": "turbo run dev --filter=worldream...",
|
|
"dev:worldream:web": "pnpm --filter @worldream/web dev",
|
|
"context:dev": "turbo run dev --filter=context...",
|
|
"dev:context:mobile": "pnpm --filter @context/mobile dev",
|
|
"docker:up": "docker compose -f docker-compose.dev.yml --env-file .env.development up -d postgres redis minio minio-init",
|
|
"docker:up:infra": "docker compose -f docker-compose.dev.yml --env-file .env.development up -d postgres redis minio minio-init",
|
|
"docker:up:db": "docker compose -f docker-compose.dev.yml --env-file .env.development up -d postgres redis",
|
|
"docker:up:auth": "docker compose -f docker-compose.dev.yml --env-file .env.development --profile auth up -d",
|
|
"docker:up:chat": "docker compose -f docker-compose.dev.yml --env-file .env.development --profile chat up -d",
|
|
"docker:up:all": "docker compose -f docker-compose.dev.yml --env-file .env.development --profile all up -d",
|
|
"docker:down": "docker compose -f docker-compose.dev.yml --env-file .env.development --profile all down",
|
|
"docker:logs": "docker compose -f docker-compose.dev.yml --env-file .env.development logs -f",
|
|
"docker:logs:auth": "docker compose -f docker-compose.dev.yml --env-file .env.development logs -f mana-core-auth",
|
|
"docker:logs:chat": "docker compose -f docker-compose.dev.yml --env-file .env.development logs -f chat-backend",
|
|
"docker:ps": "docker compose -f docker-compose.dev.yml --env-file .env.development ps -a",
|
|
"docker:clean": "docker compose -f docker-compose.dev.yml --env-file .env.development --profile all down -v",
|
|
"deploy:landing:chat": "pnpm --filter @chat/landing build && npx wrangler pages deploy apps/chat/apps/landing/dist --project-name=chat-landing",
|
|
"deploy:landing:picture": "pnpm --filter @picture/landing build && npx wrangler pages deploy apps/picture/apps/landing/dist --project-name=picture-landing",
|
|
"deploy:landing:manacore": "pnpm --filter @manacore/landing build && npx wrangler pages deploy apps/manacore/apps/landing/dist --project-name=manacore-landing",
|
|
"deploy:landing:manadeck": "pnpm --filter @manadeck/landing build && npx wrangler pages deploy apps/manadeck/apps/landing/dist --project-name=manadeck-landing",
|
|
"deploy:landing:all": "pnpm deploy:landing:chat && pnpm deploy:landing:picture && pnpm deploy:landing:manacore && pnpm deploy:landing:manadeck",
|
|
"cf:login": "npx wrangler login",
|
|
"cf:projects:list": "npx wrangler pages project list",
|
|
"cf:projects:create": "echo 'Creating Cloudflare Pages projects...' && npx wrangler pages project create chat-landing --production-branch=main && npx wrangler pages project create picture-landing --production-branch=main && npx wrangler pages project create manacore-landing --production-branch=main && npx wrangler pages project create manadeck-landing --production-branch=main && npx wrangler pages project create zitare-landing --production-branch=main",
|
|
"prepare": "husky"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9.39.1",
|
|
"concurrently": "^9.2.0",
|
|
"eslint": "^9.39.1",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"eslint-plugin-prettier": "^5.5.4",
|
|
"globals": "^16.5.0",
|
|
"husky": "^9.1.7",
|
|
"lint-staged": "^16.2.7",
|
|
"prettier": "^3.3.3",
|
|
"prettier-plugin-astro": "^0.14.1",
|
|
"prettier-plugin-svelte": "^3.4.0",
|
|
"turbo": "^2.3.0",
|
|
"typescript": "^5.9.3",
|
|
"typescript-eslint": "^8.48.1",
|
|
"wrangler": "^4.51.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=18.0.0"
|
|
},
|
|
"packageManager": "pnpm@9.15.0",
|
|
"pnpm": {
|
|
"peerDependencyRules": {
|
|
"allowedVersions": {
|
|
"@manacore/nestjs-integration>@nestjs/common": "^11.0.0",
|
|
"@manacore/nestjs-integration>@nestjs/core": "^11.0.0",
|
|
"react-native>react": ">=18.0.0",
|
|
"react-native>@types/react": ">=18.0.0",
|
|
"@sveltejs/vite-plugin-svelte>vite": ">=6.0.0",
|
|
"@sveltejs/vite-plugin-svelte-inspector>vite": ">=6.0.0"
|
|
}
|
|
}
|
|
}
|
|
}
|