自分で管理しているDockerイメージのリポジトリでリリースフローを自動化してみたので備忘メモ。
実際の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エラーが出るので注意。
Earthlyからは unexpected status: 403 Forbidden
というエラーしか出してくれないのでなにが原因なのかわからずらい...