diff --git a/.github/workflows/pr-code-quality-reviewer.lock.yml b/.github/workflows/pr-code-quality-reviewer.lock.yml index 40f9477777c..5c633517b95 100644 --- a/.github/workflows/pr-code-quality-reviewer.lock.yml +++ b/.github/workflows/pr-code-quality-reviewer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"661ab4bd42bd83eff79d7d460f50a12e3cee567ac434b2d37a2480d9a0e20965","body_hash":"4d3260d49c3010a13ea7c49bba10f51f2b9f1c1473ceca69008cfe766a9b273c","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.63","copilot-sdk":"1.0.1"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"57c59bcb86591e8b21ad20298687f8d1adf895d5c4cf6f909d3339905428cc28","body_hash":"4d3260d49c3010a13ea7c49bba10f51f2b9f1c1473ceca69008cfe766a9b273c","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.63","copilot-sdk":"1.0.1"}} # gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"27d5ce7f107fe9357f9df03efb73ab90386fccae","version":"v5.0.5"},{"repo":"actions/cache/save","sha":"27d5ce7f107fe9357f9df03efb73ab90386fccae","version":"v5.0.5"},{"repo":"actions/checkout","sha":"df4cb1c069e1874edd31b4311f1884172cec0e10","version":"v6.0.3"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.4","digest":"sha256:b268ebf37df2428b19efcb383f001d65dc6a5ec10af43feb886d1a8477ab0e3a","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.4@sha256:b268ebf37df2428b19efcb383f001d65dc6a5ec10af43feb886d1a8477ab0e3a"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.4","digest":"sha256:3ea0d12a2d124db8ed6e2d18aff040e30ab3568161f258a132fccdeede4198cd","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.4@sha256:3ea0d12a2d124db8ed6e2d18aff040e30ab3568161f258a132fccdeede4198cd"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.4","digest":"sha256:72c378c029d2fad4684847ab44c329e526ac6b1a78cdf97656870ea11d201545","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.4@sha256:72c378c029d2fad4684847ab44c329e526ac6b1a78cdf97656870ea11d201545"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.4","digest":"sha256:87979038897e40caed22245b64d1daa796390d2dca289b99d3d1174c85740af8","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.4@sha256:87979038897e40caed22245b64d1daa796390d2dca289b99d3d1174c85740af8"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.26","digest":"sha256:d3b03f54eee3a8176818c9a52087623e45b7f644a28814337fcc0838e2534490","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.26@sha256:d3b03f54eee3a8176818c9a52087623e45b7f644a28814337fcc0838e2534490"},{"image":"ghcr.io/github/github-mcp-server:v1.3.0","digest":"sha256:5c83359327a0bacc3d34db730bea6557d39d341cee0bf6c58c9a896e33150e80","pinned_image":"ghcr.io/github/github-mcp-server:v1.3.0@sha256:5c83359327a0bacc3d34db730bea6557d39d341cee0bf6c58c9a896e33150e80"}]} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # diff --git a/scripts/prepare-objective-impact-report-dataset.sh b/scripts/prepare-objective-impact-report-dataset.sh index 8360226b616..38bcca9cee9 100644 --- a/scripts/prepare-objective-impact-report-dataset.sh +++ b/scripts/prepare-objective-impact-report-dataset.sh @@ -21,6 +21,11 @@ run_id="${GITHUB_RUN_ID:-}" server_url="${GITHUB_SERVER_URL:-https://github.com}" window_start=$(date -u -d '180 days ago' '+%Y-%m-%d' 2>/dev/null || date -u -v-180d '+%Y-%m-%d') generated_at=$(date -u +%Y-%m-%dT%H:%M:%SZ) +pr_list_limit="${OBJECTIVE_IMPACT_PR_LIST_LIMIT:-5000}" +if ! [[ "$pr_list_limit" =~ ^[0-9]+$ ]] || [ "$pr_list_limit" -lt 1 ]; then + echo "OBJECTIVE_IMPACT_PR_LIST_LIMIT must be a positive integer; falling back to 5000 (got: $pr_list_limit)" >&2 + pr_list_limit=5000 +fi cat > "$DATA_DIR/run-context.json" <=$window_start" \ - --limit 500 \ - --json number,title,url,mergedAt,closedAt,body,labels \ + --limit "$pr_list_limit" \ + --json number,title,url,mergedAt,closedAt,body,labels,closingIssuesReferences \ > "$DATA_DIR/merged-prs.json" || printf '%s\n' '[]' > "$DATA_DIR/merged-prs.json" fi @@ -140,21 +145,53 @@ else --repo "$repo" \ --state closed \ --search "closed:>=$window_start is:unmerged" \ - --limit 500 \ - --json number,title,url,mergedAt,closedAt,body,labels \ + --limit "$pr_list_limit" \ + --json number,title,url,mergedAt,closedAt,body,labels,closingIssuesReferences \ > "$DATA_DIR/closed-unmerged-prs.json" || printf '%s\n' '[]' > "$DATA_DIR/closed-unmerged-prs.json" fi jq ' - def linked_issue_numbers: + def linked_issue_numbers_from_body: [scan("(?i)(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\\s+#([0-9]+)")[]? | tonumber] | unique; - map(. + {linked_issue_numbers: ((.body // "") | linked_issue_numbers)}) + def linked_issue_numbers_from_graphql: + [ + .closingIssuesReferences.nodes[]?.number?, + .closingIssuesReferences[]?.number? + ] + | map(select(type == "number")) + | unique; + map( + . + { + linked_issue_numbers: ( + ( + ((.body // "") | linked_issue_numbers_from_body) + + (linked_issue_numbers_from_graphql) + ) | unique + ) + } + ) ' "$DATA_DIR/merged-prs.json" > "$DATA_DIR/merged-prs-linked.json" jq ' - def linked_issue_numbers: + def linked_issue_numbers_from_body: [scan("(?i)(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\\s+#([0-9]+)")[]? | tonumber] | unique; - map(. + {linked_issue_numbers: ((.body // "") | linked_issue_numbers)}) + def linked_issue_numbers_from_graphql: + [ + .closingIssuesReferences.nodes[]?.number?, + .closingIssuesReferences[]?.number? + ] + | map(select(type == "number")) + | unique; + map( + . + { + linked_issue_numbers: ( + ( + ((.body // "") | linked_issue_numbers_from_body) + + (linked_issue_numbers_from_graphql) + ) | unique + ) + } + ) ' "$DATA_DIR/closed-unmerged-prs.json" > "$DATA_DIR/closed-unmerged-prs-linked.json" jq -n \