No description
  • Python 51.5%
  • JavaScript 22.1%
  • C++ 11.7%
  • CSS 5.4%
  • C 2.8%
  • Other 6.5%
Find a file
joaj e31bf048d7
All checks were successful
/ check (push) Successful in 1m20s
Merge pull request 'Migrate ci to forgejo' (#1) from test_ci into master
2026-06-18 21:16:10 +00:00
.forgejo/workflows Setup forgejo ci 2026-06-18 22:11:15 +01:00
api Check gate roles on lap split 2026-06-11 22:32:03 +01:00
configuration Check gate roles on lap split 2026-06-11 22:32:03 +01:00
gate_server gate_server: integrate timekeeping_logging 2026-06-10 17:20:24 +01:00
libs Add scoring script 2026-06-17 22:02:30 +01:00
LICENSE Start the timekeeping repo 2026-02-06 21:25:28 +00:00
log_pruner log_pruner: Add Dockerfile, requirements, and Makefile 2026-06-09 18:34:50 +01:00
scripts feat: add automated database backup sidecar and helper scripts 2026-06-17 22:54:36 +01:00
testing_sim testing_sim: send packets with newlines 2026-06-10 17:01:11 +01:00
timegate-firmware firmware: Update sdlog.cpp logI calls with context 2026-06-09 18:52:34 +01:00
ui Check gate roles on lap split 2026-06-11 22:32:03 +01:00
.dockerignore Here I change everything 2026-06-05 17:20:28 +01:00
.env-dev fix(compose): fixed ports 2026-06-04 20:38:04 +01:00
.env-prod fix(compose): fixed ports 2026-06-04 20:38:04 +01:00
.gitignore feat: add automated database backup sidecar and helper scripts 2026-06-17 22:54:36 +01:00
.gitlab-ci.yml Remove flatc 2026-05-03 16:43:54 +01:00
.pre-commit-config.yaml Setup pre commit checks 2026-03-01 00:06:32 +00:00
AGENTS.md persistence: Add gate_logs table, migration, and query methods 2026-06-09 01:46:05 +01:00
docker-compose.yml feat: add automated database backup sidecar and helper scripts 2026-06-17 22:54:36 +01:00
Makefile libs: add scoring CLI scaffold and integrate into build pipeline 2026-06-15 23:17:37 +01:00
pyproject.toml Fix ty paths 2026-05-30 16:44:07 +01:00
pyrightconfig.json Create pyrightconfig.json 2026-06-05 16:53:05 +01:00
README.md Recomend scoped commits for contributors 2026-06-06 14:53:58 +01:00
requirements.txt Migrate timekeeping storage to Postgres 2026-05-12 21:48:05 +01:00

Timekeeping

Software for the measurement of formula student lap times.

Database

The runtime stack now uses PostgreSQL. Application services read the database connection from DATABASE_URL, and docker-compose.yml starts a local PostgreSQL service that the API and gate server share by default. The compose setup stores PostgreSQL data in the named Docker volume postgres_data, so the database files stay out of the repository working tree and do not interfere with image builds. If you used the older bind mount at ./data/postgres, remove that directory after stopping the stack so legacy Docker builds no longer scan it.

To open a PostgreSQL prompt against the running compose service:

cd /home/joaj/sources/timekeeping
docker compose exec postgres psql -U timekeeping -d timekeeping

To inspect or change Alembic migration state from the compose stack, run the commands in the api container:

cd /home/joaj/sources/timekeeping
docker compose exec api python -m alembic -c /app/timekeeping_persistence/alembic.ini current
docker compose exec api python -m alembic -c /app/timekeeping_persistence/alembic.ini history
docker compose exec api python -m alembic -c /app/timekeeping_persistence/alembic.ini downgrade -1
docker compose exec api python -m alembic -c /app/timekeeping_persistence/alembic.ini downgrade base
docker compose exec api python -m alembic -c /app/timekeeping_persistence/alembic.ini upgrade head

If the api service is not running, use docker compose run --rm api ... instead of docker compose exec api ....

Note: the API service runs migrations to head on startup, so restarting the api container after a downgrade will automatically apply outstanding migrations again.

Contributing

Use the scoped commit format for commits.

License

Except for where otherwise noted, this project is licensed under GPL-v3+. The current license terms shall not automatically apply to derived works that interact with the supplied source modules or compiled outputs through their user facing interfaces.

This relates specifically to the definition of "covered work" as defined in GPL v3.0 or similar concept.