BioErrorLog Tech Blog

試行錯誤の記録

GitHub Actionsで別レポジトリをcloneする

GitHub Actions内で別レポジトリをcloneする方法をまとめます。

はじめに

依存関係を持つレポジトリが別にある場合、GitHub Actions内でその別レポジトリもcloneして使いたくなることがあります。

今回は、そのようなGitHub Actions内で別レポジトリをcloneする方法をまとめます。

GitHub Actionsで別レポジトリをcloneする

やり方

actions/checkoutrepositoryオプションを指定することで、別レポジトリもcloneすることが出来ます:

- name: Checkout
  uses: actions/checkout@v3
  with:
    path: main

- name: Checkout tools repo
  uses: actions/checkout@v3
  with:
    repository: my-org/my-tools
    path: my-tools

↑のようにすることで、メインのレポジトリをmain配下に、別のレポジトリmy-org/my-toolsmy-tool配下にcloneできます。

やってみた

では、私のレポジトリを使って実際にやってみます。

bioerrorlog/actions-testsレポジトリのActionsで、別のレポジトリrust-lang/rustをcloneしてみます:

name: Multiple repos clone tests

on:
  push:
    branches:
      - main
jobs:
  multi-repos:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          path: main
      - name: Checkout another repo
        uses: actions/checkout@v3
        with:
          repository: rust-lang/rust
          path: another

      # 以降確認用
      - run: |
          pwd
          ls -la
      - name: Check the main repo
        working-directory: main
        run: |
          pwd
          ls -la
      - name: Check the another repo
        working-directory: another
        run: |
          pwd
          ls -la

実際のコードはこちら

確認用のaction実行結果はこちら:

# 作業ディレクトリで pwd / ls -la
# -> mainディレクトリとanotherディレクトリが並列で作成されている
/home/runner/work/actions-tests/actions-tests
total 16
drwxr-xr-x 4 runner docker 4096 Aug  7 07:17 .
drwxr-xr-x 3 runner docker 4096 Aug  7 07:17 ..
drwxr-xr-x 7 runner docker 4096 Aug  7 07:17 another
drwxr-xr-x 4 runner docker 4096 Aug  7 07:17 main

# main ディレクトリでpwd / ls -la
# -> mainのレポジトリ: bioerrorlog/actions-tests がcloneされている
/home/runner/work/actions-tests/actions-tests/main
total 20
drwxr-xr-x 4 runner docker 4096 Aug  7 07:17 .
drwxr-xr-x 4 runner docker 4096 Aug  7 07:17 ..
drwxr-xr-x 8 runner docker 4096 Aug  7 07:17 .git
drwxr-xr-x 3 runner docker 4096 Aug  7 07:17 .github
-rw-r--r-- 1 runner docker   60 Aug  7 07:17 README.md

# another ディレクトリでpwd / ls -la
# -> 指定した別のレポジトリ: rust-lang/rust がcloneされている
/home/runner/work/actions-tests/actions-tests/another
total 896
drwxr-xr-x  7 runner docker   4096 Aug  7 07:17 .
drwxr-xr-x  4 runner docker   4096 Aug  7 07:17 ..
-rw-r--r--  1 runner docker    417 Aug  7 07:17 .editorconfig
drwxr-xr-x  8 runner docker   4096 Aug  7 07:17 .git
-rw-r--r--  1 runner docker    187 Aug  7 07:17 .git-blame-ignore-revs
-rw-r--r--  1 runner docker    464 Aug  7 07:17 .gitattributes
drwxr-xr-x  4 runner docker   4096 Aug  7 07:17 .github
-rw-r--r--  1 runner docker   1251 Aug  7 07:17 .gitignore
-rw-r--r--  1 runner docker   1556 Aug  7 07:17 .gitmodules
-rw-r--r--  1 runner docker  28418 Aug  7 07:17 .mailmap
-rw-r--r--  1 runner docker    131 Aug  7 07:17 CODE_OF_CONDUCT.md
-rw-r--r--  1 runner docker   2415 Aug  7 07:17 CONTRIBUTING.md
-rw-r--r--  1 runner docker   9322 Aug  7 07:17 COPYRIGHT
-rw-r--r--  1 runner docker 128743 Aug  7 07:17 Cargo.lock
-rw-r--r--  1 runner docker   5059 Aug  7 07:17 Cargo.toml
-rw-r--r--  1 runner docker   9723 Aug  7 07:17 LICENSE-APACHE
-rw-r--r--  1 runner docker   1023 Aug  7 07:17 LICENSE-MIT
-rw-r--r--  1 runner docker  10308 Aug  7 07:17 README.md
-rw-r--r--  1 runner docker 593768 Aug  7 07:17 RELEASES.md
drwxr-xr-x 65 runner docker   4096 Aug  7 07:17 compiler
-rw-r--r--  1 runner docker  32437 Aug  7 07:17 config.toml.example
-rwxr-xr-x  1 runner docker    292 Aug  7 07:17 configure
drwxr-xr-x 18 runner docker   4096 Aug  7 07:17 library
-rw-r--r--  1 runner docker   1307 Aug  7 07:17 rustfmt.toml
drwxr-xr-x 11 runner docker   4096 Aug  7 07:17 src
-rw-r--r--  1 runner docker   9520 Aug  7 07:17 triagebot.toml
-rwxr-xr-x  1 runner docker   1531 Aug  7 07:17 x.py

このように、指定したディレクトリに任意のレポジトリをclone出来ることがわかりました。

おわりに

以上、GitHub Actionsで別レポジトリをcloneする方法をまとめました。

GitHub Actionsをフル活用して、良いCICDライフを送っていきたいものです。

[関連記事]

www.bioerrorlog.work

参考

GitHub - actions/checkout: Action for checking out a repo

possible to checkout or clone another repo? · Issue #24 · actions/checkout · GitHub

GitHub Actions — Clone Another Repository