Manual fallback for fetching CI Rust artifacts onto the Pi (prefer /yoyopod-deploy)
Scanned 6/14/2026
Install via CLI
openskills install attmous/yoyopod---
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:
```bash
yoyopod-rust-device-arm64-<sha>
```
It contains:
```bash
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)
1. **Check local git status.** If there are local changes, commit them
first or stop and ask the user whether this is a debugging exception.
2. **Resolve branch and commit.**
```bash
git branch --show-current
git rev-parse HEAD
```
3. **Push the commit.** Run `git push`. If there is no upstream, run
`git push -u origin <branch>`.
4. **Find the successful CI run for the exact commit.**
```bash
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.
5. **Download and extract the Rust device bundle locally.**
```bash
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>
```
6. **Make sure the Pi dev checkout is on the same commit.**
```bash
yoyopod target mode activate dev
# then deploy without artifact (this is the simple-case fallback that
# only re-syncs git state; binaries follow in step 7):
yoyopod target deploy --sha <sha>
```
7. **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).**
```bash
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
```
8. **Validate.** Automated on-Pi validation returns in Round 2 of the
CLI rebuild. Until then, validate manually:
```bash
yoyopod target status
yoyopod target logs --follow
journalctl -u yoyopod-dev.service -f
```
Exercise the changed surface on the device.
9. **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.
No comments yet. Be the first to comment!