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