name: "mici raylib ui preview" on: push: branches: - master pull_request_target: types: [assigned, opened, synchronize, reopened, edited] branches: - 'master' paths: - 'selfdrive/assets/**' - 'selfdrive/ui/**' - 'system/ui/**' workflow_dispatch: env: UI_JOB_NAME: "Create mici raylib UI Report" REPORT_NAME: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && 'master' || github.event.number }} SHA: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.sha || github.event.pull_request.head.sha }} BRANCH_NAME: "openpilot/pr-${{ github.event.number }}-mici-raylib-ui" MASTER_BRANCH_NAME: "openpilot_master_ui_mici_raylib" # All report files are pushed here REPORT_FILES_BRANCH_NAME: "mici-raylib-ui-reports" jobs: preview: if: github.repository == 'commaai/openpilot' name: preview runs-on: ubuntu-latest timeout-minutes: 20 permissions: contents: read pull-requests: write actions: read steps: - uses: actions/checkout@v6 with: submodules: true - name: Waiting for ui generation to end uses: lewagon/wait-on-check-action@v1.3.4 with: ref: ${{ env.SHA }} check-name: ${{ env.UI_JOB_NAME }} repo-token: ${{ secrets.GITHUB_TOKEN }} allowed-conclusions: success wait-interval: 20 - name: Getting workflow run ID id: get_run_id run: | echo "run_id=$(curl https://api.github.com/repos/${{ github.repository }}/commits/${{ env.SHA }}/check-runs | jq -r '.check_runs[] | select(.name == "${{ env.UI_JOB_NAME }}") | .html_url | capture("(?[0-9]+)") | .number')" >> $GITHUB_OUTPUT - name: Getting proposed ui # filename: pr_ui/mici_ui_replay.mp4 id: download-artifact uses: dawidd6/action-download-artifact@v6 with: github_token: ${{ secrets.GITHUB_TOKEN }} run_id: ${{ steps.get_run_id.outputs.run_id }} search_artifacts: true name: mici-raylib-report-1-${{ env.REPORT_NAME }} path: ${{ github.workspace }}/pr_ui - name: Getting master ui # filename: master_ui_raylib/mici_ui_replay.mp4 uses: actions/checkout@v6 with: repository: commaai/ci-artifacts ssh-key: ${{ secrets.CI_ARTIFACTS_DEPLOY_KEY }} path: ${{ github.workspace }}/master_ui_raylib ref: ${{ env.MASTER_BRANCH_NAME }} - name: Saving new master ui if: github.ref == 'refs/heads/master' && github.event_name == 'push' working-directory: ${{ github.workspace }}/master_ui_raylib run: | git checkout --orphan=new_master_ui_mici_raylib git rm -rf * git branch -D ${{ env.MASTER_BRANCH_NAME }} git branch -m ${{ env.MASTER_BRANCH_NAME }} git config user.name "GitHub Actions Bot" git config user.email "<>" mv ${{ github.workspace }}/pr_ui/* . git add . git commit -m "mici raylib video for commit ${{ env.SHA }}" git push origin ${{ env.MASTER_BRANCH_NAME }} --force - name: Setup FFmpeg uses: AnimMouse/setup-ffmpeg@ae28d57dabbb148eff63170b6bf7f2b60062cbae - name: Finding diff if: github.event_name == 'pull_request_target' id: find_diff run: | # Find the video file from PR pr_video="${{ github.workspace }}/pr_ui/mici_ui_replay_proposed.mp4" mv "${{ github.workspace }}/pr_ui/mici_ui_replay.mp4" "$pr_video" master_video="${{ github.workspace }}/pr_ui/mici_ui_replay_master.mp4" mv "${{ github.workspace }}/master_ui_raylib/mici_ui_replay.mp4" "$master_video" # Run report export PYTHONPATH=${{ github.workspace }} baseurl="https://github.com/commaai/ci-artifacts/raw/refs/heads/${{ env.BRANCH_NAME }}" diff_exit_code=0 python3 ${{ github.workspace }}/selfdrive/ui/tests/diff/diff.py "${{ github.workspace }}/pr_ui/mici_ui_replay_master.mp4" "${{ github.workspace }}/pr_ui/mici_ui_replay_proposed.mp4" "diff.html" --basedir "$baseurl" --no-open || diff_exit_code=$? # Copy diff report files cp ${{ github.workspace }}/selfdrive/ui/tests/diff/report/diff.html ${{ github.workspace }}/pr_ui/ cp ${{ github.workspace }}/selfdrive/ui/tests/diff/report/diff.mp4 ${{ github.workspace }}/pr_ui/ REPORT_URL="https://commaai.github.io/ci-artifacts/diff_pr_${{ github.event.number }}.html" if [ $diff_exit_code -eq 0 ]; then DIFF="✅ Videos are identical! [View Diff Report]($REPORT_URL)" else DIFF="❌ Videos differ! [View Diff Report]($REPORT_URL)" fi echo "DIFF=$DIFF" >> "$GITHUB_OUTPUT" - name: Saving proposed ui if: github.event_name == 'pull_request_target' working-directory: ${{ github.workspace }}/master_ui_raylib run: | # Overwrite PR branch w/ proposed ui, and master ui at this point in time for future reference git config user.name "GitHub Actions Bot" git config user.email "<>" git checkout --orphan=${{ env.BRANCH_NAME }} git rm -rf * mv ${{ github.workspace }}/pr_ui/* . git add . git commit -m "mici raylib video for PR #${{ github.event.number }}" git push origin ${{ env.BRANCH_NAME }} --force # Append diff report to report files branch git fetch origin ${{ env.REPORT_FILES_BRANCH_NAME }} git checkout ${{ env.REPORT_FILES_BRANCH_NAME }} cp ${{ github.workspace }}/selfdrive/ui/tests/diff/report/diff.html diff_pr_${{ github.event.number }}.html git add diff_pr_${{ github.event.number }}.html git commit -m "mici raylib ui diff report for PR #${{ github.event.number }}" || echo "No changes to commit" git push origin ${{ env.REPORT_FILES_BRANCH_NAME }} - name: Comment Video on PR if: github.event_name == 'pull_request_target' uses: thollander/actions-comment-pull-request@v2 with: message: | ## mici raylib UI Preview ${{ steps.find_diff.outputs.DIFF }} comment_tag: run_id_video_mici_raylib pr_number: ${{ github.event.number }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}