Travis CI to GitHub Actions (Hugo)

Travis CI でやっていた Hugo で作ってるサイトのビルドとデプロイを、GitHub Actions に移行した。前からぼんやり「移行しなきゃな〜」とは思っていたのだけど、最近 Travis CI を使おうと思ったときにメンテナンスの時間帯にあたってしまうというのが続いてしまったのもあって、一念発起して移行した。

GitHub Actions の設定はこんな感じ。雑に準備、ビルド、デプロイ(git push)まで 1 つのジョブにまとめてる。

name: deploy

on:
  push:
    branches: [ hugo ]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
      with:
        submodules: true

    - uses: actions/checkout@v2
      with:
        ref: master
        path: public

    - name: Install hugo
      uses: peaceiris/actions-hugo@v2
      with:
        hugo-version: '0.69.2'

    - name: Build
      run: |
                hugo

    - name: Commit
      run: |
        git config --local user.email "kz.nishikawa@gmail.com"
        git config --local user.name "Kazuki Nishikawa"
        git add .
        git commit -m "actions build"        
      working-directory: public

    - name: Push
      uses: ad-m/github-push-action@master
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        directory: public

Hugo のコードは hugo ブランチ入れてるので、ビルド対象は hugo ブランチだけにした。テーマは themes 配下に submodule として配置してるので、submodule: true している。

ビルド結果(=公開サイトのコンテンツ)は master ブランチに入れているので、ビルドするより前に、ビルドの出力ディレクトリに master ブランチを clone しておく。

hugo のインストールは peaceiris/actions-hugo を使った。自前で curl を使ってインストールするでもよかったんだけど、今回はありものを使ってみた。

git push には ad-m/github-push-action を使った。secrets.GITHUB_TOKEN自動的に設定されるものらしく、これといってリポジトリに追加の設定をする必要はなかった。

ビルドは hugo コマンドの実行。このサイトは github.io で運用してるので、push すればデプロイ完了。

ちょろっと使った感じ、Travis CI より速く動いてると思う。

ちなみに Travis CI の設定はこんな感じだった。

### .travis.yml

language: minimal
before_install: travis/fetch.sh
install: travis/install.sh
script: travis/build.sh
after_success: travis/deploy.sh
env:
  global:
    secure: blahblahblah
### travis/fetch.sh
#!/bin/sh
git clone https://${GH_TOKEN}@github.com/kzkn/kzkn.github.io public


### travis/install.sh
#!/bin/sh
mkdir -p out
curl -L https://github.com/gohugoio/hugo/releases/download/v0.69.0/hugo_0.69.0_Linux-64bit.tar.gz >out/hugo.tgz
cd out && tar xvf hugo.tgz


### travis/build.sh
#!/bin/sh
./out/hugo
echo $PWD
ls


### travis/deploy.sh
#!/bin/sh
cd public

git config user.email "kz.nishikawa@gmail.com"
git config user.name "Kazuki Nishikawa"

git add .
git commit -m "Travis build: $TRAVIS_BUILD_NUMBER"
git push origin master