diff --git a/.github/workflows/ci_weekly_report.yaml b/.github/workflows/ci_weekly_report.yaml index c5c98b46b5..22b8745872 100644 --- a/.github/workflows/ci_weekly_report.yaml +++ b/.github/workflows/ci_weekly_report.yaml @@ -10,38 +10,30 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +env: + CI_RUNS: ${{ github.event.inputs.ci_runs || '50' }} + jobs: setup: if: github.repository == 'commaai/openpilot' runs-on: ubuntu-latest outputs: - ci_runs: ${{ steps.ci_runs_setup.outputs.value }} + ci_runs: ${{ steps.ci_runs_setup.outputs.matrix }} steps: - id: ci_runs_setup + name: CI_RUNS=${{ env.CI_RUNS }} 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 + matrix=$(python3 -c "import json; print(json.dumps({ 'run_number' : list(range(${{ env.CI_RUNS }})) }))") + echo "matrix=$matrix" >> $GITHUB_OUTPUT - 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)}} + matrix: ${{fromJSON(needs.setup.outputs.ci_runs)}} uses: commaai/openpilot/.github/workflows/ci_weekly_run.yaml@master with: - run_number: ${{ matrix.value }} + run_number: ${{ matrix.run_number }} report: needs: [ci_matrix_run] @@ -62,62 +54,48 @@ jobs: }) var report = {} jobs.slice(1, jobs.length-1).forEach(job => { - const jobName = job.name.split('/')[2].trim(); + if (job.conclusion === "skipped") return; + const jobName = job.name.split(" / ")[2]; + const runRegex = /\((.*?)\)/; + const run = job.name.match(runRegex)[1]; report[jobName] = report[jobName] || { successes: [], failures: [], cancelled: [] }; switch (job.conclusion) { case "success": - report[jobName].successes.push(job.html_url); break; + report[jobName].successes.push({ "run_number": run, "link": job.html_url}); break; case "failure": - report[jobName].failures.push(job.html_url); break; + report[jobName].failures.push({ "run_number": run, "link": job.html_url }); break; case "cancelled": - report[jobName].cancelled.push(job.html_url); break; + report[jobName].cancelled.push({ "run_number": run, "link": job.html_url }); break; } }); - return JSON.stringify(report); + return JSON.stringify({"jobs": 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 "" - echo "" - echo " " - echo " " - echo " " - echo " " - echo " " - echo " " - echo "" - jq -r ' - "", - keys[] as $job | - "", - " ", - " ", - " ", - " ", - "" - ' job_results.json - echo "" - echo "
JobSucceeded ✅Failed ❌Cancelled (timed out) ⏰
\($job)", - "
", - " (\(.[$job].successes | length))", - " \(.[$job].successes[])
", - "
", - "
", - "
", - " (\(.[$job].failures | length))", - " \(.[$job].failures[])
", - "
", - "
", - "
", - " (\(.[$job].cancelled | length))", - " \(.[$job].cancelled[])
", - "
", - "
" - } - echo "# CI Job Summary" >> $GITHUB_STEP_SUMMARY - generate_html_table >> $GITHUB_STEP_SUMMARY + cat <> template.html + + + + + + + + + + + {% for key in jobs.keys() %} + + + + + + {% endfor %} +
Job✅ Passing❌ Failure Details
{% for i in range(5) %}{% if i+1 <= (5 * jobs[key]["successes"]|length // ${{ env.CI_RUNS }}) %}🟩{% else %}🟥{% endif %}{% endfor%}{{ key }}{{ 100 * jobs[key]["successes"]|length // ${{ env.CI_RUNS }} }}%{% if jobs[key]["failures"]|length > 0 %}
{% for failure in jobs[key]["failures"] %}Log for run #{{ failure['run_number'] }}
{% endfor %}
{% else %}{% endif %}
+ EOF + pip install jinja2-cli + echo $JOB_RESULTS | jinja2 template.html > report.html + echo "# CI Test Report - ${{ env.CI_RUNS }} Runs" >> $GITHUB_STEP_SUMMARY + cat report.html >> $GITHUB_STEP_SUMMARY