Runner in the High

技術のことをかくこころみ

Github Action上でEarthlyからGithub Container Registryへimageをpushする

自分で管理しているDockerイメージのリポジトリでリリースフローを自動化してみたので備忘メモ。

github.com

実際のAction実装は以下のような感じ。

Earthlyもキャッシュをいい感じにしてくれるので2回目以降はかなり速い。

name: release

on:
  push:
    branches: 
      - master
      - main

jobs:
  release:
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - uses: actions/checkout@v3

      - name: Login to GHCR
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Setup earthly
        run: |
          wget https://github.com/earthly/earthly/releases/download/v0.6.1/earthly-linux-amd64 -O /tmp/earthly
          chmod +x /tmp/earthly
          /tmp/earthly bootstrap
          /tmp/earthly --version
      - name: Build and push
        run: /tmp/earthly --push --ci +image

ポイントは permissions のところで、そこが設定されていないとpackageを公開する権限がなく403エラーになってしまう。

ちなみに、Github上ではPackageに対してリポジトリと1:Nの関係で権限を設定できる。うっかり自分はそれを設定してしまったのだが、その場合にはActionの設定画面でPackageに対する権限を明示的に Role: Write にする必要があるっぽい。デフォルト設定はReadのみなので、ここでWriteが設定がされていないとyamlファイルの中で permissions を指定していても403エラーが出るので注意。

Packageに対するリポジトリの紐づけを行う画面

Earthlyからは unexpected status: 403 Forbidden というエラーしか出してくれないのでなにが原因なのかわからずらい...