GitHub Actionsのself-hosted runner上で.gitが見つからず困った話

GitHub Actions
備忘録
Author

statditto

Published

September 6, 2023

要約

Git 2.18以降が利用できない環境で- uses: actions/checkout@v4を行うと、REST APIからファイルをダウンロードするため、.gitディレクトリが作成されない。

経緯

GitHub Actionsのself-hosted runner上でコードの自動フォーマットをして開発環境を整えようと思いつく。適当な小さいdocker imageを利用して、- uses: actions/checkout@v4をする。コードの自動フォーマット、修正箇所を自動コミットしようとした所でエラー。

git: command not found

どうやらdocker imageが小さすぎてgitが入っていないらしい。ちなみにこの時点でのworkflowを抜粋するとこんな感じ。

name: auto format code
on: [pull_request]
env: 
  TARGET_BRANCH: ${{ github.base_ref }}
jobs:
  build:
    runs-on: self-hosted
    container: python:3.8-slim
    permissions:
      contents: write
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
    .
    .
    .# format code
    .
    .
      - name: commit
      run: git commit hogefuga

動作検証のためにとりあえず動いてほしい。取り急ぎworkflowにRUN apt update -yRUN apt install git -yを追加して再度実行。

fatal: not a git repository (or any of the parent directories): .git

なぜ?????とりあえずls -laで確認したら確かに.gitディレクトリが存在しない。

原因

.gitが無いのであればおそらくcheckoutに問題があるだろう。ということでドキュメントを確認する。

When Git 2.18 or higher is not in your PATH, falls back to the REST API to download the files.

これじゃーん。原因はgitをインストールする前にcheckoutしていたことだった。

name: auto format code
on: [pull_request]
env: 
  TARGET_BRANCH: ${{ github.base_ref }}
jobs:
  build:
    runs-on: self-hosted
    container: python:3.8-slim
    permissions:
      contents: write
    steps:
      - name: Checkout code # gitがないので、REST APIからファイルをダウンロード
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: Install Git
      run: apt-get update && apt-get install -y git
    .
    .
    .# format code
    .
    .
      - name: commit # .gitファイルがないため失敗する
      run: git commit hogefuga

解決策としては先にgitをインストールするか、gitの入ったimageを利用するかになる。そもそもgitが入っていないのにcheckoutに成功している時点で疑問を感じるべきだったけど、self-hosted runner上でGitHub Actionsを利用するが初めてだったので、別のところに問題があるんじゃないかと疑いすぎてしまった。 まぁまた一つ賢くなったのでよしとしましょう。