Skip to content

Add a non-blocking emulator smoke job to PR checks - #134

Merged
josephnef merged 2 commits into
masterfrom
ci-emulator-smoke
Oct 18, 2026
Merged

josephnef merged 2 commits into
masterfrom
ci-emulator-smoke

Conversation

@josephnef

Copy link
Copy Markdown
Collaborator

Summary

Replaces #133, which GitHub closed when its stacked base branch was deleted on merging #131. Same single commit, rebased onto master.

Adds an emulator-smoke job to pr.yml that gives a hardware-free end-to-end check of the videonative path:

  • Downloads the debug APK built by the build job.
  • Boots an x86_64 API 34 google_apis emulator (reactivecircus/android-emulator-runner, KVM on ubuntu-latest). PixelPilot ships arm64/armv7 only, so native code runs under NDK ARM translation.
  • Runs flows/pixelpilot_smoke.py from android-emulator-qa: accepts the VPN consent dialog, waits for "No compatible wifi adapter found", then pushes a synthetic H.264 RTP stream to UDP 5600 via adb emu redir and asserts AMediaCodec_configure: OK and output frames in logcat.
  • Uploads screenshots, UI dumps, logcat and verdict.json as an artifact.

continue-on-error: true for now. The harness checkout points at a fork branch until OpenIPC/android-emulator-qa#3 lands; then it should be pinned to a main SHA.

Test plan

🤖 Generated with Claude Code

Runs the debug APK on an x86_64 API-34 emulator under NDK ARM translation
and drives flows/pixelpilot_smoke.py from android-emulator-qa: accept the
VPN consent, reach the no-adapter screen, then decode a synthetic H.264
RTP stream pushed to UDP 5600 and assert on the decoder's logcat
milestones. Screenshots, UI dumps, logcat and verdict.json are uploaded
as an artifact. continue-on-error until it has proven stable on hosted
runners.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Add a non-blocking Android emulator smoke check

🧪 Tests ⚙️ Configuration changes 🕐 10-20 Minutes

Grey Divider

AI Description

• Run the built debug APK in an emulator to smoke-test video decoding without hardware.
• Keep the check non-blocking while emulator reliability is evaluated.
• Upload screenshots, logs, UI dumps, and a verdict for failed-run diagnosis.
Diagram

graph TD
  Build["Build job"] --> APK[("Debug APK")] --> Smoke["Smoke job"] --> Harness["QA harness"] --> Emulator["API 34 emulator"] --> Evidence[("Run artifacts")]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Keep the smoke flow in this repository
  • ➕ The workflow and test flow would change together.
  • ➕ PR runs would not depend on a moving fork branch.
  • ➖ Duplicates ownership of a reusable emulator QA harness.
  • ➖ Adds flow maintenance to this repository.

Recommendation: Reusing the external harness is reasonable for this non-blocking check. Pin its checkout to a commit when the flow reaches the upstream repository; the current fork branch can change independently of this PR.

Files changed (1) +65 / -4

Tests (1) +65 / -4
pr.ymlAdd an artifact-fed, non-blocking emulator smoke job +65/-4

Add an artifact-fed, non-blocking emulator smoke job

• Exposes the debug APK artifact name from the build job and downloads that APK into a new dependent job. The job prepares KVM and ffmpeg, runs an external smoke flow on an API 34 x86_64 emulator, and uploads diagnostics even when the run fails. Its failure does not block PR checks.

.github/workflows/pr.yml

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Smoke checks can change without review ✓ Resolved
Description
The harness checkout uses the mutable pixelpilot-smoke branch, and the emulator step executes its
Python flow without pinning the checked-out revision. A change to that external branch can alter or
bypass the smoke assertions on subsequent PR runs without any change to this repository, while
executing code with the job's read-only GitHub token.
Code

.github/workflows/pr.yml[R109-110]

+          repository: josephnef/android-emulator-qa
+          ref: pixelpilot-smoke
Evidence
The PR workflow runs on pull requests with contents-read permission, checks out the external branch,
and directly executes a script from that checkout. The branch ref is not tied to a reviewed commit.

.github/workflows/pr.yml[3-8]
.github/workflows/pr.yml[104-111]
.github/workflows/pr.yml[130-139]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The smoke job executes a QA harness from a mutable branch in an external repository, allowing its behavior to change without review in this repository.
## Fix Focus Areas
- .github/workflows/pr.yml[104-111]
## Recommended Fix
Replace the branch ref with a reviewed, immutable commit SHA. Update that SHA deliberately when adopting later harness changes.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Tip of the day
💡 Did you know, you can move or hide resolved findings to focus on what still needs action

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread .github/workflows/pr.yml Outdated
The pixelpilot_smoke flow has landed upstream, so the emulator job no
longer needs the fork branch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@josephnef
josephnef merged commit 3d1209c into master Oct 18, 2026
4 checks passed
@josephnef
josephnef deleted the ci-emulator-smoke branch October 18, 2026 06:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant