Add install-minui.md with tested devices, installation steps, and
update instructions. Add MinUI to mkdocs nav and cfw-links. Set
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 on both workflows ahead of the
June 2026 deprecation of Node.js 20 runners.
Ship both grout32 and grout64 in a single MinUI zip. The launch
script detects arch via uname and picks the right binary and libs.
Device detection (Miyoo/Anbernic/TrimUI) uses runtime.GOARCH and
/proc/bus/input/devices, following the same pattern as muOS. Adds
Anbernic joystick mapping reused from muOS.
Fix unmapped devices (TrimUI, Miyoo Flip) returning errors instead of
nil. Uppercase device constants to match env var values. Add fallback
case to launch script. Fix artifact download paths in CI universal
packaging job. Remove debug comments and cosmetic issues.
Rename build/extract tasks to include architecture (build-arm64,
build-arm32, etc.) for clarity. Add Onion CFW quirks to docs.
Reorganize auth.go and add response debug logging for connection
validation and login failures. Use RELEASE_PAT for versions.json push.
upload-artifact@v4 strips common path prefixes, so artifacts from
single-directory uploads (arm32, amd64, x86) lose their dist/ prefix.
Use ** globs in the release step and find in the versions job to
locate files regardless of path.
Pass GROUT_VERSION build arg from the release workflow into Docker
builds so beta releases get the correct version number. Falls back
to pak.json for local dev builds when the arg is not set.
Only keep the legacy "grout" binary for backwards compatibility with
pre-v4.8.0.0 clients. The new updater uses distribution zips. Also
trigger the docs workflow after updating versions.json since
GITHUB_TOKEN pushes don't trigger other workflows.
Use atomic.Pointer for updateInfo and a mutex for releaseChannel to
eliminate a data race between the background check goroutine and the
UI thread. Add update-versions job to the release workflow that hashes
build artifacts, verifies uploaded assets match, and commits the
versions.json with all distribution zip metadata.
Use atomic.Pointer for updateInfo and a mutex for releaseChannel to
eliminate a data race between the background check goroutine and the
UI thread. Add update-versions job to the release workflow that hashes
build artifacts, verifies uploaded assets match, and commits the
versions.json with all distribution zip metadata.
Older versions of the updater look for a bare "grout" asset.
Upload the arm64 binary under both names so existing installs
can still update to this release.
- Add build-x86, extract-x86, and package-batocera-x86 tasks
- Add x86 (386) to updater asset name resolution
- Split release workflow into parallel jobs per architecture:
build-arm64, build-amd64, build-x86, build-arm32
- Each job uploads artifacts, final release job collects and publishes
- Release now ships grout-arm64, grout-amd64, grout-x86, grout-arm32
and Batocera zips for arm64, amd64, and x86
Instead of hardcoding asset names per-CFW, derive them from the
compiled architecture. Release now uploads grout-arm64, grout-amd64,
and grout-arm32 instead of a bare "grout" binary.
Batocera runs on both ARM64 and x86_64 PCs. The release was only
shipping an ARM64 binary, causing "Exec format error" on x86_64.
- Add package-batocera-amd64 task and build AMD64 in release workflow
- Ship separate Grout-Batocera-arm64.zip and Grout-Batocera-amd64.zip
- Upload grout-amd64 standalone binary for the in-app updater
- Use runtime.GOARCH in updater to download correct binary for arch
Upload the ARM32 binary as grout-arm32 alongside the ARM64 grout binary.
GetAssetName now returns grout-arm32 for Allium and Onion so the in-app
updater downloads the correct architecture binary.
- Package tasks now output to dist/ instead of build64/, keeping build
folders for raw binaries/libs only
- Release workflow updated to reference dist/ for zip creation and uploads
- Allium and Onion now copy libs from vendored/miyoo/ instead of the
build container
- Add app icons for Allium and Onion
- Update Spruce and Trimui config descriptions