parent
							
								
									8e3b18c3a0
								
							
						
					
					
						commit
						42cee115ad
					
				
				 6 changed files with 168 additions and 8 deletions
			
			
		| @ -0,0 +1,123 @@ | ||||
| name: weekly CI test report | ||||
| on: | ||||
|   schedule: | ||||
|     - cron: '37 9 * * 1' # 9:37AM UTC -> 2:37AM PST every monday | ||||
|   workflow_dispatch: | ||||
|     inputs: | ||||
|       ci_runs: | ||||
|         description: 'The amount of runs to trigger in CI test report' | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.ref }} | ||||
|   cancel-in-progress: true | ||||
| 
 | ||||
| jobs: | ||||
|   setup: | ||||
|     if: github.repository == 'commaai/openpilot' | ||||
|     runs-on: ubuntu-latest | ||||
|     outputs: | ||||
|       ci_runs: ${{ steps.ci_runs_setup.outputs.value }} | ||||
|     steps: | ||||
|       - id: ci_runs_setup | ||||
|         run: | | ||||
|           CI_RUNS=${{ inputs.ci_runs || '50' }} | ||||
|           mylist="value=[" | ||||
| 
 | ||||
|           for i in $(seq 1 $CI_RUNS); | ||||
|           do | ||||
|               if [ $i != $CI_RUNS ]; then | ||||
|                   mylist+="\"$i\", " | ||||
|               else | ||||
|                   mylist+="\"$i\"]" | ||||
|               fi | ||||
|           done | ||||
| 
 | ||||
|           echo "$mylist" >> $GITHUB_OUTPUT | ||||
|           echo "Number of CI runs for report: $CI_RUNS" | ||||
|   ci_matrix_run: | ||||
|     needs: [ setup ] | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         value: ${{fromJSON(needs.setup.outputs.ci_runs)}} | ||||
|     uses: commaai/openpilot/.github/workflows/ci_weekly_run.yaml@master | ||||
|     with: | ||||
|       run_number: ${{ matrix.value }} | ||||
| 
 | ||||
|   report: | ||||
|     needs: [ci_matrix_run] | ||||
|     runs-on: ubuntu-latest | ||||
|     if: always() | ||||
|     steps: | ||||
|       - name: Get job results | ||||
|         uses: actions/github-script@v7 | ||||
|         id: get-job-results | ||||
|         with: | ||||
|           script: | | ||||
|             const jobs = await github | ||||
|               .paginate("GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt}/jobs", { | ||||
|                 owner: "commaai", | ||||
|                 repo: "${{ github.event.repository.name }}", | ||||
|                 run_id: "${{ github.run_id }}", | ||||
|                 attempt: "${{ github.run_attempt }}", | ||||
|               }) | ||||
|             var report = {} | ||||
|             jobs.slice(1, jobs.length-1).forEach(job => { | ||||
|               const jobName = job.name.split('/')[2].trim(); | ||||
|               report[jobName] = report[jobName] || { successes: [], failures: [], cancelled: [] }; | ||||
|               switch (job.conclusion) { | ||||
|                 case "success": | ||||
|                   report[jobName].successes.push(job.html_url); break; | ||||
|                 case "failure": | ||||
|                   report[jobName].failures.push(job.html_url); break; | ||||
|                 case "cancelled": | ||||
|                   report[jobName].cancelled.push(job.html_url); break; | ||||
|               } | ||||
|             }); | ||||
|             return JSON.stringify(report); | ||||
| 
 | ||||
|       - name: Add job results to summary | ||||
|         env: | ||||
|           JOB_RESULTS: ${{ fromJSON(steps.get-job-results.outputs.result) }} | ||||
|         run: | | ||||
|           echo $JOB_RESULTS > job_results.json | ||||
|           generate_html_table() { | ||||
|             echo "<table>" | ||||
|             echo "<thead>" | ||||
|             echo "  <tr>" | ||||
|             echo "    <th>Job</th>" | ||||
|             echo "    <th>Succeeded ✅</th>" | ||||
|             echo "    <th>Failed ❌</th>" | ||||
|             echo "    <th>Cancelled (timed out) ⏰</th>" | ||||
|             echo "  </tr>" | ||||
|             echo "</thead>" | ||||
|             jq -r ' | ||||
|               "<tbody>", | ||||
|               keys[] as $job | | ||||
|               "<tr>", | ||||
|               "  <td>\($job)</td>", | ||||
|               "  <td>", | ||||
|               "    <details>", | ||||
|               "      <summary>(\(.[$job].successes | length))</summary>", | ||||
|               "      \(.[$job].successes[])<br>", | ||||
|               "    </details>", | ||||
|               "  </td>", | ||||
|               "  <td>", | ||||
|               "    <details>", | ||||
|               "      <summary>(\(.[$job].failures | length))</summary>", | ||||
|               "      \(.[$job].failures[])<br>", | ||||
|               "    </details>", | ||||
|               "  </td>", | ||||
|               "  <td>", | ||||
|               "    <details>", | ||||
|               "      <summary>(\(.[$job].cancelled | length))</summary>", | ||||
|               "      \(.[$job].cancelled[])<br>", | ||||
|               "    </details>", | ||||
|               "  </td>", | ||||
|               "</tr>" | ||||
|             ' job_results.json | ||||
|             echo  "</tbody>" | ||||
|             echo  "</table>" | ||||
|           } | ||||
|           echo "# CI Job Summary" >> $GITHUB_STEP_SUMMARY | ||||
|           generate_html_table >> $GITHUB_STEP_SUMMARY | ||||
| 
 | ||||
| @ -0,0 +1,21 @@ | ||||
| name: weekly CI test run | ||||
| on: | ||||
|   workflow_call: | ||||
|     inputs: | ||||
|       run_number: | ||||
|         required: true | ||||
|         type: string | ||||
| 
 | ||||
| concurrency: | ||||
|   group: ci-run-${{ inputs.run_number }}-${{ github.ref }} | ||||
|   cancel-in-progress: true | ||||
| 
 | ||||
| jobs: | ||||
|   selfdrive_tests: | ||||
|     uses: commaai/openpilot/.github/workflows/selfdrive_tests.yaml@master | ||||
|     with: | ||||
|       run_number: ${{ inputs.run_number }} | ||||
|   tools_tests: | ||||
|     uses: commaai/openpilot/.github/workflows/tools_tests.yaml@master | ||||
|     with: | ||||
|       run_number: ${{ inputs.run_number }} | ||||
					Loading…
					
					
				
		Reference in new issue