| name | yoyopod-rust-artifact |
| description | Manual fallback for fetching CI Rust artifacts onto the Pi (prefer /yoyopod-deploy) |
| disable-model-invocation | true |
| allowed-tools | ["Read","Bash(git status:*)","Bash(git branch --show-current:*)","Bash(git rev-parse:*)","Bash(git push:*)","Bash(gh run:*)","Bash(gh pr:*)","Bash(mkdir:*)","Bash(chmod:*)","Bash(ssh:*)","Bash(scp:*)","Bash(yoyopod target:*)"] |
Prefer /yoyopod-deploy
yoyopod target deploy (skill /yoyopod-deploy) replaces this entire
flow with a single command. It:
- verifies the worktree is clean and the commit is pushed
- finds the successful CI run for the exact commit
- runs
gh run download for yoyopod-rust-device-arm64-<sha>
- syncs the Pi checkout
- scps + extracts the worker binaries into
device/*/build/
- restarts
yoyopod-dev.service and verifies startup
Use this skill only when you need to do part of that flow manually —
for example debugging a half-broken Pi state, swapping a single
artifact, or working around a gh CLI auth issue.
Rule
Rust binaries for hardware validation must come from GitHub Actions
artifacts for the exact commit being tested. Do not run cargo build
on the Raspberry Pi Zero 2W unless the user explicitly overrides this
rule.
Current Rust Artifact Contract
Use the artifact whose suffix equals the exact commit under test, not a
pull request merge SHA:
yoyopod-rust-device-arm64-<sha>
It contains:
yoyopod-rust-device-arm64-<sha>.tar.gz
That tarball extracts an install-ready device/.../build/... tree:
| Path inside extracted tree | Purpose |
|---|
device/runtime/build/yoyopod-runtime | Top-level Rust runtime entrypoint. |
device/ui/build/yoyopod-ui-host | Whisplay UI worker and LVGL renderer. |
device/media/build/yoyopod-media-host | Rust media/mpv worker. |
device/voip/build/yoyopod-voip-host | Rust Liblinphone/SIP worker. |
device/network/build/yoyopod-network-host | Rust SIM7600/PPP/GPS worker. |
device/cloud/build/yoyopod-cloud-host | Rust cloud MQTT worker. |
device/power/build/yoyopod-power-host | Rust PiSugar/power worker. |
device/speech/build/yoyopod-speech-host | Rust speech/Ask worker. |
Manual Steps (when /yoyopod-deploy cannot be used)
-
Check local git status. If there are local changes, commit them
first or stop and ask the user whether this is a debugging exception.
-
Resolve branch and commit.
git branch --show-current
git rev-parse HEAD
-
Push the commit. Run git push. If there is no upstream, run
git push -u origin <branch>.
-
Find the successful CI run for the exact commit.
gh run list --workflow CI --branch <branch> --json databaseId,headSha,status,conclusion --limit 20
Use only a run whose headSha equals the commit from step 2 and
whose conclusion is success. If the run is still queued or in
progress, wait. If it failed, inspect the failed job before any
hardware step.
-
Download and extract the Rust device bundle locally.
mkdir -p .artifacts/rust-device/<sha>
gh run download <run-id> --name yoyopod-rust-device-arm64-<sha> --dir .artifacts/rust-device/<sha>
tar -xzf .artifacts/rust-device/<sha>/yoyopod-rust-device-arm64-<sha>.tar.gz -C .artifacts/rust-device/<sha>
-
Make sure the Pi dev checkout is on the same commit.
yoyopod target mode activate dev
yoyopod target deploy --sha <sha>
-
Install the CI-built Rust binaries on the Pi (only if step 6 did
not already do it — yoyopod target deploy normally does this end
to end).
scp .artifacts/rust-device/<sha>/yoyopod-rust-device-arm64-<sha>.tar.gz <user>@<host>:/tmp/yoyopod-rust-device-arm64-<sha>.tar.gz
ssh <user>@<host> 'cd /opt/yoyopod-dev/checkout && \
tar -xzf /tmp/yoyopod-rust-device-arm64-<sha>.tar.gz && \
chmod +x device/runtime/build/yoyopod-runtime \
device/ui/build/yoyopod-ui-host \
device/media/build/yoyopod-media-host \
device/voip/build/yoyopod-voip-host \
device/network/build/yoyopod-network-host \
device/cloud/build/yoyopod-cloud-host \
device/power/build/yoyopod-power-host \
device/speech/build/yoyopod-speech-host'
yoyopod target restart
-
Validate. Automated on-Pi validation returns in Round 2 of the
CLI rebuild. Until then, validate manually:
yoyopod target status
yoyopod target logs --follow
journalctl -u yoyopod-dev.service -f
Exercise the changed surface on the device.
-
Report exact provenance. Include the branch, commit SHA, CI run
ID, artifact names, Pi host, command result, and whether the dev
service was left running.