Devops repo for the BERT server infrastructure https://bert133.dev
  • TypeScript 54.1%
  • Python 42.6%
  • Just 2.2%
  • Jinja 0.9%
  • Shell 0.1%
  • Other 0.1%
Find a file
2026-04-24 18:04:13 +00:00
.forgejo/workflows feat(ingest-daemon): adopt bert-site CI/registry pattern 2026-04-24 08:37:36 -04:00
.githooks feat: add pre-commit guard refusing plaintext *.sops.yml commits 2026-04-19 14:22:46 -04:00
ansible feat(ansible): add coder_workspaces role for host-persisted user state 2026-04-22 17:33:32 -04:00
docs fix: restore creds-scan effectiveness; repair docs regressions 2026-04-23 21:34:19 -04:00
flux chore: bump ingest-daemon image to main-685f9a81f21e [skip ci] 2026-04-24 18:04:13 +00:00
ingest_daemon fix(ingest-daemon): idempotent tiers SQL + telemetry owns CAggs 2026-04-24 14:03:00 -04:00
node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709 feat(ingest-daemon): apply tiers migration + APScheduler refresh loop 2026-04-23 14:48:54 -04:00
tests fix(flux,tests): wire ingest-daemon SOPS secrets and extend AC traceability 2026-04-23 21:25:29 -04:00
.editorconfig chore: add MIT LICENSE, .editorconfig, and README 2026-04-19 11:32:06 -04:00
.gitignore chore: ignore Python cache and bytecode files 2026-04-23 13:36:58 -04:00
.markdownlint-cli2.jsonc fix: restore creds-scan effectiveness; repair docs regressions 2026-04-23 21:34:19 -04:00
.sops.yaml feat(ansible): replace .sops.yaml age recipient placeholder with real key (Phase 4 bootstrap) 2026-04-19 14:03:13 -04:00
CHANGELOG.md docs: note Phase 4 Task 8/14 actual commit split 2026-04-19 14:34:38 -04:00
CLAUDE.md docs(claude): record ingest_daemon surface and helpers added in FRC datalog ingestion phases 2026-04-23 18:34:34 -04:00
justfile fix: restore creds-scan effectiveness; repair docs regressions 2026-04-23 21:34:19 -04:00
LICENSE chore: add MIT LICENSE, .editorconfig, and README 2026-04-19 11:32:06 -04:00
README.md feat(flux): implement pit-network phases 2-5 (public-ACME LAN TLS) 2026-04-20 21:52:34 -04:00

BERT FRC Team 133 — Foundational Infrastructure

This repository contains the GitOps configuration, Kubernetes manifests, and automation for BERT FRC Team 133's on-premises cluster. It is a reference architecture for FRC teams deploying Kubernetes at scale with minimal operational overhead.

Intended audience: BERT 133 team members and other FRC teams adopting this architecture.

LAN-only. This cluster and its configuration are designed for deployment on a private network within an FRC competition venue. No part of this repository is intended for public internet exposure.

Getting Started

  • VISION.md — long-term goals and design principles.
  • Design Plans — phase-by-phase implementation roadmaps.
  • just --list — run this command to see all available operations (task runner recipes).

For detailed information on any subdirectory, see the CLAUDE.md file within it:

Customizing This Stack for Your Team

Other FRC teams adopting this repository must change a small set of values before running just bootstrap. Each is noted with a # TODO comment in the file it lives in.

Variable File What it is
team_number ansible/inventory/group_vars/all.yml Your FRC team number. Every LAN addressing value (subnet, gateway IP, DHCP pool) is derived from this one value.
lan_base_domain ansible/inventory/group_vars/all.yml and flux/clusters/team/cluster-vars.yaml LAN subdomain of the team-owned public zone (e.g., lan.team1234.org). LAN services resolve here via split-horizon DNS; the wildcard Let's Encrypt cert covers *.${lan_base_domain}. Must match in both files — just check-config fails on drift.
lan_subnet, lan_server_ip ansible/inventory/group_vars/all.yml Derived from team_number by default (10.<team/100>.<team%100>.0/24 and .10). Override only if your pit network deviates from FRC convention.
cloudflare_zone ansible/inventory/group_vars/all.yml and flux/clusters/team/cluster-vars.yaml The Cloudflare-hosted parent zone of lan_base_domain (e.g., team1234.org). Used by cert-manager's DNS-01 solver.
acme_contact_email ansible/inventory/group_vars/all.yml and flux/clusters/team/cluster-vars.yaml Real contact address for Let's Encrypt expiration warnings.
team_server_wan_interface, team_server_lan_interface ansible/inventory/host_vars/<host>.yml Names of the server's WAN (upstream wifi) and LAN (pit) interfaces. Discover via docs/runbooks/discover-interface-names.md.
Cloudflare API token flux/infrastructure/configs/cert-manager/cloudflare-api-token.sops.yaml Scoped Zone:DNS:Edit + Zone:Zone:Read token on cloudflare_zone. Replace with just sops-edit <file>. Never use a global API key.

See docs/design-plans/2026-04-20-pit-network.md for the complete rationale and docs/runbooks/frc-radio-bridge-mode.md for the one-time radio setup.

License

This project is licensed under the MIT License — see LICENSE.