Files
TimeTracker/docker/entrypoint-local-test.sh
Dries Peeters 7486037307 feat: local SQLite test env, UI fixes, and DB migrations
- UI/UX: Refine layouts and responsive styles; fix task and timer views; update
  shared components and dashboard templates
  - Updates across `app/templates/**`, `templates/**`, `app/static/base.css`,
    and `app/static/mobile.css`
- Backend: Route cleanups and minor fixes for admin, auth, invoices, and timer
  - Touches `app/routes/admin.py`, `app/routes/auth.py`, `app/routes/api.py`,
    `app/routes/invoices.py`, `app/routes/timer.py`
- DevOps: Improve Docker setup and add local testing workflow
  - Update `Dockerfile`, `docker/start-fixed.py`
  - Add `docker-compose.local-test.yml`, `.env.local-test`, start scripts
- Docs: Update `README.md` and add `docs/LOCAL_TESTING_WITH_SQLITE.md`
- Utilities: Adjust CLI and PDF generator behavior

Database (Alembic) migrations:
- 005_add_missing_columns.py
- 006_add_logo_and_task_timestamps.py
- 007_add_invoice_and_more_settings_columns.py
- 008_align_invoices_and_settings_more.py
- 009_add_invoice_created_by.py
- 010_enforce_single_active_timer.py

BREAKING CHANGE: Only one active timer per user is now enforced.

Note: Apply database migrations after deploy (e.g., `alembic upgrade head`).
2025-09-10 11:49:49 +02:00

40 lines
1.3 KiB
Bash

#!/bin/bash
# TimeTracker Local Test Entrypoint
# Simplified entrypoint for local testing with SQLite
echo "=== TimeTracker Local Test Container Starting ==="
echo "Timestamp: $(date)"
echo "Container ID: $(hostname)"
echo "Python version: $(python --version 2>/dev/null || echo 'Python not available')"
echo "Current directory: $(pwd)"
echo "User: $(whoami)"
echo
# Function to log messages with timestamp
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# Ensure data directory exists and has proper permissions
log "Setting up data directory..."
mkdir -p /data /data/uploads /app/logs
chmod 755 /data /data/uploads /app/logs
# If no command was passed from CMD, default to python /app/start.py
if [ $# -eq 0 ]; then
set -- python /app/start.py
fi
# Set proper ownership for the timetracker user (if it exists)
if id "timetracker" &>/dev/null; then
log "Setting ownership to timetracker user..."
chown -R timetracker:timetracker /data /app/logs || true
log "Switching to timetracker user with gosu..."
cd /app
# Delegate to the standard entrypoint that handles migrations for both Postgres and SQLite
exec gosu timetracker:timetracker /app/docker/entrypoint_fixed.sh "$@"
else
log "timetracker user not found, running as root..."
exec /app/docker/entrypoint_fixed.sh "$@"
fi