Metrics Comparison and Post Comment #54
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Metrics Comparison and Post Comment | |
on: | |
workflow_run: | |
workflows: ["E2E Tests"] | |
types: [completed] | |
permissions: | |
contents: read | |
pull-requests: write | |
jobs: | |
metrics-comparison: | |
name: Compare Metrics | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 | |
with: | |
ref: ${{ github.event.repository.default_branch }} | |
- name: Install adm-zip | |
run: npm install adm-zip | |
- name: Download all metrics artifacts from triggering workflow | |
id: download-artifacts | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const { owner, repo } = context.repo; | |
const workflowRunId = context.payload.workflow_run.id; | |
// List all artifacts from the triggering workflow run | |
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ | |
owner, | |
repo, | |
run_id: workflowRunId, | |
}); | |
// Download and extract each artifact | |
const fs = require('fs'); | |
const path = require('path'); | |
const AdmZip = require('adm-zip'); | |
for (const artifact of artifacts.data.artifacts) { | |
const download = await github.rest.actions.downloadArtifact({ | |
owner, | |
repo, | |
artifact_id: artifact.id, | |
archive_format: 'zip', | |
}); | |
const zip = new AdmZip(Buffer.from(download.data)); | |
zip.extractAllTo(path.join(process.env.GITHUB_WORKSPACE, '.metrics', artifact.name), true); | |
console.log(`Extracted artifact: ${artifact.name}`); | |
} | |
// Extract PR number (adapted from PDF logic) | |
let prNumber = null; | |
const pullRequest = await github.rest.pulls.list({ | |
owner, | |
repo, | |
head: `${context.payload.workflow_run.head_repository.full_name}:${context.payload.workflow_run.head_branch}`, | |
}); | |
const prArtifactPath = path.join(process.env.GITHUB_WORKSPACE, '.metrics', 'pr_number', 'pr_number.txt'); | |
if (fs.existsSync(prArtifactPath)) { | |
prNumber = fs.readFileSync(prArtifactPath, 'utf8').trim(); | |
console.log(`Found PR Number from artifact: ${prNumber}`); | |
} else { | |
if (pullRequest.data.length > 0) { | |
prNumber = pullRequest.data[0].number; | |
} else { | |
// Fallback to commit SHA if needed | |
const commitSha = context.payload.workflow_run.head_sha; | |
const prsForCommit = await github.rest.repos.listPullRequestsAssociatedWithCommit({ | |
owner, | |
repo, | |
commit_sha: commitSha, | |
}); | |
if (prsForCommit.data.length > 0) { | |
prNumber = prsForCommit.data[0].number; | |
console.log(`Found PR via commit SHA: #${prNumber}`); | |
} | |
} | |
} | |
if (prNumber) { | |
console.log(`Found PR Number: ${prNumber}`); | |
core.setOutput('pr_number', prNumber); | |
} else { | |
console.log('Could not determine PR number. Skipping comment.'); | |
core.setFailed('Could not determine PR number for commenting.'); | |
} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install dependencies | |
if: success() && steps.download-artifacts.outputs.pr_number | |
run: | | |
python3 -m pip install prometheus-client | |
npm install @actions/core @actions/github | |
- name: Compare metrics and generate summary | |
if: success() && steps.download-artifacts.outputs.pr_number | |
id: compare-metrics | |
shell: bash | |
run: | | |
bash ./scripts/e2e/metrics_summary.sh | |
env: | |
LINK_TO_ARTIFACT: "https://github.com/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}" | |
- name: Post PR comment with combined metrics summary | |
if: steps.compare-metrics.outputs.DIFF_FOUND == 'true' && steps.download-artifacts.outputs.pr_number | |
uses: thollander/actions-comment-pull-request@v3 | |
with: | |
file-path: ./.metrics/combined_summary.md | |
github-token: '${{ secrets.GITHUB_TOKEN }}' | |
comment-tag: "## Metrics Comparison Summary" | |
pr-number: ${{ steps.download-artifacts.outputs.pr_number }} |