anz blog

Publishでブログを生成してFirebase HostingへデプロイするGitHub Actionsワークフロー

Publish 移行計画の残タスク処理第2弾です。

Firebase Hostingへのデプロイ自動化する

目指すフローは以下の通り。

  • ブログ記事を書く
  • リポにプッシュする
  • 記事が公開される

なので、GitHub Actionsのワークフローを使えば実現ができます。
ワークフローでやる手順をざっくりまとめると以下の通り。

  • Publish のセットアップ
  • ブログを生成
  • Frebase Hostingへデプロイ

これらをワークフローに落とし込めれば実現ができるというわけです。

ワークフロー公開

やってみて無事にできたので、そのワークフローを公開します。

name: Publish
on:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Fix Swift version
run: |
cd $HOME
wget https://swift.org/builds/swift-5.2.5-release/ubuntu1804/swift-5.2.5-RELEASE/swift-5.2.5-RELEASE-ubuntu18.04.tar.gz
tar xzvf swift-5.2.5-RELEASE-ubuntu18.04.tar.gz
echo "::add-path::$HOME/swift-5.2.5-RELEASE-ubuntu18.04/usr/bin"
- name: Setup Publish
run: |
cd $HOME
git clone --depth=1 https://github.com/JohnSundell/Publish.git
cd ./Publish
swift build -c release
echo "::add-path::${HOME}/Publish/.build/release"
- name: Build blog
run: |
cd $GITHUB_WORKSPACE
publish-cli generate
mv ./Output/404/index.html ./Output/404.html
rmdir ./Output/404/
- name: Install firebase-tools
run: |
mkdir ${HOME}/.npm-global
npm config set prefix ${HOME}/.npm-global
echo "::add-path::${HOME}/.npm-global/bin"
npm install -g firebase-tools@8.10.0
- name: Deploy blog
run: firebase deploy --only hosting --token $FIREBASE_TOKEN
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
view raw publish.yml hosted with ❤ by GitHub

やってることは全然難しいところはないですが、いくつかポイントがあるので少し説明。

Publishセットアップ

git clone --depth=1 https://github.com/JohnSundell/Publish.git
cd ./Publish
swift build -c release
echo "::add-path::${HOME}/Publish/.build/release"

Publishのセットアップをするステップではこういう記述をしているのですが、PublishのREADMEでは、clone したあとは make を実行するとあります。
ただ、make は root 権限が必要で実行しても完了することができないので、Makefile でやっていることと同等のことを自分でやっているという感じになります。

Firebase toolsインストール

mkdir ${HOME}/.npm-global
npm config set prefix ${HOME}/.npm-global
echo "::add-path::${HOME}/.npm-global/bin"
npm install -g firebase-tools@8.10.0

普通に npm install -g firebase-tools を実行すると permission エラーでコケてしまったので、その対応として、npmのグローバルのインストール先を別に用意して指定していして、ちゃんと叩けるようにパスを通しています。
こちらの記事を参考にしました。

Ubuntuを使う

runs-on: ubuntu-latest

GitHub Actions は使える仮想環境に MacOS も用意はされているのですが、それは使っていません。
なぜかというと、Firebase Hostingの場合、URLのパスに日本語が含まれていると特定の文字で正常にホスティングできなくなるという問題があるからです。
詳しくはこちらを参照してください。

実際自分も最初は Mac から直接デプロイしてたのですが、一部タグ(たとえばリジェクトとか)でちゃんと遷移できないという問題が発生していたのですが、このワークフローを通した場合は正常に遷移できるようになりました。
(というか、この問題があるからワークフローを作ったといっても過言ではないです 笑)

ということで、Ubuntu を使いましょう!(日本語をパスにしてないわ!っていうのだったら気にしないでも大丈夫ですが)

参考