目次

はじめに

今回は、pushされた画像ファイルをGitHub Actionsでwebpに置き換えるということをやりました。 このブログの記事を書く際、結構pngをwebpに変換するのが手間だったのでこれでだいぶ楽になりそうです。

Actionsのコード

name: toWebp

on:
  pull_request:
    branches:
      - main

jobs:
  convert:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
      with:
        fetch-depth: 0
        ref: ${{ github.event.pull_request.head.ref }}
    - name: setup webp 
      run: sudo apt-get install webp
    - name: Get add image files and convert
      id: convert
      run: |
        files=$(git diff --name-only origin/${GITHUB_BASE_REF}...origin/${GITHUB_HEAD_REF} --diff-filter=A -- '*.png') # PR内でpngに関して新たに追加されたものを取得
        if [ -n "$files" ]; then
          echo "isConverted=true" >> $GITHUB_OUTPUT
          for file in $files; do
            name="${file%.png}" # 拡張子を削除
            cwebp "$name.png" -o "$name.webp" # png->webp
            rm "$name.png"
          done
        fi
    - name: commit and push
      run: |
        if [ ${{ steps.convert.outputs.isConverted }} ]; then
          git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git config --local user.name "github-actions[bot]"
          git add .
          git commit -m "convert to webp" -a
          git push
        fi

これで、pngをpushすると下記のようにactions bot君が置き換えてくれたものをcommit&pushしてくれます。

置き換えのコミット
置き換えのコミット
コミットの内容
コミットの内容

おわりに

今回の内容はpng->webpに限ってのものなので、適宜置き換えてください。
もう少し改善するならば、どの画像形式でも変換できるようにシェルスクリプトを書き直すとか、commit and pushSTEPのスキップ処理をもう少しよくするとか(環境変数とかoutputを使ってifディレクティブでスキップ処理しようと思ったけどうまく動かなかった。。。)したいですね。