Stale Detection: - Detect skills removed/moved from GitHub (3 consecutive 404s threshold) - Hide stale skills from browse/search, show warning banner on detail page - Serve cached files with isStale flag when GitHub returns 404 - Add stale-check crawler command for batch verification - CLI shows warning when installing stale skills from cache Sentry & Error Handling: - Filter browser extension errors and add denyUrls - Anti-inflation measures and sentinel recalibration for curation Claim & Removal: - Enhanced ClaimForm with repo-level removal support - Add repo-removal-request API endpoint with tests - Improved owner page with bilingual content Review Pipeline: - Review version and reviewer tracking in submit API - Source format filter for pending reviews - Updated review tests Other: - Updated i18n strings (en/fa) - BrowseFilters improvements - Dockerfile updates Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
136 lines
3.7 KiB
YAML
136 lines
3.7 KiB
YAML
services:
|
|
# Next.js Web Application
|
|
web:
|
|
build:
|
|
context: .
|
|
dockerfile: apps/web/Dockerfile
|
|
container_name: skillhub-web
|
|
ports:
|
|
- '3000:3000'
|
|
environment:
|
|
DATABASE_URL: postgresql://postgres:postgres@db:5432/skillhub
|
|
REDIS_URL: redis://redis:6379
|
|
MEILI_URL: http://meilisearch:7700
|
|
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-skillhub-dev-key}
|
|
GITHUB_TOKEN: ${GITHUB_TOKEN}
|
|
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-http://localhost:3000}
|
|
# NextAuth (GitHub OAuth)
|
|
GITHUB_CLIENT_ID: ${GITHUB_CLIENT_ID}
|
|
GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET}
|
|
AUTH_SECRET: ${AUTH_SECRET}
|
|
AUTH_URL: ${AUTH_URL:-http://localhost:3000}
|
|
# Email (Resend) - optional for development
|
|
RESEND_API_KEY: ${RESEND_API_KEY:-}
|
|
RESEND_FROM_EMAIL: ${RESEND_FROM_EMAIL:-}
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ['CMD', 'curl', '-sf', 'http://localhost:3000/api/health']
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 30s
|
|
|
|
# GitHub Skills Indexer
|
|
indexer:
|
|
build:
|
|
context: .
|
|
dockerfile: services/indexer/Dockerfile
|
|
container_name: skillhub-indexer
|
|
environment:
|
|
DATABASE_URL: postgresql://postgres:postgres@db:5432/skillhub
|
|
REDIS_URL: redis://redis:6379
|
|
MEILI_URL: http://meilisearch:7700
|
|
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-skillhub-dev-key}
|
|
GITHUB_TOKEN: ${GITHUB_TOKEN}
|
|
GITHUB_TOKENS: ${GITHUB_TOKENS}
|
|
GITHUB_TOKEN_NAMES: ${GITHUB_TOKEN_NAMES}
|
|
INDEXER_CONCURRENCY: ${INDEXER_CONCURRENCY:-5}
|
|
INDEXER_MIN_STARS: ${INDEXER_MIN_STARS:-0}
|
|
# Outreach email sending
|
|
RESEND_API_KEY: ${RESEND_API_KEY:-}
|
|
RESEND_FROM_EMAIL: ${RESEND_FROM_EMAIL:-}
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
meilisearch:
|
|
condition: service_healthy
|
|
restart: unless-stopped
|
|
|
|
# PostgreSQL database
|
|
db:
|
|
image: postgres:17-alpine
|
|
container_name: skillhub-db
|
|
ports:
|
|
- '5432:5432'
|
|
environment:
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
|
POSTGRES_DB: skillhub
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
- ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
|
healthcheck:
|
|
test: ['CMD-SHELL', 'pg_isready -U postgres']
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
restart: unless-stopped
|
|
|
|
# Redis cache and job queue
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: skillhub-redis
|
|
ports:
|
|
- '6379:6379'
|
|
command: redis-server --appendonly yes
|
|
volumes:
|
|
- redis_data:/data
|
|
healthcheck:
|
|
test: ['CMD', 'redis-cli', 'ping']
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
restart: unless-stopped
|
|
|
|
# Meilisearch for full-text search
|
|
meilisearch:
|
|
image: getmeili/meilisearch:v1.6
|
|
container_name: skillhub-search
|
|
ports:
|
|
- '7700:7700'
|
|
environment:
|
|
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-skillhub-dev-key}
|
|
MEILI_ENV: ${MEILI_ENV:-development}
|
|
volumes:
|
|
- meilisearch_data:/meili_data
|
|
healthcheck:
|
|
test: ['CMD-SHELL', 'curl -sf http://localhost:7700/health || exit 1']
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 10s
|
|
restart: unless-stopped
|
|
|
|
|
|
volumes:
|
|
postgres_data:
|
|
name: skillhub-public_postgres_data
|
|
external: true
|
|
redis_data:
|
|
name: skillhub-public_redis_data
|
|
external: true
|
|
meilisearch_data:
|
|
name: skillhub-public_meilisearch_data
|
|
external: true
|
|
|
|
networks:
|
|
default:
|
|
name: skillhub-network
|