fix(workflow): use github-script for scheduled lock after 3 days

This commit is contained in:
CanbiZ (MickLesk)
2026-01-29 14:30:22 +01:00
parent 8ab722fb7c
commit 33a531960e
+43 -49
View File
@@ -1,68 +1,62 @@
name: Lock closed issues name: Lock closed issues
on: on:
issues:
types: [closed]
pull_request:
types: [closed]
schedule: schedule:
- cron: "0 0 * * *" # Run daily at midnight for backlog - cron: "0 0 * * *" # Run daily at midnight
workflow_dispatch: workflow_dispatch:
permissions: permissions:
issues: write issues: write
pull-requests: write pull-requests: write
concurrency:
group: lock-threads
jobs: jobs:
# Lock immediately when issue/PR is closed (new issues get comment) lock:
lock-on-close:
if: github.event_name == 'issues' || github.event_name == 'pull_request'
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Lock issue/PR after close - name: Lock old issues and PRs
uses: actions/github-script@v7 uses: actions/github-script@v7
with: with:
script: | script: |
const createdAt = new Date(context.payload.issue?.created_at || context.payload.pull_request?.created_at); const daysBeforeLock = 3;
const cutoffDate = new Date('2026-01-27T00:00:00Z'); const cutoffDate = new Date('2026-01-27T00:00:00Z');
const isNew = createdAt >= cutoffDate; const lockDate = new Date();
const number = context.payload.issue?.number || context.payload.pull_request?.number; lockDate.setDate(lockDate.getDate() - daysBeforeLock);
const isIssue = !!context.payload.issue;
// Add comment only for new issues/PRs // Search for closed, unlocked issues older than 3 days
if (isNew) { const issues = await github.rest.search.issuesAndPullRequests({
const comment = isIssue q: `repo:${context.repo.owner}/${context.repo.repo} is:closed is:unlocked updated:<${lockDate.toISOString().split('T')[0]}`,
? 'This issue has been automatically locked. Please open a new issue for related bugs and reference this issue if needed.' per_page: 50
: 'This pull request has been automatically locked. Please open a new issue for related bugs.';
await github.rest.issues.createComment({
...context.repo,
issue_number: number,
body: comment
});
}
// Lock the issue/PR
await github.rest.issues.lock({
...context.repo,
issue_number: number,
lock_reason: 'resolved'
}); });
# Scheduled run for backlog (old issues without comment) console.log(`Found ${issues.data.items.length} issues/PRs to lock`);
lock-backlog:
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' for (const item of issues.data.items) {
runs-on: ubuntu-latest const createdAt = new Date(item.created_at);
steps: const isNew = createdAt >= cutoffDate;
- uses: dessant/lock-threads@v6
with: try {
github-token: ${{ github.token }} // Add comment only for new issues (created after 2026-01-27)
issue-inactive-days: 1 if (isNew) {
issue-lock-reason: "resolved" const comment = item.pull_request
issue-comment: "" ? 'This pull request has been automatically locked. Please open a new issue for related bugs.'
pr-inactive-days: 1 : 'This issue has been automatically locked. Please open a new issue for related bugs and reference this issue if needed.';
pr-lock-reason: "resolved"
pr-comment: "" await github.rest.issues.createComment({
...context.repo,
issue_number: item.number,
body: comment
});
}
// Lock the issue/PR
await github.rest.issues.lock({
...context.repo,
issue_number: item.number,
lock_reason: 'resolved'
});
console.log(`Locked #${item.number} (${item.pull_request ? 'PR' : 'Issue'})`);
} catch (error) {
console.log(`Failed to lock #${item.number}: ${error.message}`);
}
}