Stale Issue, Banch and Old Workflows Cleanup #42
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Stale Issue, Banch and Old Workflows Cleanup | |
on: | |
schedule: | |
# Every day at midnight | |
- cron: "0 0 * * *" | |
workflow_dispatch: | |
jobs: | |
issues: | |
runs-on: ubuntu-latest | |
permissions: | |
issues: write | |
pull-requests: write | |
actions: write | |
steps: | |
- name: stale | |
uses: actions/[email protected] | |
with: | |
stale-issue-label: "stale" | |
stale-pr-label: "stale" | |
# days-before-stale: 180 | |
# essentially disabled for now while we work through polish issues | |
days-before-stale: 3650 | |
# Pull Requests become stale more quickly due to merge conflicts. | |
# Also, we promote minimizing WIP. | |
days-before-pr-stale: 7 | |
days-before-pr-close: 3 | |
# We rarely take action in response to the message, so avoid | |
# cluttering the issue and just close the oldies. | |
stale-pr-message: "" | |
stale-issue-message: "" | |
# Upped from 30 since we have a big tracker and was hitting the limit. | |
operations-per-run: 60 | |
# Start with the oldest issues, always. | |
ascending: true | |
- name: "Close old issues labeled likely-no" | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const thirtyDaysAgo = new Date(new Date().setDate(new Date().getDate() - 30)); | |
console.log(`Looking for issues labeled with 'likely-no' more than 30 days ago, which is after ${thirtyDaysAgo.toISOString()}`); | |
const issues = await github.rest.issues.listForRepo({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
labels: 'likely-no', | |
state: 'open', | |
}); | |
console.log(`Found ${issues.data.length} open issues labeled with 'likely-no'`); | |
for (const issue of issues.data) { | |
console.log(`Checking issue #${issue.number} created at ${issue.created_at}`); | |
const timeline = await github.rest.issues.listEventsForTimeline({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issue.number, | |
}); | |
const labelEvent = timeline.data.find(event => event.event === 'labeled' && event.label.name === 'likely-no'); | |
if (labelEvent) { | |
console.log(`Issue #${issue.number} was labeled with 'likely-no' at ${labelEvent.created_at}`); | |
if (new Date(labelEvent.created_at) < thirtyDaysAgo) { | |
console.log(`Issue #${issue.number} is older than 30 days with 'likely-no' label, closing issue.`); | |
await github.rest.issues.update({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issue.number, | |
state: 'closed', | |
state_reason: 'not_planned' | |
}); | |
} | |
} else { | |
console.log(`Issue #${issue.number} does not have a 'likely-no' label event in its timeline.`); | |
} | |
} | |
branches: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Run delete-old-branches-action | |
uses: beatlabs/[email protected] | |
with: | |
repo_token: ${{ github.token }} | |
date: "6 months ago" | |
dry_run: false | |
delete_tags: false | |
# extra_protected_branch_regex: ^(foo|bar)$ | |
exclude_open_pr_branches: true | |
del_runs: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Delete PR Cleanup workflow runs | |
uses: Mattraks/delete-workflow-runs@v2 | |
with: | |
token: ${{ github.token }} | |
repository: ${{ github.repository }} | |
retain_days: 30 | |
keep_minimum_runs: 30 | |
delete_workflow_pattern: pr-cleanup.yaml | |
- name: Delete PR Deploy workflow skipped runs | |
uses: Mattraks/delete-workflow-runs@v2 | |
with: | |
token: ${{ github.token }} | |
repository: ${{ github.repository }} | |
retain_days: 30 | |
keep_minimum_runs: 30 | |
delete_workflow_pattern: pr-deploy.yaml |