😸

GitHub CLI で GitHub Actions のartifact をダウンロードする

2023/01/07に公開

GitHub CLI で GitHub Actions の artifact をダウンロードする

gh run コマンドの list サブコマンドdownload サブコマンド を使って、artifact を列挙、ダウンロードする。

※ ここでは sakura editor を例に説明する。

結論

処理内容自体は sakura editor に依存しているので使用したいリポジトリに応じて適宜カスタマイズが必要。

$ gh -R sakura-editor/sakura run download \
   $(gh -R sakura-editor/sakura run list \
   -L 1 -b master -w  "build sakura"  --json databaseId  --jq '.[].databaseId') \
   -p "*Installer*"

sakura editor の依存しているのは以下の部分。それ以外は他のプロジェクトでも流用可能。

  • -R sakura-editor/sakura (使用したいプロジェクトを指定する)
  • -b master (main ブランチを使用するプロジェクトの場合は変更必要)
  • -w "build sakura" (使用したいプロジェクトの workflow 名を指定する)
  • -p "*Installer*" (使用したいプロジェクトで取得したい artifact 名を指定する)

list サブコマンド

workflow の列挙

  • gh run list で GitHub Actions の workflow を列挙できる。
  • 該当のリポジトリ外で実行する場合、-R sakura-editor/sakura でリポジトリを指定する。
  • 該当のリポジトリ内で実行する場合、-R sakura-editor/sakura は省略できる。
  • デフォルトで最大 30要素表示するので -L 5 のようにして列挙する上限を設定できる。
$ gh -R sakura-editor/sakura run list -L 5
STATUS  TITLE                             WORKFLOW      BRANCH    EVENT                ID          ELAPSED  AGE
✓       ヘルプをUTF8のままコンパイルする  build sakura  utf8help  pull_request         3855650468  11m17s   10h
✓       ヘルプをUTF8のままコンパイルする  SonarCloud    utf8help  pull_request_target  3855650423  9m47s    10h
✓       SonarCloud                        SonarCloud    master    schedule             3853570129  12m8s    16h
✓       ヘルプをUTF8のままコンパイルする  SonarCloud    utf8help  pull_request_target  3846931454  7m44s    1d
✓       ヘルプをUTF8のままコンパイルする  build sakura  utf8help  pull_request         3846931433  10m32s   1d

列挙 する workflow を限定

  • -w "build sakura" で列挙する WORKFLOW を限定できる。
  • -b master で列挙する BRANCH を限定できる。
$ gh -R sakura-editor/sakura run list -L 5 -b master -w  "build sakura"
STATUS  TITLE                                                                   WORKFLOW      BRANCH  EVENT  ID          ELAPSED  AGE
✓       Merge pull request #1893 from berryzplus/feature/remove_minidump        build sakura  master  push   3834956834  8m15s    2d
✓       Merge pull request #1888 from dep5/removePopup                          build sakura  master  push   3834127722  11m36s   2d
✓       Merge pull request #1887 from beru/HighDPI_CPropTypesColor__DrawColor…  build sakura  master  push   3804948023  9m55s    7d
✓       Merge pull request #1881 from dep5/setwidthimg                          build sakura  master  push   3798585802  12m19s   8d
✓       Merge pull request #1879 from dep5/build-chm-nopy                       build sakura  master  push   3798521306  8m23s    8d

download サブコマンド

指定したworkflow の artifact をダウンロード

  • gh run download で GitHub Actions の artifact をダウンロードできる。
  • 3834956834ID を指定する。
  • の部分がダウンロード中更新されて進捗を表す。完了すると消える。
$ gh -R sakura-editor/sakura run download 3834956834
⣷

ダウンロードする artifact を限定

  • -p "*Installer*" のように指定すると artifact 名に Installer を含むもののみをダウンロードできる。
$ gh -R sakura-editor/sakura run download 3834956834 -p "*Installer*"

最新の artifact をダウンロード

list サブコマンドの出力の ID の部分を解析して、download サブコマンドに渡してやることで、最新の artifact をダウンロードする。

json 形式で出力し、含める要素を指定

  • --json databaseId を指定することで json 形式で ID の部分のみを出力する。
$ gh -R sakura-editor/sakura run list -L 5 -b master -w  "build sakura"  --json databaseId
[
  {
    "databaseId": 3834956834
  },
  {
    "databaseId": 3834127722
  },
  {
    "databaseId": 3804948023
  },
  {
    "databaseId": 3798585802
  },
  {
    "databaseId": 3798521306
  }
]

json 形式の結果を jq を使用して取り出し

  • --jq '.[].databaseId' を指定して、配列要素の中の databaseId の部分のみを取り出す。
$ gh -R sakura-editor/sakura run list \
-L 5 -b master -w  "build sakura"  --json databaseId  --jq '.[].databaseId'
3834956834
3834127722
3804948023
3798585802
3798521306

最新の workflow の ID を取得

-L 1 を指定して最新のものだけ取り出す。

$ gh -R sakura-editor/sakura run list \
-L 1 -b master -w  "build sakura"  --json databaseId  --jq '.[].databaseId'
3834956834

参考: json 形式で指定できる要素

  • --json を引数なしで指定すると指定可能な値を表示する。
$ gh -R sakura-editor/sakura run list  --json
Specify one or more comma-separated fields for `--json`:
  conclusion
  createdAt
  databaseId
  displayTitle
  event
  headBranch
  headSha
  name
  number
  startedAt
  status
  updatedAt
  url
  workflowDatabaseId
  workflowName

最新の workflow の ID の artifact をダウンロードする。

これまでの手順をまとめて、以下で最新の Installer を含む artifact をダウンロードできる。

$ gh -R sakura-editor/sakura run download \
   $(gh -R sakura-editor/sakura run list \
   -L 1 -b master -w  "build sakura"  --json databaseId  --jq '.[].databaseId') \
   -p "*Installer*"

Discussion