The GitHub action to delete workflow runs in a repository. This action (written in JavaScript) wraps two Workflow Runs API:
-
List repository workflows -- Lists the workflows in a repository.
-
List workflow runs -- List all workflow runs for a workflow.
-
Delete a workflow run -- Delete a specific workflow run.
The action will calculate the number of days that each workflow run has been retained so far, then use this number to compare with the number you specify for the input parameter "retain_days
". If the retention days of the workflow run has reached (equal to or greater than) the specified number, the workflow run will be deleted.
- Add the input parameter "
delete_run_by_conclusion_pattern
" - useful forskipped
workflow runs. - Add the input parameter "
delete_workflow_by_state_pattern
" and "dry_run
". - Add ability to filter workflows by workflow filename (in addition to the name)
- Add ability to filter workflows by state
- Add ability to perform a 'dry run' which logs the changes but doesn't perform the actual deletion.
The token used to authenticate.
- If the workflow runs are in the current repository where the action is running, using
github.token
is OK. More details, see theGITHUB_TOKEN
. - If the workflow runs are in another repository, you need to use a personal access token (PAT) that must have the
repo
scope. More details, see "Creating a personal access token".
The name of the repository where the workflow runs are on.
The number of days that is used to compare with the retention days of each workflow.
The minimum runs to keep for each workflow.
The name or filename of the workflow. if not set then it will target all workflows.
Remove workflow by state: active, deleted, disabled_fork, disabled_inactivity, disabled_manually
Remove workflow by conclusion: action_required, cancelled, failure, skipped, success
Only log actions, do not perform any delete operations.
In scheduled workflow, see schedule event.
Tip: Using scheduled workflow is the recommended way that can periodically, automatically delete old workflow runs.
name: Delete old workflow runs
on:
schedule:
- cron: '0 0 1 * *'
# Run monthly, at 00:00 on the 1st day of month.
jobs:
del_runs:
runs-on: ubuntu-latest
steps:
- name: Delete workflow runs
uses: Mattraks/delete-workflow-runs@v2
with:
token: ${{ github.token }}
repository: ${{ github.repository }}
retain_days: 30
keep_minimum_runs: 6
In manual triggered workflow, see workflow_dispatch event.
In this way, you can manually trigger the workflow at any time to delete old workflow runs.
name: Delete old workflow runs
on:
workflow_dispatch:
inputs:
days:
description: 'Number of days.'
required: true
default: 30
minimum_runs:
description: 'The minimum runs to keep for each workflow.'
required: true
default: 6
delete_workflow_pattern:
description: 'The name or filename of the workflow. if not set then it will target all workflows.'
required: false
delete_workflow_by_state_pattern:
description: 'Remove workflow by state: active, deleted, disabled_fork, disabled_inactivity, disabled_manually'
required: true
default: "All"
type: choice
options:
- "All"
- active
- deleted
- disabled_inactivity
- disabled_manually
delete_run_by_conclusion_pattern:
description: 'Remove workflow by conclusion: action_required, cancelled, failure, skipped, success'
required: true
default: "All"
type: choice
options:
- "All"
- action_required
- cancelled
- failure
- skipped
- success
dry_run:
description: 'Only log actions, do not perform any delete operations.'
required: false
jobs:
del_runs:
runs-on: ubuntu-latest
steps:
- name: Delete workflow runs
uses: Mattraks/delete-workflow-runs@v2
with:
token: ${{ github.token }}
repository: ${{ github.repository }}
retain_days: ${{ github.event.inputs.days }}
keep_minimum_runs: ${{ github.event.inputs.minimum_runs }}
delete_workflow_pattern: ${{ github.event.inputs.delete_workflow_pattern }}
delete_workflow_by_state_pattern: ${{ github.event.inputs.delete_workflow_by_state_pattern }}
delete_run_by_conclusion_pattern: ${{ github.event.inputs.delete_run_by_conclusion_pattern }}
dry_run: ${{ github.event.inputs.dry_run }}
The scripts and documentation in this project are released under the MIT License.