enhance: split PR created vs merged metrics for accuracy
- Add separate steps for PR created metrics and PR merged metrics - Query PRs by merge date for more accurate merge timing data - Parse both pr_created_metrics.md and pr_merged_metrics.md files - Maintain backward compatibility with fallback to old pr_metrics.md - Fixes timing discrepancy where merge time was faster than response time
This commit is contained in:
45
.github/scripts/parse-metrics.mjs
vendored
45
.github/scripts/parse-metrics.mjs
vendored
@@ -73,30 +73,49 @@ function main() {
|
|||||||
console.log('⚠️ No issue_metrics.md found');
|
console.log('⚠️ No issue_metrics.md found');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse PR metrics
|
// Parse PR created metrics
|
||||||
if (existsSync('pr_metrics.md')) {
|
if (existsSync('pr_created_metrics.md')) {
|
||||||
console.log('📄 Found pr_metrics.md, parsing...');
|
console.log('📄 Found pr_created_metrics.md, parsing...');
|
||||||
const prContent = readFileSync('pr_metrics.md', 'utf8');
|
const prCreatedContent = readFileSync('pr_created_metrics.md', 'utf8');
|
||||||
|
|
||||||
metrics.prs_created = parseCountMetric(
|
metrics.prs_created = parseCountMetric(
|
||||||
prContent,
|
prCreatedContent,
|
||||||
'Total number of items created'
|
'Total number of items created'
|
||||||
);
|
);
|
||||||
// Prefer merged; fall back to closed if the generator doesn't emit "merged"
|
metrics.pr_avg_first_response = parseMetricsTable(
|
||||||
|
prCreatedContent,
|
||||||
|
'Time to first response'
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.log('⚠️ No pr_created_metrics.md found');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse PR merged metrics (for more accurate merge data)
|
||||||
|
if (existsSync('pr_merged_metrics.md')) {
|
||||||
|
console.log('📄 Found pr_merged_metrics.md, parsing...');
|
||||||
|
const prMergedContent = readFileSync('pr_merged_metrics.md', 'utf8');
|
||||||
|
|
||||||
|
metrics.prs_merged = parseCountMetric(
|
||||||
|
prMergedContent,
|
||||||
|
'Total number of items created'
|
||||||
|
);
|
||||||
|
// For merged PRs, "Time to close" is actually time to merge
|
||||||
|
metrics.pr_avg_merge_time = parseMetricsTable(prMergedContent, 'Time to close');
|
||||||
|
} else {
|
||||||
|
console.log('⚠️ No pr_merged_metrics.md found');
|
||||||
|
// Fallback: try old pr_metrics.md if it exists
|
||||||
|
if (existsSync('pr_metrics.md')) {
|
||||||
|
console.log('📄 Falling back to pr_metrics.md...');
|
||||||
|
const prContent = readFileSync('pr_metrics.md', 'utf8');
|
||||||
|
|
||||||
const mergedCount = parseCountMetric(prContent, 'Number of items merged');
|
const mergedCount = parseCountMetric(prContent, 'Number of items merged');
|
||||||
metrics.prs_merged = mergedCount || parseCountMetric(prContent, 'Number of items closed');
|
metrics.prs_merged = mergedCount || parseCountMetric(prContent, 'Number of items closed');
|
||||||
|
|
||||||
metrics.pr_avg_first_response = parseMetricsTable(
|
|
||||||
prContent,
|
|
||||||
'Time to first response'
|
|
||||||
);
|
|
||||||
// Prefer "Average time to merge"; fall back to "Time to close"
|
|
||||||
const maybeMergeTime = parseMetricsTable(prContent, 'Average time to merge');
|
const maybeMergeTime = parseMetricsTable(prContent, 'Average time to merge');
|
||||||
metrics.pr_avg_merge_time = maybeMergeTime !== 'N/A'
|
metrics.pr_avg_merge_time = maybeMergeTime !== 'N/A'
|
||||||
? maybeMergeTime
|
? maybeMergeTime
|
||||||
: parseMetricsTable(prContent, 'Time to close');
|
: parseMetricsTable(prContent, 'Time to close');
|
||||||
} else {
|
}
|
||||||
console.log('⚠️ No pr_metrics.md found');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Output for GitHub Actions
|
// Output for GitHub Actions
|
||||||
|
|||||||
11
.github/workflows/weekly-metrics-discord.yml
vendored
11
.github/workflows/weekly-metrics-discord.yml
vendored
@@ -46,12 +46,19 @@ jobs:
|
|||||||
HIDE_LABEL_METRICS: false
|
HIDE_LABEL_METRICS: false
|
||||||
OUTPUT_FILE: issue_metrics.md
|
OUTPUT_FILE: issue_metrics.md
|
||||||
|
|
||||||
- name: Generate PR metrics
|
- name: Generate PR created metrics
|
||||||
uses: github/issue-metrics@v3
|
uses: github/issue-metrics@v3
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
SEARCH_QUERY: "repo:${{ github.repository }} is:pr created:${{ env.first_day }}..${{ env.last_day }}"
|
SEARCH_QUERY: "repo:${{ github.repository }} is:pr created:${{ env.first_day }}..${{ env.last_day }}"
|
||||||
OUTPUT_FILE: pr_metrics.md
|
OUTPUT_FILE: pr_created_metrics.md
|
||||||
|
|
||||||
|
- name: Generate PR merged metrics
|
||||||
|
uses: github/issue-metrics@v3
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
SEARCH_QUERY: "repo:${{ github.repository }} is:pr is:merged merged:${{ env.first_day }}..${{ env.last_day }}"
|
||||||
|
OUTPUT_FILE: pr_merged_metrics.md
|
||||||
|
|
||||||
- name: Parse metrics
|
- name: Parse metrics
|
||||||
id: metrics
|
id: metrics
|
||||||
|
|||||||
Reference in New Issue
Block a user