年末に何してるんっていう話なんですが、わたしは過去の記事にもあるように、 Git LFS サーバーを自前運用しています。
そこで困るのが、 GitHub Actions で with.lfs: true
とした場合の挙動です。
通常の GitHub にすべてを任せているときと同じ感じでやると、 .lfsconfig
が読み込まれず、リポジトリ本体経由でアクセスされます。
# ダメな例 name: "Release VPMPackage by Pushing Tag" on: push: workflow_dispatch: jobs: packaging: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: lfs: true
ではどうするのか?という話ですが、まずは lfs: true
を使うのではなく、自力で LFS データを引っぱってくる必要があります。
例えば、わたしの場合は以下のようにローカルの .gitconfig
や .git/config
にあるものから、以下のように設定しました。
# 場合によっては動く例 name: "Release VPMPackage by Pushing Tag" on: push: workflow_dispatch: jobs: packaging: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: lfs: false - run: | git config --global credential.https://git-lfs.natsuneko.moe.username $GITHUB_ACTOR git config --global credential.https://git-lfs.natsuneko.moe.helper '!f() { test "$1" = get && echo "password=$GITHUB_TOKEN"; }; f' git config --global lfs.repositoryformatversion 0 git config --global lfs.https://git-lfs.natsuneko.moe/$GITHUB_REPOSITORY/.access basic git config --global lfs.https://git-lfs.natsuneko.moe/$GITHUB_REPOSITORY/.locksverify false git lfs install git lfs pull env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
これは、自前の LFS サーバーで認証する際に使用すべきユーザーとアクセストークン、認証方法を設定しています。
LFS サーバーが正しく実装されている場合は、これで動作します。
正しく実装されていない場合、具体的には上記わたしの記事のように、リポジトリの permission
を見ている場合は、正しくないので動きません。
GitHub の仕様で Installation Token といった種類のアクセストークンには、上記フィールドは設定されませんが、 git pull
などの通常の Git 操作は可能な状態で渡されています。
そのため、リポジトリメタデータへとアクセスできれば pull
可能、 push
については基本拒否といった形でレスポンスを返す実装に変更する必要がありました。
コミット履歴: fix: support installation tokens (such as GitHub Actions)
ということで、情報が少ない Git LFS サーバーはつらいよ、といった話でした (でも安いんですよね......)