- README now leads with the vehicle-agnostic GUI (download binaries, run from
source, connect, vehicle profiles), with the Ford 6.0 CLI as a secondary
section. Documents the unsigned-binary SmartScreen/Gatekeeper bypass.
- CI: each release binary now ships a .sha256 so downloads can be verified
(free integrity check in lieu of code signing).
- Validated on real vehicles (Jeep 4.0, Mustang Cobra 4.6).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yT89n4zR4qbrySoSiEyZs
Windows runs were failing with OSError 28 (No space left on device) while
downloading PySide6 -- the runner disk is full (compounded by leftover act
caches from earlier failed runs). --no-cache-dir avoids keeping wheel copies.
The runner still needs disk freed; this just trims the footprint.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yT89n4zR4qbrySoSiEyZs
The python.org MSI returns 1603 on this runner (half-registered state from
prior install attempts). Switch to the embeddable zip + get-pip: no MSI, no
admin, no registry — self-contained in LOCALAPPDATA. Falls through to a
pre-installed python if the runner already has one.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yT89n4zR4qbrySoSiEyZs
Per-user install landed somewhere my candidate-path check missed. Force the
install dir (LOCALAPPDATA\Python312) so python.exe is found deterministically.
(Linux/mac/arm64 builds succeeded; they only failed re-uploading to an existing
release -- softprops' asset-delete 404s on Gitea. A fresh release avoids that.)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yT89n4zR4qbrySoSiEyZs
The installer's InstallAllUsers=1 needs admin (runner service isn't elevated)
so Python landed in the per-user LOCALAPPDATA dir, not C:\Program Files; the
hardcoded PATH prepend missed it -> 'python not recognized'. Switch to a
per-user install and locate python.exe across the known dirs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yT89n4zR4qbrySoSiEyZs
First v0.1.0 run: Windows + Linux + arm64 failed (no Python on those runners;
the docker default image also lacks Python). macOS succeeded.
- windows: install Python 3.12 via the official installer in-job (idempotent).
- linux-amd64 / linux-arm64: run in nikolaik/python-nodejs:python3.12-nodejs20
(has python+pip AND node for actions/checkout; multi-arch covers the Pi).
- macOS job unchanged (it worked).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yT89n4zR4qbrySoSiEyZs
.gitea/workflows/release.yml builds the PySide6 GUI with PyInstaller on each
self-hosted runner and, on a v* tag, publishes a Gitea Release with every
platform binary attached:
- windows-latest -> OBDash-windows.exe (onefile, --windowed)
- self-hosted-mac -> OBDash-macos.zip (.app bundle, ditto-zipped)
- docker (linux) -> OBDash-linux-x86_64 (onefile + patchelf/GL libs)
- arm64 (Pi) -> OBDash-linux-aarch64
Uses softprops/action-gh-release with the auto GITEA_TOKEN; manual dispatch
build-only (no release).
profiles/ is bundled via --add-data; obdcore.profile.profiles_dir() now
resolves sys._MEIPASS when frozen so the binary finds its vehicle profiles.
Validated locally on Linux: PyInstaller onefile builds (88MB), launches
offscreen, and loads bundled profiles (6 found). Build artifacts gitignored.
Added .claude/gitea-ship.json.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yT89n4zR4qbrySoSiEyZs