GitHub Actionsでpushされたイメージをwebpに置き換える
目次
はじめに
今回は、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 push
STEPのスキップ処理をもう少しよくするとか(環境変数とかoutputを使ってifディレクティブでスキップ処理しようと思ったけどうまく動かなかった。。。)したいですね。