Release / build-and-push (push) Successful in 3m29s
Apple scheme normalization (follow-up to the Scribl discussion): Add Feed accepts the launcher spellings podcast pages ship next to plain RSS — itpc://, podcasts://, feed:// — and rewrites them to the https feed URL they wrap (scheme match case-insensitive). http stays and the guard still rejects it. Unit-pinned. Build stamp (stale-container drift guard): the 2026-10-29 podcast session lost an hour to a container running a build that predated the feature. version.Commit rides ldflags from a GIT_COMMIT build arg; the dev compose passes git rev-parse --short HEAD via the Makefile; the app logs 'Bookhoard <ver> (commit <hash>)' at boot and /api/health reports it — the UI and the repo can no longer silently diverge.
62 lines
1.9 KiB
YAML
62 lines
1.9 KiB
YAML
# Development override — merged on top of docker-compose.yml (the base/prod file).
|
|
# Activated by all `make` targets via:
|
|
# COMPOSE = <runtime> compose -f docker-compose.yml -f docker-compose.dev.yml
|
|
#
|
|
# What this adds over prod:
|
|
# - Local image BUILDING (prod pulls a prebuilt image from the registry)
|
|
# - The integration-tests service (dev only, gated behind the "tests" profile)
|
|
# Everything else (env vars, volumes, ports, healthchecks) is inherited from the base file.
|
|
services:
|
|
# Build the app image locally instead of pulling from the registry
|
|
app:
|
|
build:
|
|
context: .
|
|
dockerfile: ./Dockerfile
|
|
args:
|
|
GIT_COMMIT: ${GIT_COMMIT:-none}
|
|
|
|
# Integration Tests - runs against containerized app and db (dev only)
|
|
tests:
|
|
build:
|
|
context: .
|
|
dockerfile: ./Dockerfile
|
|
target: test-runner
|
|
container_name: bookhoard_tests
|
|
environment:
|
|
# Database Configuration
|
|
# Runtime role = bookhoard_srv (non-superuser OWNER, subject to RLS
|
|
# via FORCE) — same role the app service uses.
|
|
DATABASE_HOST: db
|
|
DATABASE_PORT: ${DB_PORT:-5432}
|
|
DATABASE_USER: bookhoard_srv
|
|
DATABASE_PASSWORD: ${DBSRVPASS}
|
|
DATABASE_NAME: bookhoard
|
|
COOKIE_SECURE: false
|
|
|
|
# Application Configuration
|
|
JWT_SECRET: ${JWT_SECRET}
|
|
SERVER_PORT: ${SERVER_PORT:-8765}
|
|
|
|
# Test Configuration
|
|
TEST_MODE: "true"
|
|
RATE_LIMIT_ENABLED: "false"
|
|
REQUESTS_PER_MINUTE: 1000
|
|
|
|
# Conversion Service Configuration
|
|
BOOKHOARD_CONVERSION_CACHE_DIR: /app/cache/kepub
|
|
BOOKHOARD_CONVERSION_TOOL: /usr/bin/kepubify
|
|
BOOKHOARD_CONVERSION_CACHE_TTL: 24h
|
|
|
|
# Test upload path (inside container)
|
|
TEST_UPLOAD_PATH: /app/uploads
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
app:
|
|
condition: service_healthy
|
|
volumes:
|
|
- ./uploads:/app/uploads
|
|
- bookhoard_conversion_cache:/app/cache/kepub
|
|
profiles:
|
|
- tests
|