From 05b7732149511d452fd09691be6cd3192763c701 Mon Sep 17 00:00:00 2001 From: MaxsTechReview <6025299+maxjivi05@users.noreply.github.com> Date: Wed, 14 Oct 2026 10:33:44 -0400 Subject: [PATCH] Improve test failure diagnostics and refresh Astra firmware findings --- .github/workflows/build.yml | 68 ++++++++++++++++++++----- app/build.gradle | 4 ++ docs/development/astra-viture-stereo.md | 7 +-- 3 files changed, 63 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7bd2d1d0..a2820d3e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -482,7 +482,24 @@ jobs: run: python3 -m unittest discover -s tools/tests -p 'test_*.py' - name: Unit tests - run: ./gradlew testReleaseUnitTest --console=plain -PndkVersion="$NDK_VERSION" + id: unit-tests + run: | + set -o pipefail + mkdir -p app/build + ./gradlew testReleaseUnitTest --console=plain --info --stacktrace -Drobolectric.logging=stderr -PndkVersion="$NDK_VERSION" 2>&1 | tee app/build/unit-tests.log + + - name: Upload unit test diagnostics + id: unit-test-diagnostics + if: always() && steps.unit-tests.outcome != 'skipped' + uses: actions/upload-artifact@v4 + with: + name: unit-test-results + path: | + app/build/unit-tests.log + app/build/test-results/testReleaseUnitTest/ + app/build/reports/tests/testReleaseUnitTest/ + if-no-files-found: ignore + retention-days: 14 - name: Sign with the testkey (v1 + v2 + v3) run: | @@ -512,6 +529,15 @@ jobs: grep -qi "CN=Android, OU=Android, O=Android" /tmp/sig.txt \ || { echo "::error::apk is not signed with the AOSP testkey"; exit 1; } + - uses: actions/upload-artifact@v4 + id: apk-upload + with: + name: droiddeck-apk + path: app/build/outputs/apk/release/*.apk + if-no-files-found: error + retention-days: 30 + compression-level: 0 + - name: Report on the pull request if: always() && github.event_name == 'pull_request' continue-on-error: true @@ -520,6 +546,9 @@ jobs: PR: ${{ github.event.pull_request.number }} RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} BUILD_OUTCOME: ${{ steps.build.outcome }} + UNIT_TEST_OUTCOME: ${{ steps.unit-tests.outcome }} + TEST_DIAGNOSTICS_URL: ${{ steps.unit-test-diagnostics.outputs.artifact-url }} + APK_OUTCOME: ${{ steps.apk-upload.outcome }} SAME_REPO: ${{ github.event.pull_request.head.repo.full_name == github.repository }} run: | set -uo pipefail @@ -530,8 +559,8 @@ jobs: echo [ -f /tmp/pr-merge.md ] && cat /tmp/pr-merge.md echo - case "$BUILD_OUTCOME" in - success) + case "$BUILD_OUTCOME:$UNIT_TEST_OUTCOME:$APK_OUTCOME" in + success:success:success) echo "### Build passed" echo echo "The \`droiddeck-apk\` artifact is [on this run]($RUN_URL), signed with the public test key." @@ -544,7 +573,28 @@ jobs: echo echo "Fallback: [open **PR Release Publish**]($GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/workflows/pr-release-publish.yml) on \`main\` and enter PR \`$PR\`." ;; - failure) + success:success:*) + echo "### APK publication incomplete" + echo + echo "Compilation and unit tests passed, but APK publication did not complete. See [the run]($RUN_URL)." + ;; + success:failure:*) + echo "### ERROR: Unit tests failed" + echo + echo "The APK compiled, but unit tests failed. No installable artifact was published." + echo + if [ -n "$TEST_DIAGNOSTICS_URL" ]; then + echo "The [unit-test-results]($TEST_DIAGNOSTICS_URL) artifact contains the test log and any generated reports." + else + echo "The test diagnostics upload did not complete. See [the test log]($RUN_URL)." + fi + ;; + success:*) + echo "### Build incomplete" + echo + echo "The APK compiled, but unit tests did not complete successfully. See [the run]($RUN_URL)." + ;; + failure:*) echo "### ERROR: Build failed" echo echo "The compiler's errors ([full log]($RUN_URL)):" @@ -562,7 +612,7 @@ jobs: echo '```' echo "" ;; - skipped|cancelled) + skipped:*|cancelled:*) echo "### Not built" echo echo "The build did not run (see above, or [the run]($RUN_URL))." @@ -578,14 +628,6 @@ jobs: gh api -X POST "repos/${GITHUB_REPOSITORY}/issues/${PR}/comments" -F body=@/tmp/pr-report.md >/dev/null fi - - uses: actions/upload-artifact@v4 - with: - name: droiddeck-apk - path: app/build/outputs/apk/release/*.apk - if-no-files-found: error - retention-days: 30 - compression-level: 0 - sign: needs: build if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' diff --git a/app/build.gradle b/app/build.gradle index 5b29d72f..6b966a35 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -157,6 +157,10 @@ android { testOptions { unitTests.returnDefaultValues = true unitTests.includeAndroidResources = true + unitTests.all { + def logTarget = providers.systemProperty('robolectric.logging').orNull + if (logTarget != null) systemProperty 'robolectric.logging', logTarget + } } compileOptions { diff --git a/docs/development/astra-viture-stereo.md b/docs/development/astra-viture-stereo.md index 90849ffa..fd9f8307 100644 --- a/docs/development/astra-viture-stereo.md +++ b/docs/development/astra-viture-stereo.md @@ -47,9 +47,10 @@ documents a related failure on its separately identified REDMAGIC firmware. The [VITURE SDK matrix](https://www.viture.com/en-SG/developer/glasses-sdk/glasses) specifies full SBS at 3840×1080/60 for Pro. Persistent startup mode is restricted to Luma/Luma Pro. Among the Luma families supported here, 90 Hz stereo is an -Ultra capability. The connected Pro firmware matches the N6PL entry in the -[public updater catalog](https://static.viture.com/dfu-util/js/vers.js); that -fallback catalog does not establish whether the update service offers another build. +Ultra capability. The connected Pro firmware matches both the N6PL entry in the +[public updater catalog](https://static.viture.com/dfu-util/js/vers.js) and the newest +N6P entry in the [public release-note service](https://cloud.viture.dev/api/v1/system/releasenote) +checked on 2026-10-14. This does not rule out unpublished, device-specific updates. ## No-root hardware design to test