westfarn 783712972b
Unit Tests / test (push) Successful in 5s
Show in-progress multi-day events on the calendar (#33)
## Summary
Closes #32.
- Keep an event on Upcoming until its end date is over. If `end_time` is set, it drops off once that time passes on the end date, so an in-progress multi-day event stays visible.
- Render the Past tab from `past_events` instead of `future_events`.
- Show the start–end date range when the dates differ.

## Test plan
- [ ] Multi-day event that started yesterday and ends tomorrow appears under Upcoming
- [ ] Event whose end time has already passed appears under Past
- [ ] Future single-day event still appears under Upcoming
- [ ] Past tab lists finished events only
- [ ] `uv run python manage.py test schasite.tests.CalendarEventTests`

Reviewed-on: #33
2026-10-06 11:41:16 -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 Postgres → deploy.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.2 MiB
0 Stars 2 Watchers 0 Forks
Languages
HTML 63.2%
Python 34.1%
CSS 1.7%
Shell 0.6%
JavaScript 0.2%
Other 0.2%