diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml index 77bbb99..d9c2a3c 100644 --- a/.github/workflows/ci-tests.yml +++ b/.github/workflows/ci-tests.yml @@ -7,6 +7,34 @@ on: branches: [main, develop] jobs: + # =========================================================================== + # Job 0: Ruff Lint (active Python files only) + # Excludes legacy GUI_V*.py files and untracked v7/ directory + # =========================================================================== + lint: + name: Ruff Lint (active files) + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install ruff + run: pip install ruff + + - name: Run ruff on active files + run: | + ruff check \ + 9_Firmware/9_3_GUI/radar_protocol.py \ + 9_Firmware/9_3_GUI/radar_dashboard.py \ + 9_Firmware/9_3_GUI/smoke_test.py \ + 9_Firmware/9_3_GUI/test_radar_dashboard.py + # =========================================================================== # Job 1: Python Host Software Tests (58 tests) # radar_protocol, radar_dashboard, FT2232H connection, replay, opcodes, e2e diff --git a/9_Firmware/9_3_GUI/radar_dashboard.py b/9_Firmware/9_3_GUI/radar_dashboard.py index 3c86074..aa7d81d 100644 --- a/9_Firmware/9_3_GUI/radar_dashboard.py +++ b/9_Firmware/9_3_GUI/radar_dashboard.py @@ -21,7 +21,6 @@ Usage: python radar_dashboard.py --record # Launch with HDF5 recording """ -import sys import os import time import queue @@ -45,7 +44,7 @@ from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from radar_protocol import ( RadarProtocol, FT2232HConnection, ReplayConnection, DataRecorder, RadarAcquisition, - RadarFrame, StatusResponse, Opcode, + RadarFrame, StatusResponse, NUM_RANGE_BINS, NUM_DOPPLER_BINS, WATERFALL_DEPTH, ) diff --git a/9_Firmware/9_3_GUI/radar_protocol.py b/9_Firmware/9_3_GUI/radar_protocol.py index af7adbb..85a5867 100644 --- a/9_Firmware/9_3_GUI/radar_protocol.py +++ b/9_Firmware/9_3_GUI/radar_protocol.py @@ -24,7 +24,7 @@ import logging from dataclasses import dataclass, field from typing import Optional, List, Tuple, Dict, Any from enum import IntEnum -from collections import deque + import numpy as np @@ -764,13 +764,20 @@ class ReplayConnection: dq = int(np.clip(dop_q[rbin, dbin], -32768, 32767)) d = 1 if det[rbin, dbin] else 0 - buf[pos] = HEADER_BYTE; pos += 1 - buf[pos:pos+2] = rq_bytes; pos += 2 - buf[pos:pos+2] = ri_bytes; pos += 2 - buf[pos:pos+2] = struct.pack(">h", di); pos += 2 - buf[pos:pos+2] = struct.pack(">h", dq); pos += 2 - buf[pos] = d; pos += 1 - buf[pos] = FOOTER_BYTE; pos += 1 + buf[pos] = HEADER_BYTE + pos += 1 + buf[pos:pos+2] = rq_bytes + pos += 2 + buf[pos:pos+2] = ri_bytes + pos += 2 + buf[pos:pos+2] = struct.pack(">h", di) + pos += 2 + buf[pos:pos+2] = struct.pack(">h", dq) + pos += 2 + buf[pos] = d + pos += 1 + buf[pos] = FOOTER_BYTE + pos += 1 return bytes(buf) diff --git a/9_Firmware/9_3_GUI/smoke_test.py b/9_Firmware/9_3_GUI/smoke_test.py index e0d2d2f..70e440c 100644 --- a/9_Firmware/9_3_GUI/smoke_test.py +++ b/9_Firmware/9_3_GUI/smoke_test.py @@ -27,7 +27,6 @@ Exit codes: import sys import os import time -import struct import argparse import logging diff --git a/9_Firmware/9_3_GUI/test_radar_dashboard.py b/9_Firmware/9_3_GUI/test_radar_dashboard.py index 790bbef..6fe0410 100644 --- a/9_Firmware/9_3_GUI/test_radar_dashboard.py +++ b/9_Firmware/9_3_GUI/test_radar_dashboard.py @@ -21,7 +21,7 @@ from radar_protocol import ( HEADER_BYTE, FOOTER_BYTE, STATUS_HEADER_BYTE, NUM_RANGE_BINS, NUM_DOPPLER_BINS, NUM_CELLS, DATA_PACKET_SIZE, - _HARDWARE_ONLY_OPCODES, _REPLAY_ADJUSTABLE_OPCODES, + _HARDWARE_ONLY_OPCODES, )