Skip to content
Draft

V2.0 #37

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
d7f020c
initial go work
guyfleeman Sep 3, 2026
f9644f3
svelte fe migration
guyfleeman Sep 8, 2026
8f1a879
add SPA routes, tests, and vscode tools
guyfleeman Sep 8, 2026
d409a72
initial proto wiring
guyfleeman Sep 8, 2026
fd4440f
major UI updates
guyfleeman Sep 22, 2026
b080617
add load/save/save-as, clean up vfield
guyfleeman Sep 22, 2026
9e40705
make corner picker persistent
guyfleeman Sep 25, 2026
3cb7d85
make pb generated code transient
guyfleeman Sep 25, 2026
7a38b0a
cleanup after code review
guyfleeman Sep 25, 2026
166706c
update docs
guyfleeman Sep 25, 2026
7749c3c
minor docs correction
guyfleeman Sep 25, 2026
d963b4e
dimension view layout updates
guyfleeman Sep 26, 2026
6d9df06
clean default pane
guyfleeman Sep 26, 2026
f3908e0
Merge branch 'v2.0-alpha' into dev/will/frontend_initial
guyfleeman Sep 27, 2026
eab8145
color picker prototype
guyfleeman Sep 29, 2026
7674fb4
flowbite component cleanup, layout cleanup
guyfleeman Oct 3, 2026
2d286df
unify config, overhaul save/load, confirm dialogue
guyfleeman Oct 3, 2026
a242adf
network config added, network display, if filtering
guyfleeman Oct 4, 2026
a4963a6
initial live video working, test data
guyfleeman Oct 4, 2026
0b07a69
camera config windows, driver selection
guyfleeman Oct 4, 2026
9e888dc
review pass for all flowbite elements, style matching with GC
guyfleeman Oct 4, 2026
7508f3b
initial pass at field level camera assignment
guyfleeman Oct 5, 2026
175083d
add missing advanced configs, abstract all long text into dedicated f…
guyfleeman Oct 6, 2026
c1d0934
code review of camera assignment, view matrix, and advanced settings
guyfleeman Oct 6, 2026
bb36d5e
Merge branch 'master' of github.com:RoboCup-SSL/ssl-vision-processor …
guyfleeman Oct 20, 2026
09cf1ee
API Middleware Tests and Cleanup (#40)
guyfleeman Oct 25, 2026
c93cf21
remove auto gen files, remove redundancy in config files in tests
guyfleeman Oct 25, 2026
d68e174
cleanup build system
guyfleeman Oct 25, 2026
6e0b9dc
initial commit of live field
guyfleeman Oct 25, 2026
4313ba8
legacy camera control
guyfleeman Oct 25, 2026
035e7aa
Merge branch 'dev/will/opencv_auto_exposure_fix' into dev/will/legacy…
guyfleeman Oct 25, 2026
ba614d9
geometry config for legacy
guyfleeman Oct 25, 2026
4d69ef7
Merge branch 'dev/will/field_viz' into dev/will/legacy_local_control
guyfleeman Oct 26, 2026
e73ae51
Merge branch 'master' of github.com:RoboCup-SSL/ssl-vision-processor …
guyfleeman Nov 7, 2026
f69badb
GUI initial firewire support, env updates, local management
guyfleeman Nov 7, 2026
4a6374e
add network conflict warnings, bug fixes in setup wizard, local camer…
guyfleeman Nov 7, 2026
255566d
Merge branch 'v2.0-alpha' of github.com:RoboCup-SSL/ssl-vision-proces…
guyfleeman Nov 7, 2026
709ce64
cleanup launch flags, embed key config/docs files, prep for distribution
guyfleeman Nov 7, 2026
623568d
Merge remote-tracking branch 'origin/master' into dev/will/inbound_ne…
guyfleeman Nov 7, 2026
c02b228
Merge PR #50 (send-config) for local integration
guyfleeman Nov 7, 2026
c5187fd
initial inbound network support
guyfleeman Nov 7, 2026
c586d2e
go binary release
guyfleeman Nov 8, 2026
fd10e0b
Merge branch 'master' of github.com:RoboCup-SSL/ssl-vision-processor …
guyfleeman Nov 8, 2026
ef4c33f
Merge branch 'v2.0-alpha' into dev/will/local_control
guyfleeman Nov 8, 2026
9ee4eb9
add more ubuntu native targets
guyfleeman Nov 9, 2026
97a0669
rename binary, initial debian bundle
guyfleeman Nov 9, 2026
76feac9
add startup checklist
guyfleeman Nov 10, 2026
a929d7a
about page, debug dump
guyfleeman Nov 10, 2026
9106b2a
view fixes on narrow screens
guyfleeman Nov 10, 2026
443d12a
Merge branch 'master' of github.com:RoboCup-SSL/ssl-vision-processor …
guyfleeman Nov 10, 2026
055a8f7
checklist cleanup in expert mode
guyfleeman Nov 10, 2026
7d45e0a
debug console wip
guyfleeman Nov 10, 2026
db169e2
debug log panel
guyfleeman Nov 10, 2026
fd3f377
testing fixes
guyfleeman Nov 11, 2026
8e16132
improve notification of error in comp mode
guyfleeman Nov 11, 2026
13c0343
restore .gitkeep on dist dir
guyfleeman Nov 11, 2026
267bae0
rename binary prefix from rcssl- to ssl- to match league tools
guyfleeman Nov 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
173 changes: 149 additions & 24 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,51 +55,176 @@ jobs:
cmake -B build .
make -C build -j"$(nproc)" vision_processor geometry_benchmark blob_benchmark

python:
name: Python (wrapper_backend)
gui-go:
name: Go (gui)
runs-on: ubuntu-latest
steps:
# gui/internal/{vision,gamecontroller} are generated, not committed (see
# gui/buf.gen.yaml) -- the proto/ submodule and a `buf generate` (via
# `make .proto`, local plugins, no network needed) are needed before
# anything here builds.
- uses: actions/checkout@v4
with:
submodules: recursive

- uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/magic-nix-cache-action@main

# Importing wrapper_backend runs protoc against the submodule and
# generates wrapper_backend/proto/, which mypy needs on its path even
# though it excludes the generated files themselves.
- name: Lint and type check
# The socket tests send real multicast over loopback, which Ubuntu
# ships with multicast off. They fail rather than skip under CI, so a
# missing step here can't hide as a skip.
- name: Enable loopback multicast
run: sudo scripts/lo-multicast.sh on

- name: Format, vet, build, test
run: |
nix develop --command bash -c '
uv sync --locked
uv run python -c "import wrapper_backend"
uv run ruff check wrapper_backend/
uv run ruff format --check wrapper_backend/
uv run mypy
cd gui
make fmt-check
make vet
make build
make go-test
make generate-check
'

frontend:
name: Frontend (wrapper-frontend)
runs-on: ubuntu-latest
defaults:
run:
working-directory: wrapper-frontend
gui-apt:
name: Go and frontend (gui, Ubuntu 24.04, no nix)
# The non-nix counterpart of gui-go and frontend: the same make targets,
# with every tool from its own pin instead of the flake. Formatting and
# generated-file checks stay in the nix jobs; this job only shows the GUI
# builds and passes its tests with these tool versions.
runs-on: ubuntu-24.04
env:
# As in the flake: a go.mod newer than the installed Go fails here
# instead of quietly downloading a toolchain.
GOTOOLCHAIN: local
steps:
# The package version counts commits, which needs the history.
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0

- uses: actions/setup-go@v5
with:
go-version-file: gui/go.mod
cache-dependency-path: gui/go.sum

- uses: actions/setup-node@v4
with:
node-version: 22
node-version-file: gui/frontend/.nvmrc
cache: npm
cache-dependency-path: wrapper-frontend/package-lock.json
cache-dependency-path: gui/frontend/package-lock.json

- run: npm ci
# Ubuntu doesn't package buf. Keep the version in step with the flake's
# (nix develop -c buf --version) and gui/DEVELOPMENT.md.
- name: Install buf
run: go install github.com/bufbuild/buf/cmd/buf@v1.72.0

- run: npm run lint
- name: Enable loopback multicast
run: sudo scripts/lo-multicast.sh on

- run: npm run format:check
- name: Build and test
working-directory: gui
run: |
make build
make go-test
make frontend-test

# nfpm is a Go tool, so the packages build the same way without nix.
- name: Packages
working-directory: gui
run: make deb

- run: npm run check
gui-release:
name: Release build (gui)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- run: npm run build
- uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/magic-nix-cache-action@main

# A first run publishes nothing, so this can't disturb anything.
- name: Build it and run it as a new user would
run: nix develop --command bash -c 'cd gui && make release-check'

gui-deb:
name: Debian packages (gui)
# The runner is a real Ubuntu 24.04 machine with systemd, so this installs
# the package and checks the service itself, not just the files.
runs-on: ubuntu-24.04
steps:
# The package version counts commits, which needs the history.
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0

- uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/magic-nix-cache-action@main

- name: Build
run: nix develop --command bash -c 'cd gui && make deb'

- name: Lintian
run: |
sudo apt-get update -qq
sudo apt-get install -y -qq lintian
lintian --fail-on error,warning gui/bin/deb/*.deb

- name: Install and check the service
run: sudo gui/scripts/deb-check.sh gui/bin/deb/*_amd64.deb "$(git -C gui describe --tags --always --dirty)"

frontend:
name: Frontend (gui/frontend)
runs-on: ubuntu-latest
steps:
# frontend/src/proto is generated, not committed (see gui/buf.gen.yaml)
# -- this job now needs the proto/ submodule and buf/go (hence nix,
# same as gui-go) to produce it before npm can build against it.
- uses: actions/checkout@v4
with:
submodules: recursive

- uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/magic-nix-cache-action@main

- name: Lint, check, build
run: |
nix develop --command bash -c '
cd gui
make frontend-test
make frontend
'

gui-e2e:
name: End-to-end (gui)
runs-on: ubuntu-latest
steps:
# Same prerequisites as gui-go: generated protobuf and the frontend
# build, both via nix. The browser is the runner's own Google Chrome
# (Playwright's "chrome" channel), so nothing is downloaded for it.
- uses: actions/checkout@v4
with:
submodules: recursive

- uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/magic-nix-cache-action@main

- name: Smoke tests
run: |
nix develop --command bash -c '
cd gui
make e2e
'

- name: Upload traces
if: failure()
uses: actions/upload-artifact@v4
with:
name: playwright-traces
path: gui/frontend/test-results/
retention-days: 7
44 changes: 44 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Release

# Pushing a v* tag publishes that version of the GUI host: the static binary,
# its tarball, the .deb packages and SHA256SUMS, as a GitHub Release.
on:
push:
tags: ["v*"]

permissions:
contents: write

jobs:
gui:
name: Release (gui)
runs-on: ubuntu-24.04
steps:
# The version comes from git describe, which needs the tags.
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0

- uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/magic-nix-cache-action@main

- name: Build and check
run: nix develop --command bash -c 'cd gui && make release-check VERSION="$GITHUB_REF_NAME"'

- name: Packages
run: |
nix develop --command bash -c 'cd gui && make deb VERSION="$GITHUB_REF_NAME"'
sudo apt-get update -qq
sudo apt-get install -y -qq lintian
lintian --fail-on error,warning gui/bin/deb/*.deb
sudo gui/scripts/deb-check.sh gui/bin/deb/*_amd64.deb "$GITHUB_REF_NAME"
cp gui/bin/deb/*.deb gui/bin/release/
cd gui/bin/release && sha256sum *.tar.gz *-bin *.deb > SHA256SUMS

- name: Publish
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release create "$GITHUB_REF_NAME" --generate-notes \
gui/bin/release/*.tar.gz gui/bin/release/*-bin gui/bin/release/*.deb gui/bin/release/SHA256SUMS
37 changes: 36 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,17 @@
/src/cl_kernels.S
/src/proto
/python/proto
/wrapper_backend/proto
/gui/internal/vision
/gui/internal/gamecontroller
/gui/frontend/src/proto
# Built by gui/Makefile: the API spec and the doc comments it's built with,
# the frontend's types generated from it, and the fetched docs viewer.
/gui/internal/api/comments_gen.go
/gui/openapi.json
/gui/frontend/src/lib/generated
/gui/internal/api/viewer
# Copied in by gui/Makefile for -readme (the .yml copies are ignored below).
/gui/internal/defaults/data/README.md
__pycache__

# Cam viewer
Expand All @@ -12,11 +22,33 @@ __pycache__
# Debug and test image directories
/img
/test-data
*.log

# Config files are local: only the read-only references in config/ are
# tracked (see config/README.md). Copy one to the repo root and edit the copy;
# git ignores it wherever it lives, so `git add -A` can't sweep in a venue's
# config or calibration.
*.yml
# The GUI's backup of a config.yml it imported and now regenerates.
*.yml.orig
!/config/**/*.yml
# Not configs: test fixtures, CI, and vision_processor's default robot height
# table, which it reads from the working directory.
!**/testdata/**/*.yml
!/.gitlab-ci.yml
!/.github/**/*.yml
!/robot-heights.yml

#Output binaries
vision_processor
blob_benchmark
geometry_benchmark
/gui/bin
/gui/ssl-vision-processor-gui

# Makefile sentinels for the frontend build and protobuf codegen
/gui/.frontend
/gui/.proto

#CMake files
/build
Expand All @@ -33,3 +65,6 @@ CMakeCache.txt
/.cache
/build*
/.zed

# AI Files
.mcp.json
23 changes: 4 additions & 19 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,30 +1,15 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.15.12
hooks:
- id: ruff
args: [--fix]
files: ^wrapper_backend/
- id: ruff-format
files: ^wrapper_backend/
- repo: local
hooks:
- id: mypy
name: mypy
entry: uv run mypy
language: system
types: [python]
files: ^wrapper_backend/
pass_filenames: false
- id: eslint
name: eslint
entry: npm --prefix wrapper-frontend run lint
entry: npm --prefix gui/frontend run lint
language: system
files: ^wrapper-frontend/
files: ^gui/frontend/
pass_filenames: false
- id: prettier
name: prettier
entry: npm --prefix wrapper-frontend run format:check
entry: npm --prefix gui/frontend run format:check
language: system
files: ^wrapper-frontend/
files: ^gui/frontend/
pass_filenames: false
13 changes: 13 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"recommendations": [
"golang.go",
"svelte.svelte-vscode",
"esbenp.prettier-vscode",
"ms-vscode.cpptools",
"ms-vscode.cmake-tools",
"ms-python.python",
"charliermarsh.ruff",
"jnoortheen.nix-ide",
"bufbuild.vscode-buf"
]
}
22 changes: 22 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"[go]": {
"editor.defaultFormatter": "golang.go",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"[svelte]": {
"editor.defaultFormatter": "svelte.svelte-vscode",
"editor.formatOnSave": true
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"go.vetOnSave": "package"
}
Loading
Loading