Skip to content

Fix CleanUpStalePRChecks to handle UNKNOWN mergeable state#8165

Draft
Copilot wants to merge 1 commit into
mainfrom
copilot/fix-stale-pr-status-checks
Draft

Fix CleanUpStalePRChecks to handle UNKNOWN mergeable state#8165
Copilot wants to merge 1 commit into
mainfrom
copilot/fix-stale-pr-status-checks

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 15, 2026

Problem

The "Clean Up Stale PR Status Checks" workflow only cleans up stale PR builds when the PR's mergeable state is MERGEABLE. However, GitHub sometimes reports the mergeable state as UNKNOWN (when it hasn't computed mergeability yet), causing those PRs to be skipped and their stale status checks to remain.

Fix

Changed the condition to only skip PRs with CONFLICTING state (actual merge conflicts that need manual resolution). PRs in both MERGEABLE and UNKNOWN states are now processed for stale check cleanup.

Changes

  • .github/actions/CleanUpStalePRChecks/action.ps1: Replaced $pr.mergeable -ne "MERGEABLE" check with $pr.mergeable -eq "CONFLICTING" to allow processing of PRs in UNKNOWN state.

Previously, the workflow only processed PRs in MERGEABLE state,
skipping PRs where GitHub reports the mergeable state as UNKNOWN
(which happens when mergeability hasn't been computed yet).

Now the workflow only skips PRs with CONFLICTING state (actual
merge conflicts), and processes PRs in both MERGEABLE and UNKNOWN
states.

Agent-Logs-Url: https://github.com/microsoft/BCApps/sessions/9253504e-b5c0-4cd7-90a0-cf30c897fbe3

Co-authored-by: mazhelez <43066499+mazhelez@users.noreply.github.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 1, 2026

Could not find a linked ADO work item. Please link one by using the pattern 'AB#' followed by the relevant work item number. You may use the 'Fixes' keyword to automatically resolve the work item when the pull request is merged. E.g. 'Fixes AB#1234'

onbuyuka pushed a commit that referenced this pull request Jun 1, 2026
## Summary

Adds a scheduled workflow that automatically labels open PRs whose
GitHub Actions workflow runs are in the `action_required` state — i.e.
waiting for a maintainer with write access to click *Approve and run*.

This lets us easily find PRs that need a manual approval click via:

```
is:pr is:open label:needs-approval
```

…or:

```
gh pr list --repo microsoft/BCApps --label needs-approval
```

## How it works

- **Trigger**: `cron: '*/15 * * * *'` + `workflow_dispatch` (with
optional `whatIf` dry-run input). Mirrors the pattern in
`CleanUpStalePRChecks.yaml`.
- **Reconciliation** is idempotent on every run:
1. Ensures the `needs-approval` label exists (creates it if missing,
color `#FBCA04`).
2. Fetches workflow runs with `status=action_required` from the Actions
API.
3. Resolves each run to a PR number (with a fork-PR fallback via
`commits/{sha}/pulls` since fork-PR workflow runs have an empty
`pull_requests` array).
  4. Computes the diff against PRs currently carrying the label.
5. Adds the label to new awaiters, removes it from PRs no longer
awaiting (approved, or PR closed).
- Guarded by `if: github.repository_owner == 'microsoft'` so forks don't
run it.
- Follows existing repo conventions: pwsh, SHA-pinned
`actions/checkout`, composite action under `.github/actions/`, GitHub
step summary.

## Files

- `.github/workflows/LabelPRsAwaitingApproval.yaml` — workflow (schedule
+ manual)
- `.github/actions/LabelPRsAwaitingApproval/action.yaml` — composite
action wrapper
- `.github/actions/LabelPRsAwaitingApproval/action.ps1` — reconciliation
logic

## Validation

Dry-run against `microsoft/BCApps` (using `-WhatIf`) successfully:
- Detected 100 `action_required` workflow runs
- Deduped to 5 unique open PRs awaiting approval (#7410, #7699, #7843,
#8165, #8313)
- Correctly computed: would add label to 5 PRs, remove from 0

## Permissions

The workflow requests minimum required scopes:
- `actions: read` — list action_required runs
- `contents: read` — checkout the composite action
- `issues: write` + `pull-requests: write` — manage the label

Uses `github.token` — no additional secrets needed.

## Caveats / future enhancements

- Page size is 100 with no pagination. Given BCApps' volume of
currently-awaiting runs, this is well within bounds; can be paginated
later if needed.
- Latency is up to 15 minutes. A future enhancement could add
`workflow_run: types: [completed]` for near-instant labelling.



[AB#637233](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/637233)

---------

Co-authored-by: Magnus Hartvig Grønbech <magnushar@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Build: Automation Workflows and other setup in .github folder

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants