メモ: GitHub Actionsでpkgdownサイトをビルドする

これを使いたい。

GitHub版のusethisパッケージをインストール

devtools::install_github("r-lib/usethis")

GitHub Actionsの設定ファイルをレポジトリに追加

usethis::use_github_action()を使うと、 https://github.com/r-lib/actions/tree/master/examples にあるYAMLファイルを持ってこれる。

usethis::use_github_action("pkgdown.yaml")

.Rbuildignore.githubを追加

usethis::use_github_action()は個別のファイルを.Rbuildignoreに入れてくれるけど、.github全体をignoreしないと以下のエラーが出る。

─  checking for empty or unneeded directories
   Removed empty directory ‘xxx/.github/workflows’
   Removed empty directory ‘xxx/.github’

usethisにもissueは登録されているけどまだやってくれないっぽいので.Rbuildignoreに以下を自分で追加する。

^\.github$

これで準備は完了だが、まだgit pushしてはいけない。GitHub Pagesの設定をgh-pagesブランチにしておく必要がある。

Personal Access Tokenを取得

これで動くかと思いきや、gh-pagesブランチの前にもう一つやることがあった。 id:u_riboに教えてもらって気付いたけど、GitHub Actionsでデフォルトで使われているGITHUB_TOKENだと、pushはできるけどGitHub Pagesのビルドがトリガーされないというバグ?があるらしい。

ので、自分でPersonal Access Tokenを設定する。https://github.com/settings/tokens/newからrepoにチェックを入れて発行。

f:id:yutannihilation:20200111131137p:plain

これを、レポジトリのSettings Secretsから適当な名前で登録(GITHUB_PATとか)し、

f:id:yutannihilation:20200111131743p:plain

.github/workflows/pkgdown.ymlの最後の行のトークンをGITHUB_TOKENからその名前に書き換える。

-          Rscript -e "pkgdown:::deploy_local(new_process = FALSE, remote_url = 'https://x-access-token:${{secrets.GITHUB_TOKEN}}@github.com/${{github.repository}}.git')"
+          Rscript -e "pkgdown:::deploy_local(new_process = FALSE, remote_url = 'https://x-access-token:${{secrets.GITHUB_PAT}}@github.com/${{github.repository}}.git')"

そのうちGitHub側で直るような気もするけど、とりあえず今はこういう対処が必要みたいです。

gh-pages

(もうすでにgh-pagesブランチを使っていれば無視してOK)

まずは空のブランチをつくってpush

git checkout --orphan gh-pages
git rm --cached -r .
git commit --allow-empty -m "initial commit"
git push origin -u gh-pages

そしてGitHub Pagesの設定を変える。

f:id:yutannihilation:20200110220444p:plain

git push

これでpushすれば動くはず。

Travisでやる場合と違ってトークンを渡さなくていいので楽。