Skip to content

feat: Add CSV & PDF Export Functionality (#681) #306

feat: Add CSV & PDF Export Functionality (#681)

feat: Add CSV & PDF Export Functionality (#681) #306

name: Reopen issues on PR revert
on:
pull_request_target:
types: [closed]
permissions:
pull-requests: read
issues: write
contents: read
jobs:
reopen-issues:
runs-on: ubuntu-latest
# Run only if PR was merged AND looks like a revert PR
if: >
github.event.pull_request.merged == true &&
startsWith(github.event.pull_request.title, 'Revert')
steps:
- name: Reopen issues referenced in reverted PR
uses: actions/github-script@v7
with:
script: |
const pr = context.payload.pull_request;
// Combine PR title + body
const text = `${pr.title}\n${pr.body || ""}`;
// Extract issue numbers like #12
const issueNumbers = [...text.matchAll(/#(\d+)/g)]
.map(match => match[1]);
if (issueNumbers.length === 0) {
console.log("No issues referenced in revert PR.");
return;
}
for (const issueNumber of issueNumbers) {
try {
const issue = await github.rest.issues.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
});
// Reopen only if currently closed
if (issue.data.state === "closed") {
await github.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
state: "open",
});
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
body: `🔄 This issue was automatically reopened because PR #${pr.number} reverted a previous change.`,
});
console.log(`Reopened issue #${issueNumber}`);
} else {
console.log(`Issue #${issueNumber} already open.`);
}
} catch (error) {
console.log(
`Failed to process issue #${issueNumber}: ${error.message}`
);
}
}