Skip to content
Open
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
56 changes: 56 additions & 0 deletions .github/workflows/stale.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: "Stale Issue Triage"

on:
schedule:
- cron: '0 9 * * 1'
workflow_dispatch:
inputs:
debug_only:
description: 'Dry-run mode (no writes)'
required: false
default: 'false'
type: choice
options:
- 'false'
- 'true'
Comment on lines +8 to +15

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: are these required ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AFAIK this isn't required but more of a "nice to have" while we're rolling this out. Could be removed once this workflow is enabled and we're comfortable with all the settings.

pull_request:
paths:
- .github/workflows/stale.yml
types:
- opened
- synchronize

permissions:
issues: write
pull-requests: write

jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't know that stale was an official action, it can have the version used directly instead of the hash.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even though it's an official plugin I think Zizmor action will still complain so I don't see a problem leaving the hash since it returns the same version and is marginally safer.

with:
days-before-issue-stale: 180
days-before-issue-close: 30
stale-issue-label: 'stale'
stale-issue-message: >
This issue has been inactive for 180 days and labeled **stale**, comment to keep it open. It will be closed in 30 days if there is no activity.
close-issue-message: >
Closed after 210 days of inactivity. Feel free to reopen if this is still relevant.
exempt-issue-labels: 'release,security,audit,do-not-close,good first issue'
exempt-all-issue-milestones: true
days-before-pr-stale: 180
days-before-pr-close: 30
stale-pr-label: 'stale'
stale-pr-message: >
This pull request has had no activity for 180 days and has been labeled **stale**. If this work is still in progress or waiting on review, a comment or push will remove the label. PRs with no further activity for 30 days will be closed.
close-pr-message: >
Closed after 210 days of inactivity. Feel free to reopen if this is still relevant.
exempt-pr-labels: 'blocked,security,do-not-close'
exempt-all-pr-milestones: true
exempt-draft-pr: true

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think draft PRs should be exempt.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's true they still clutter up the active PRs list so I agree they don't need to be exempted.

remove-stale-when-updated: true
ascending: true
operations-per-run: 600
debug-only: ${{ github.event_name == 'pull_request' || github.event.inputs.debug_only == 'true' }}
enable-statistics: true
Comment on lines +32 to +56

@oleonardolima oleonardolima Jun 18, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it'd help with readability and updating it in the future by splitting into different jobs (if possible): issues, prs, ...

Loading