Skip to content

An action to delete workflow runs in an array of repositories.

License

Notifications You must be signed in to change notification settings

1uphealth/delete-workflow-runs-multi-repo-action

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

delete-workflow-runs v2

The GitHub action to delete workflow runs in a repository. This action (written in JavaScript) wraps two Workflow Runs API:

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.

What's new?

Inputs

1. token

Required: YES

Default: ${{ github.token }}

The token used to authenticate.

  • If the workflow runs are in the current repository where the action is running, using github.token is OK, but you must specify additional permissions within your build job (or at a higher level) to allow the default token access to read the repository contents and to write (delete) action-related data, see the examples below. More details, see the GITHUB_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".

2. repository

Required: NO

Name of the repository where the workflow runs are located

3. repository_array

Required: NO

Array of repositories where the workflow runs are located. This expects a JSON array.

NOTE: Must use either repository or repository_array

4. retain_days

Required: YES

Default: 30

Amount of days used to compare with the retention days of each workflow

5. keep_minimum_runs

Required: YES

Default: 6

Minimum runs to keep for each workflow

6. delete_workflow_pattern

Required: NO

Name or filename of the workflow (if not set, all workflows are targeted)

7. delete_workflow_by_state_pattern

Required: NO

Default: 'ALL'

Filter workflows by state: active, deleted, disabled_fork, disabled_inactivity, disabled_manually
Multiple state values permitted as a comma-separated list

8. delete_run_by_conclusion_pattern

Required: NO

Default: 'ALL'

Remove runs based on conclusion: action_required, cancelled, failure, skipped, success
Multiple conclusion values permitted as a comma-separated list

9. dry_run

Required: NO

Logs simulated changes, no deletions are performed

10. check_branch_existence

Required: NO

If true, the removage of a workflow is skipped, when a run is attached to a existing branch. Set to true avoids that check runs are deleted and the checks are not more present. (excludes main)

11. check_pullrequest_exist

Required: NO

If true, the Runs will be checked for linkage to a PR.

Examples

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
    permissions:
      actions: write
      contents: read
    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

Passing in an array of repos

name: Delete old workflow runs for all repos in org
on:
  schedule:
    - cron: '0 0 1 * *'
# Run monthly, at 00:00 on the 1st day of month.

jobs:
  del_runs:
    runs-on: ubuntu-latest
    permissions:
      actions: write
      contents: read
    steps:
      - name: Get Accounts List
        id: generate-repoList
        run: |
          echo "repoList=$(gh repo list yourOrgName --json nameWithOwner --jq '[.[].nameWithOwner]')" >> $GITHUB_OUTPUT
      - name: Delete workflow runs
        uses: 1uphealth/delete-workflow-runs-multi-repo-action
        with:
          token: ${{ github.token }}
          repository_array: ${{ steps.generate-repoList.outputs.repoList }}
          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.
manual workflow

name: Delete old workflow runs
on:
  workflow_dispatch:
    inputs:
      days:
        description: 'Days-worth of runs to keep for each workflow'
        required: true
        default: '30'
      minimum_runs:
        description: 'Minimum runs to keep for each workflow'
        required: true
        default: '6'
      delete_workflow_pattern:
        description: 'Name or filename of the workflow (if not set, all workflows are targeted)'
        required: false
      delete_workflow_by_state_pattern:
        description: 'Filter workflows 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 runs based on conclusion: action_required, cancelled, failure, skipped, success'
        required: true
        default: "ALL"
        type: choice
        options:
          - "ALL"
          - "Unsuccessful: action_required,cancelled,failure,skipped"
          - action_required
          - cancelled
          - failure
          - skipped
          - success
      dry_run:
        description: 'Logs simulated changes, no deletions are performed'
        required: false

jobs:
  del_runs:
    runs-on: ubuntu-latest
    permissions:
      actions: write
      contents: read
    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: >-
            ${{
              startsWith(github.event.inputs.delete_run_by_conclusion_pattern, 'Unsuccessful:')
              && 'action_required,cancelled,failure,skipped'
              || github.event.inputs.delete_run_by_conclusion_pattern
            }}
          dry_run: ${{ github.event.inputs.dry_run }}

License

The scripts and documentation in this project are released under the MIT License.

About

An action to delete workflow runs in an array of repositories.

Resources

License

Stars

Watchers

Forks

Packages

No packages published