mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-10-03 19:15:39 +00:00
* build: move frontend assets to Bootstrap 5.3 and Tom Select * feat: migrate templates and scripts to Bootstrap 5, dropping jQuery Templates - Rename Bootstrap 4 classes and data attributes (data-bs-*, ms-/me-/ps-/pe-, text-start/end, form-group -> mb-3, input-group wrappers removed, badges, custom controls -> form-check/form-select, media -> d-flex, btn-close, ...) - Dark mode now uses Bootstrap 5.3 colour modes (data-bs-theme on <html>), set from <head> to avoid a flash of the light theme - Remove the Bootstrap 4 /bootstrap/ demo page - Contextual table classes (table-success etc.) still work as plain backgrounds for the rigboard key JavaScript - Remove jQuery: src.js/interaction.js and every inline template script are rewritten in plain JS on top of small helpers (helpers.js, bundled with Bootstrap into jpop.js so inline scripts can use them) - Replace bootstrap-select/ajax-bootstrap-select with Tom Select. The remote search now sends the `q` parameter and reads `text`, which is what the API actually uses (the old picker sent `term` and read `label`) - HTML fragments are fetched with an X-Requested-With header so views keep rendering their modal variants, and fetched scripts are re-executed - Remove the Bootstrap 4 plugin script includes * fix: stop rigboard header buttons stretching to full width under Bootstrap 5 * fix: restore dark-mode brand colours and contextual table colours under Bootstrap 5 * fix: brighten dark-mode links and make coloured card outlines visible * fix: calendar layout and grid borders, navbar search button width, guard missing modal links * fix: readable text in dark-mode Tom Select inputs and placeholders, restore form-control column widths * build: split the Dockerfile into cached stages with prod and dev targets * deploy: make compose.yml development-only with live reload, and document it * fix: keep badge text colour for links inside badges * fix: restore table-bordered grid lines in dark mode * fix: include Bootstrap's progress styles and keep progress labels readable
107 lines
3.2 KiB
YAML
107 lines
3.2 KiB
YAML
# Local development only. Production is not deployed with this file.
|
|
services:
|
|
db:
|
|
image: postgres:18.6
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_DB: ${DATABASE_NAME}
|
|
POSTGRES_USER: ${DATABASE_USERNAME}
|
|
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
|
|
# postgres 18+ defaults PGDATA to a versioned subdirectory; pin it so the volume below holds the data
|
|
PGDATA: /var/lib/postgresql/data
|
|
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
|
|
healthcheck:
|
|
test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}" ]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
pyrigs:
|
|
build:
|
|
context: .
|
|
target: dev
|
|
restart: unless-stopped
|
|
environment:
|
|
SECRET_KEY: ${SECRET_KEY}
|
|
DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS}
|
|
DOMAIN: ${DOMAIN:-example.com}
|
|
DEBUG: ${DEBUG:-true}
|
|
STAGING: ${STAGING:-false}
|
|
SESSION_COOKIE_SECURE_ENABLED: ${SESSION_COOKIE_SECURE_ENABLED:-true}
|
|
CSRF_COOKIE_SECURE_ENABLED: ${CSRF_COOKIE_SECURE_ENABLED:-true}
|
|
FORUM_WEBHOOK_SECRET: ${FORUM_WEBHOOK_SECRET}
|
|
DATABASE_ENGINE: ${DATABASE_ENGINE:-postgresql}
|
|
DATABASE_NAME: ${DATABASE_NAME}
|
|
DATABASE_USERNAME: ${DATABASE_USERNAME}
|
|
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
|
|
DATABASE_HOST: ${DATABASE_HOST:-db}
|
|
DATABASE_PORT: ${DATABASE_PORT:-5432}
|
|
EMAIL_HOST: ${EMAIL_HOST}
|
|
EMAIL_PORT: ${EMAIL_PORT:-25}
|
|
EMAIL_HOST_USER: ${EMAIL_HOST_USER}
|
|
EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD}
|
|
EMAIL_USE_TLS: ${EMAIL_USE_TLS:-false}
|
|
EMAIL_USE_SSL: ${EMAIL_USE_SSL:-false}
|
|
EMAIL_FROM: ${EMAIL_FROM}
|
|
HCAPTCHA_SITEKEY: ${HCAPTCHA_SITEKEY:-10000000-ffff-ffff-ffff-000000000001}
|
|
HCAPTCHA_SECRET: ${HCAPTCHA_SECRET:-0x0000000000000000000000000000000000000000}
|
|
SENTRY_DSN: ${SENTRY_DSN:-}
|
|
ports:
|
|
- "8000:8000"
|
|
|
|
volumes:
|
|
# The source is mounted rather than copied: the Django dev server reloads on every change
|
|
- .:/app
|
|
|
|
healthcheck:
|
|
# the dev server only starts listening once migrations have finished
|
|
test: [ "CMD", "python", "-c", "import socket; socket.create_connection(('127.0.0.1', 8000), 2).close()" ]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 60s
|
|
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
|
|
command:
|
|
- sh
|
|
- -c
|
|
- |
|
|
python manage.py migrate --noinput &&
|
|
exec python manage.py runserver 0.0.0.0:8000
|
|
|
|
develop:
|
|
watch:
|
|
# `docker compose watch` rebuilds the image when the dependencies change
|
|
- action: rebuild
|
|
path: ./pyproject.toml
|
|
- action: rebuild
|
|
path: ./uv.lock
|
|
|
|
# Rebuilds the CSS/JS bundles into pipeline/built_assets whenever the sources change
|
|
assets:
|
|
image: node:24-slim
|
|
working_dir: /app
|
|
volumes:
|
|
- .:/app
|
|
- node_modules:/app/node_modules
|
|
- npm_cache:/root/.npm
|
|
command:
|
|
- sh
|
|
- -c
|
|
- |
|
|
if [ ! -d node_modules/.bin ] || [ package-lock.json -nt node_modules/.package-lock.json ]; then
|
|
npm ci
|
|
fi
|
|
exec npx gulp watchAssets
|
|
|
|
volumes:
|
|
postgres_data:
|
|
node_modules:
|
|
npm_cache:
|