Skip to content

Commit

Permalink
Final PR reminder implemented
Browse files Browse the repository at this point in the history
  • Loading branch information
csehatt741 committed Feb 19, 2025
1 parent 0da42b3 commit b4b6b31
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 25 deletions.
71 changes: 47 additions & 24 deletions .github/workflows/issue-pr-reminder.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,21 @@ jobs:
- uses: actions/github-script@v7
env:
CREATE_PR_REMINDER_ENABLED: ${{ vars.CREATE_PR_REMINDER_ENABLED }}
CREATE_PR_REMINDER_AFTER_DAYS: ${{ vars.CREATE_PR_REMINDER_AFTER_DAYS }}
CREATE_PR_REMINDER_AFTER_ISSUE_ASSIGNED_DAYS: ${{ vars.CREATE_PR_REMINDER_AFTER_ISSUE_ASSIGNED_DAYS }}
CREATE_PR_REMINDER_BEFORE_ISSUE_UNASSIGNED_DAYS: ${{ vars.CREATE_PR_REMINDER_BEFORE_ISSUE_UNASSIGNED_DAYS }}
UNASSIGN_ISSUE_AFTER_DAYS: ${{ vars.UNASSIGN_ISSUE_AFTER_DAYS }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const owner = 'keyshade-xyz';
const repo = 'keyshade';
const createPrReminderEnabled = process.env.CREATE_PR_REMINDER_ENABLED || false;
const createPrReminderAfterDays = process.env.CREATE_PR_REMINDER_AFTER_DAYS || 2;
const createPrReminderAfterMilliseconds = createPrReminderAfterDays * 24 * 60 * 60 * 1000;
const createPrReminderAfterIssueAssignedDays = process.env.CREATE_PR_REMINDER_AFTER_ISSUE_ASSIGNED_DAYS || 2;
const createPrReminderBeforeIssueUnassignedDays = process.env.CREATE_PR_REMINDER_BEFORE_ISSUE_UNASSIGNED_DAYS || 2;
const unassignIssueAfterDays = process.env.UNASSIGN_ISSUE_AFTER_DAYS || 14;
const createPrReminderAfterIssueAssignedMilliseconds = createPrReminderAfterIssueAssignedDays * 24 * 60 * 60 * 1000;
const createPrReminderBeforeIssueUnassignedMilliseconds = createPrReminderBeforeIssueUnassignedDays * 24 * 60 * 60 * 1000;
const unassignIssueAfterMilliseconds = unassignIssueAfterDays * 24 * 60 * 60 * 1000;
const now = Date.now();
if(!createPrReminderEnabled) {
Expand Down Expand Up @@ -96,6 +102,32 @@ jobs:
return allComments;
}
async function createPrReminder(assignee, issueNumber, comments, createPrReminderAfter, prReminder) {
// Check if it is time to create PR reminder
if (now < createPrReminderAfter) {
return false;
}
// Check if PR reminder has already been created
if (comments.some(comment => comment.body === prReminder)) {
return false;
}
// Create PR reminder
if(createPrReminderEnabled) {
await github.rest.issues.createComment({
owner,
repo,
issue_number: issueNumber,
body: prReminder
});
}
console.log(`Issue '${issueNumber}' PR reminder created for: ${assignee.login}`);}
return true;
}
async function createPrReminders() {
const issues = await listOpenIssues();
Expand All @@ -108,40 +140,31 @@ jobs:
const comments = await listIssueComments(issue);
for (const assignee of issue.assignees) {
const assignedEvent = events.find(event => event.event === 'assigned' && event.assignee.login === assignee.login);
const issueAssignedAt = new Date(assignedEvent.created_at);
// Check if assignee has already opened a PR
const assigneePullRequest = pullRequests.find(pullRequest => pullRequest.user.login === assignee.login);
if(assigneePullRequest) {
continue;
}
// Check if it is time to create a reminder
const assignedEvent = events.find(event => event.event === 'assigned' && event.assignee.login === assignee.login);
const issueAssignedAt = new Date(assignedEvent.created_at);
const createPrReminderAfter = new Date(issueAssignedAt.getTime() + createPrReminderAfterMilliseconds);
if (now < createPrReminderAfter) {
continue;
}
// Create first PR reminder
const createFirstPrReminderAfter = new Date(issueAssignedAt.getTime() + createPrReminderAfterIssueAssignedMilliseconds);
const firstPrReminder = `@${assignee.login}, please open a draft PR linking this issue!`;
// Check if reminder has already been created
const reminder = `@${assignee.login}, please open a draft PR linking this issue!`;
const isFirstPrReminderCreated = await createPrReminder(assignee, issue.number, comments, createFirstPrReminderAfter, firstPrReminder);
if (comments.some(comment => comment.body === reminder)) {
if(isFirstPrReminderCreated) {
continue;
}
// Create reminder
if(createPrReminderEnabled) {
await github.rest.issues.createComment({
owner,
repo,
issue_number: issue.number,
body: reminder
});
}
// Create final PR reminder
const createFinalPrReminderAfter = new Date(issueAssignedAt.getTime() + unassignIssueAfterMilliseconds - createPrReminderBeforeIssueUnassignedMilliseconds);
const finalPrReminder = `@${assignee.login}, please open a draft PR linking this issue!`;
console.log(`Issue '${issue.number}' reminder created for: ${assignee.login}`);
await createPrReminder(assignee, issue.number, comments, createFinalPrReminderAfter, finalPrReminder);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/issue-unassign.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
const owner = 'keyshade-xyz';
const repo = 'keyshade';
const unassignIssueEnabled = process.env.UNASSIGN_ISSUE_ENABLED || false;
const unassignIssueAfterDays = process.env.CREATE_PR_REMINDER_AFTER_DAYS || 14;
const unassignIssueAfterDays = process.env.UNASSIGN_ISSUE_AFTER_DAYS || 14;
const unassignIssueAfterMilliseconds = unassignIssueAfterDays * 24 * 60 * 60 * 1000;
const now = Date.now();
Expand Down

0 comments on commit b4b6b31

Please sign in to comment.