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