🧹

オフラインのランナーを一括削除 [GitHub Actions]

2022/07/05に公開

概要

セルフホストランナーを使用しているとランナーの登録解除ができないまま残ってしまうことがあるかと思います。
ブラウザから 1 つずつ Force remove してもよいのですがオフラインになっているランナーを一括で削除できると便利です。

コマンド

セルフホストランナー API を使用します。
GitHub CLI から叩くと楽です。

プライベートリポジトリは repo の、パブリックリポジトリは public repo の権限が必要です。

Bash
gh api repos/${GITHUB_REPOSITORY}/actions/runners \
  --jq '.runners[] | select(.status == "offline") | .id' \
  | xargs -I {} gh api -X DELETE repos/${GITHUB_REPOSITORY}/actions/runners/{}

リポジトリに紐付けている場合のコマンドです。
${GITHUB_REPOSITORY} の部分は環境変数を設定するか直接置き換えてください。

ワークフロー

必要な権限を持った Personal Access Token を Secrets の PAT に登録します。

.github/workflows/remove-runners.yml
name: Remove runners

on:
  workflow_dispatch:

jobs:
  remove:
    runs-on: ubuntu-20.04
    timeout-minutes: 5
    env:
      GH_TOKEN: ${{ secrets.PAT }}

    steps:
      - run: |
          gh api repos/${GITHUB_REPOSITORY}/actions/runners \
	    --jq '.runners[] | select(.status == "offline") | .id' \
            | xargs -I {} gh api -X DELETE repos/${GITHUB_REPOSITORY}/actions/runners/{}

Discussion