LoginSignup
0
0

GitHub actionの履歴をバッチで一括削除する

Posted at

概要

GitHubCLIを使ってactionの履歴を一括削除する

条件

  • Windows 11 Home

方針:GitHubCLIでアクション履歴をjsonで抽出、jqでIDを絞り込み、最後にGitHubCLIで削除する

インストール

ghとjqをインストールする

  • gh : GitHubCLI(GitHubのコマンドAPI)
  • jq : Jsonをコマンド制御するツール

ターミナルを起動し以下のコマンドを打つ。コマンドを打ったらターミナルを再起動する。

winget install --id GitHub.cli
winget install jqlang.jq

コマンドを実行する

その前にGitHubにログイン

Power ShellからGitHubログインのためにコマンドを実行し、画面に従って操作する。

gh auth login
? What account do you want to log into? [Use arrows to move, type to filter]
> GitHub.com   ←こっちを選択
  GitHub Enterprise Server
  
? What is your preferred protocol for Git opertions on this host? [Use arrows to move, type to filter]
> HTTPS   ←こっちを選択
  SSH

? Authenticate Git with your GitHub credentials? (Y/n) y

? How would you like to authenticate GitHub CLI? [Use arrows to move, type to filter]
> Login with a web browser   ←こっちを選択
  Paste an authentication token

First copy your one-time code: xxxxxxx(コードが表示される)
Press Enter to open github.com in your browser ...

Enterを押すとブラウザでGitHub.comのログイン画面に入る
表示されたコードを打ち込んで、ContinueするとAuthorizeするか聞いてくるのでAuthorize githubを選択
画面に表示されたコードを携帯のGitHubアプリから2段階認証したら認証完了

コマンドを実行してみる

以下のコマンドを実行する

gh api /repos/{owner}/{repository}/actions/workflows/{.ymlファイルの名前}/runs?per_page=10 `
| jq '.workflow_runs[].id' `
| % { gh api -X DELETE repos/{owner}/{repository}/actions/runs/$_ }

GitHubのデータをjsonで取り出す

指定の.ymlファイルのアクションのデータをjson形式で出力する。ページ数によって検出に失敗する場合があるのでper_pageの値を調整し取得できる数値にする。

gh api /repos/{owner}/{repository}/actions/workflows/{.ymlファイルの名前}/runs?per_page=10

jsonからIDを取得する

jqにてidを取り出す。

jq '.workflow_runs[].id'

ステータスによって選別する場合は以下のようにする。Windowsではダブルクォーテーション(")の前のにエスケープ文字(\)がないと解釈できずエラーが出てしまう。

jq '.workflow_runs[] | select(.status==\"completed\") | .id'

作成日時で選別する場合は以下の通り

jq '.workflow_runs[] | select(.created_at<=\"2024-06-01T00:00:00Z\") | .id'

IDを指定してアクションを削除する

最後にIDを指定してアクションを削除する。

windowsのみ
% { gh api -X DELETE repos/{owner}/{repository}/actions/runs/$_ }

動作確認方法

以下のようにjqの処理までを実行するとIDの一覧が表示される。削除の前後に以下のコマンドを実行することで対象IDが削除されたことを確認できる。

gh api /repos/{owner}/{repository}/actions/workflows/{.ymlファイルの名前}/runs?per_page=10 `
| jq '.workflow_runs[] | select(.status==\"completed\") | .id'
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0