bug: Requirements workflow carries stale approval status when regenerating LLDs #84
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: Unblock Dependent Issues | |
| on: | |
| issues: | |
| types: [closed] | |
| jobs: | |
| unblock-dependents: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| issues: write | |
| steps: | |
| - name: Find and unblock dependent issues | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const closedIssueNumber = context.payload.issue.number; | |
| const repo = context.repo; | |
| console.log(`Issue #${closedIssueNumber} was closed. Searching for dependent issues...`); | |
| // Search for issues that mention this one as a blocker | |
| // Common patterns: "Blocked by #N", "blocked by #N", "Depends on #N" | |
| const searchQuery = `repo:${repo.owner}/${repo.repo} is:issue is:open "Blocked by #${closedIssueNumber}" OR "blocked by #${closedIssueNumber}" OR "Depends on #${closedIssueNumber}" OR "depends on #${closedIssueNumber}"`; | |
| console.log(`Search query: ${searchQuery}`); | |
| const searchResult = await github.rest.search.issuesAndPullRequests({ | |
| q: searchQuery, | |
| per_page: 100 | |
| }); | |
| console.log(`Found ${searchResult.data.total_count} potentially dependent issues`); | |
| for (const issue of searchResult.data.items) { | |
| // Skip if it's the same issue somehow | |
| if (issue.number === closedIssueNumber) continue; | |
| // Check if issue has the "blocked" label | |
| const hasBlockedLabel = issue.labels.some(label => label.name === 'blocked'); | |
| if (hasBlockedLabel) { | |
| console.log(`Removing 'blocked' label from #${issue.number}: ${issue.title}`); | |
| // Remove the blocked label | |
| try { | |
| await github.rest.issues.removeLabel({ | |
| owner: repo.owner, | |
| repo: repo.repo, | |
| issue_number: issue.number, | |
| name: 'blocked' | |
| }); | |
| // Add a comment noting the unblock | |
| await github.rest.issues.createComment({ | |
| owner: repo.owner, | |
| repo: repo.repo, | |
| issue_number: issue.number, | |
| body: `## Blocker Resolved\n\n#${closedIssueNumber} has been closed. This issue is no longer blocked.\n\n---\n*Automated by The Patrician*` | |
| }); | |
| console.log(`Successfully unblocked #${issue.number}`); | |
| } catch (error) { | |
| console.log(`Failed to unblock #${issue.number}: ${error.message}`); | |
| } | |
| } else { | |
| console.log(`#${issue.number} mentions blocker but doesn't have 'blocked' label, skipping`); | |
| } | |
| } | |
| console.log('Unblock check complete'); |