westfarn f37ff3e87b
Unit Tests / test (push) Successful in 3s
Add start/end time fields to CalendarEvent (#28) (#29)
## Summary
Closes #28.

- Add optional `start_time` / `end_time` (`TimeField`) on `CalendarEvent`
- Expose times in Django admin list + form
- Replace hardcoded calendar template times with `time_range_display`
- Add migration `0013` and unit coverage for time formatting

## Test plan
- [ ] `python manage.py migrate`
- [ ] `python manage.py test schasite.tests.CalendarEventTests`
- [ ] In admin, edit an event with start/end times and confirm calendar page shows them
- [ ] Confirm events without times hide the Time rowReviewed-on: #29
2026-08-04 11:00:24 -07:00
2025-03-07 12:15:48 -06:00
2026-07-14 05:13:55 -07:00
2026-07-14 05:13:55 -07:00

SCHA Wheaton

Django site for SCHA Wheaton. Packaging via uv; production deploy via server-infra.

Local development

Prerequisites

  • Python 3.12+
  • uv
  • Docker + Docker Compose (optional, recommended)

uv (host)

cp .env.example .env
uv sync
uv run python manage.py migrate
uv run python manage.py runserver

Without DATABASE_URL / DB_HOST, settings fall back to SQLite (db.sqlite3).

Docker (dev, bundled Postgres)

docker compose up --build

App: http://localhost:8000 — Postgres via bundled db (postgres://scha:scha@db:5432/scha). Compose does not read host DATABASE_URL (avoids CI/prod leaks); override with COMPOSE_DATABASE_URL if needed.

Environment variables

Variable Dev default Prod required Notes
DJANGO_ENV dev prod / beta Selects settings module
DJANGO_SECRET_KEY insecure default yes Must be set in prod
DJANGO_DEBUG env default / true in dev false
DJANGO_ALLOWED_HOSTS * yes Comma-separated
DJANGO_CSRF_TRUSTED_ORIGINS derived from hosts optional Comma-separated full origins
DATABASE_URL SQLite fallback yes Shared Postgres in prod
WEB_PORT n/a (compose) 8002 Host port for prod compose
STRIPE_* empty yes (prod/beta) Publishable, secret, webhook
RECAPTCHA_* empty yes (prod/beta) Public + private

Templates: .env.example (local), .env.prod.example (control-node secret).

Control-node secret path (server-infra):

~/Documents/secrets/scha/scha_prod.env

Validate with:

./scripts/validate-env.sh ~/Documents/secrets/scha/scha_prod.env

Production (docker-compose.prod.yml)

  • Single web service; no bundled DB — DATABASE_URL points at shared Postgres (10.0.0.230).
  • Host port from WEB_PORT (catalog: 8002).
  • Deployed by server-infra/scripts/deploy.sh --app scha --env prod --ref <sha>.

CI / CD (Gitea Actions)

Workflow Trigger Action
unittests.yml push + PR → master uv sync + manage.py test
ci.yml PR → master same unit tests
deploy.yml after Unit Tests succeeds on master push docker build + tests on ephemeral compose Postgresdeploy.sh

Deploy never runs on PRs.

Security note

Stripe and reCAPTCHA keys previously lived in settings.py. Treat them as compromised; rotate and set real values only in the control-node env file (never commit).

S
Description
Django site for SCHA
Readme
1.1 MiB
Languages
HTML 65.8%
Python 31.4%
CSS 1.8%
Shell 0.6%
JavaScript 0.2%
Other 0.2%