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 }} |
やってることは全然難しいところはないですが、いくつかポイントがあるので少し説明。
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 を使いましょう!(日本語をパスにしてないわ!っていうのだったら気にしないでも大丈夫ですが)