Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions .github/workflows/ci-comment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
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@v4
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}`,
});

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;
}
}

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 }}
2 changes: 1 addition & 1 deletion .github/workflows/ci-e2e-all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,4 @@ jobs:
uses: ./.github/workflows/ci-e2e-opensearch.yml

query:
uses: ./.github/workflows/ci-e2e-query.yml
uses: ./.github/workflows/ci-e2e-query.yml
3 changes: 0 additions & 3 deletions scripts/e2e/metrics_summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,6 @@ def generate_diff_summary(changes):
summary.append(f" - Added variants: {len(versions['added'])}")
summary.append(f" - Removed variants: {len(versions['removed'])}")

# Preserve the artifact link placeholder
summary.append("\n➡️ [View full metrics file]($LINK_TO_ARTIFACT)")

return "\n".join(summary)

def main():
Expand Down
Loading