Github Actions で Re:view Starter のファイルをビルドする方法

前置き

今年の3月から部下に業務遂行のバックグラウンドとなる知識を伝えるための勉強会を開いており、そのための資料を RE:View Starter で作成しています。

勉強会の都度その回の資料を執筆し、ビルドして出来た PDF ファイルを職場にメールで送っているのですが、送り忘れた場合に備えて、Github Actions を使って Github 上でもビルドを行ってリポジトリからダウンロードできるようにしようと思いました。

そのため Github Actions の設定をあれこれ調べたのですが、プライベートリポジトリにしているせいで詰まった部分が結構ありましたので、備忘録代わりに調べたことをまとめます。

前提

ファイルの構成は次のとおり(主なファイルのみ列挙)で、リポジトリはプライベートリポジトリ。contens/ ディレクトリに .re ファイルを保存しています。

1.
2├ README.md
3├ Rakefile
4├ catalog.yml
5├ config-starter.yml
6├ config.yml
7├ contents/
8├ workshop.pdf

結論

.github/workflows/main.yml を次のとおり設定し、環境変数 PAT に Personal access token(Scope は repo )を設定すればビルドできます。

 1on: [push]
 2
 3jobs:
 4  review:
 5    runs-on: ubuntu-latest
 6    container: docker://kauplan/review2.5
 7    steps:
 8      - name: Checkout
 9        uses: actions/checkout@v2
10        with:
11          repository: s-show/workshop_document
12          token: ${{ secrets.PAT }}
13          path: ./
14      - name: Build pdf
15        run: rake pdf
16      - uses: actions/upload-artifact@v1
17        with:
18          name: Save PDF
19          path: ./workshop.pdf

解説

on: [push]
アクション実行のタイミングを push 時に設定します。
jobs.review:runs-on: ubuntu-latest
ワークフローを実行する仮想環境に Ubuntu の最新版を指定します。
jobs.container: docker://kauplan/review2.5
Re:view Starter のビルドは Docker のコンテナを利用しているので、Github Actions でも Docker のコンテナを利用するための設定。コンテナには Re:view Starter の作者が作成したコンテナを指定します。

kauplan/review2.5 - Docker Image | Docker Hub

jobs.steps.name: Checkout
ジョブの命名。このジョブは、勉強会資料のリポジトリを Github Actions で使うためにチェックアウトするものなので「Checkout」としています。
jobs.steps.name.uses: actions/checkout@v2
Github Actions の環境はリポジトリがチェックアウトされていない状態なので、そのままではリポジトリのデータにアクセスできません。そこで、公開アクションの actions/checkout@v2 を使ってリポジトリをチェックアウトして $GITHUB_WORKSPACE の下に置くようにします。

actions/checkout: Action for checking out a repo

jobs.steps.name.with.repository: s-show/workshop_document
勉強会資料のリポジトリをチェックアウトの対象に指定してます。
jobs.steps.name.with.token: ${{ secrets.PAT}}
勉強会資料のリポジトリはプライベートリポジトリなので、認証情報がなければ Github Actions はリポジトリにアクセスできない。そのため、ここで環境変数経由で認証情報を渡しています。

プライベートリポジトリを使う場合のコードは以下に掲載されています。

actions/checkout: Action for checking out a repo

認証情報の生成は後で説明します。

jobs.steps.name.with.path: ./
リポジトリのトップディレクトリを作業ディレクトリに指定しています。
jobs.steps.name: Buid pdf
ジョブの命名。このジョブは、PDFファイルを出力するジョブ。
jobs.steps.run: rake pdf
PDF ファイルをビルドするコマンド。Re:view Starter のユーザーズガイドに記載されている PDF 出力コマンドは docker run --rm -v $PWD:/work -w /work kauplan/review2.5 rake pdf であるが、最後の rake pdf だけで実行可能。
jobs.steps.uses: actions/upload-artifact@v1
ビルドした PDF ファイルを保存するため、公開アクションの upload-artifact@v1 を使用しています。
jobs.steps.uses.with.path: ./workshop.pdf
トップディレクトリに workshop.pdf というファイル名で保存するよう設定しています。

プライベートリポジトリにアクセスするための準備

プライベートリポジトリにアクセスするには認証情報が必要なので、認証情報を環境変数経由で Github Actions に渡すための設定を行います。

Personal access token の生成

Personal access token の生成画面はユーザー設定画面にありますので、画面右上のユーザーアイコンの「Settings」を開いてから「Developer settings -> Personal access token -> generate new token」の順番で開いていきます。

生成ページを開いたら、Note に任意の名称を入力し、スコープに repo を指定して Personal access token を生成し、生成した Personal access token をコピーします。

環境変数の設定

環境変数はリポジトリ毎に設定するので、リポジトリの「Setting」を開いてから「Secrets -> New repository secret」の順番で開いていきます。

環境変数の設定画面を開いたら、 NamePAT を、 ValuePersonal access token の値を貼り付けて保存します。

デバッグ用の設定

デフォルト設定でもそこそこ詳しいログが保存されますが、さらに詳細なログが保存されても問題はないので、環境変数に次のペアを登録して詳細なログが保存されるように設定します。

ACTIONS_STEP_DEBUGtrue

ACTIONS_RUNNER_DEBUGtrue

デバッグ ログを有効にする - GitHub Docs