Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 80 additions & 18 deletions .github/workflows/lock.yml
Original file line number Diff line number Diff line change
@@ -1,29 +1,91 @@
name: 'Lock Threads'
name: Close old issues and pull requests

on:
schedule:
- cron: '0 6 * * *'
workflow_dispatch:

permissions:
contents: read
issues: write
pull-requests: write

jobs:
lock:
permissions:
issues: write
pull-requests: write
close-old-threads:
runs-on: ubuntu-latest

steps:
- uses: dessant/lock-threads@v2.0.1
- uses: actions/github-script@v9
with:
github-token: ${{ github.token }}
issue-lock-inactive-days: '30'
issue-lock-comment: >
This issue has been automatically locked. To avoid confusion
with reports that have already been resolved, closed issues
are automatically locked 30 days after the last comment.
Please open a new issue for related bugs.
pr-lock-comment: >
This pull request has been automatically locked.
Pull requests that have been closed are automatically
locked 30 days after the last comment.
script: |
const cutoffDays = 30;
const exemptLabels = ['keep-open'];

const cutoff = new Date();
cutoff.setDate(cutoff.getDate() - cutoffDays);

const closeIssueMessage = `This issue has been automatically closed and locked.

Processing 3.x is no longer actively developed. Since January 2020, development moved to the Processing 4 repository.

If this issue is still relevant to Processing 4, we'd love to hear from you. Please open a new issue at:
https://github.com/processing/processing4/issues/new/choose

Thank you for helping improve Processing.`;

const closePrMessage = `This pull request has been automatically closed and locked.

Processing 3.x is no longer actively developed. Since January 2020, development moved to the Processing 4 repository.

If you'd still like to contribute this work, please open an issue in the Processing 4 repository to discuss it first:
https://github.com/processing/processing4/issues/new/choose

Thank you for your contribution.`;

const threads = await github.paginate(github.rest.issues.listForRepo, {
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
per_page: 100,
sort: 'updated',
direction: 'asc'
});

for (const thread of threads) {
const updatedAt = new Date(thread.updated_at);

if (updatedAt > cutoff) {
continue;
}

const labels = thread.labels.map(label => label.name);
const isExempt = labels.some(label => exemptLabels.includes(label));

if (isExempt) {
continue;
}

const isPr = Boolean(thread.pull_request);
const body = isPr ? closePrMessage : closeIssueMessage;

await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: thread.number,
body
});

await github.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: thread.number,
state: 'closed',
state_reason: 'not_planned'
});

await github.rest.issues.lock({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: thread.number,
lock_reason: 'resolved'
});
}