diff --git a/.github/workflows/pr-evaluation-run.yml b/.github/workflows/pr-evaluation-run.yml index 475a37b..a417b8e 100644 --- a/.github/workflows/pr-evaluation-run.yml +++ b/.github/workflows/pr-evaluation-run.yml @@ -30,6 +30,38 @@ jobs: BASE_SHA: ${{ inputs.base_sha }} PR_CHECKOUT_REF: ${{ format('refs/pull/{0}/head', inputs.pr_number) }} steps: + - name: Fetch PR head SHA + id: prmeta + uses: actions/github-script@v7 + with: + script: | + const pr = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: Number('${{ env.PR_NUMBER }}') + }); + core.setOutput('head_sha', pr.data.head.sha); + + - name: Create in-progress PR check + id: checkrun + uses: actions/github-script@v7 + with: + script: | + const result = await github.rest.checks.create({ + owner: context.repo.owner, + repo: context.repo.repo, + name: 'Router Submission Evaluation (/evaluate)', + head_sha: '${{ steps.prmeta.outputs.head_sha }}', + status: 'in_progress', + started_at: new Date().toISOString(), + details_url: `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`, + output: { + title: 'Evaluation started', + summary: 'Router evaluation is running.' + } + }); + core.setOutput('id', String(result.data.id)); + - name: Checkout base repository (for evaluation scripts) uses: actions/checkout@v4 with: @@ -223,3 +255,38 @@ jobs: body: comment }); console.log('Successfully posted evaluation results as PR comment'); + + - name: Complete PR check + if: ${{ always() && steps.checkrun.outputs.id != '' }} + uses: actions/github-script@v7 + env: + DETECTED_ROUTER: ${{ steps.detect.outputs.router }} + DETECT_OUTCOME: ${{ steps.detect.outcome }} + EVALUATE_OUTCOME: ${{ steps.evaluate.outcome }} + with: + script: | + let conclusion = 'success'; + let title = 'Evaluation completed'; + let summary = 'Router evaluation finished successfully.'; + + if (!process.env.DETECTED_ROUTER) { + conclusion = process.env.DETECT_OUTCOME === 'success' ? 'neutral' : 'failure'; + title = process.env.DETECT_OUTCOME === 'success' ? 'No router file detected' : 'Evaluation setup failed'; + summary = process.env.DETECT_OUTCOME === 'success' + ? 'No changed prediction file was detected for this PR, so evaluation was skipped.' + : 'Failed while detecting prediction files for this PR.'; + } else if (process.env.EVALUATE_OUTCOME !== 'success') { + conclusion = 'failure'; + title = 'Evaluation failed'; + summary = 'The evaluation step failed. Check this workflow run logs for details.'; + } + + await github.rest.checks.update({ + owner: context.repo.owner, + repo: context.repo.repo, + check_run_id: Number('${{ steps.checkrun.outputs.id }}'), + status: 'completed', + conclusion, + completed_at: new Date().toISOString(), + output: { title, summary } + });