2020年1月20日月曜日

[技術書典8] GitHub Actions で Re:VIEW Starter の PDF を作成する

こんにちは。手段が目的になりがちなずみっくすです。

さて、今週も(多少なりとも)進捗がありましたので、ご報告させていただきます。
今週の成果は、「PDF 出力までを CI で回すようにした」です。

いや、本書いてないやないかーい!
と言いたいところですが、CI はとても大事です。
だって、CI の本を書くのに CI してないなんてダメでしょ。


はい。前置きはこれくらいにして・・
今回は Re:VIEW Starter から PDF を出力して成果物として保存するまでをやります。

Git の構成
さて、CI 対応をしていくその前に Git 構成を考えます。
ここまでは private repository でやってきましたが、private でも無料で使えるサービスとなると限られてくるので、public にしたいと思います。
(どのみちできる限りは公開したいと思っているので、public にするのは問題なし)
ただ、書きかけの本の内容は private にしたいですし、、、
少なくともイベント当日までは、本の内容がすべて読めるという状態にはしたくない。。。



そこで、Re:VIEW Starter のコンテンツディレクトリを private な repository の submodule としました。
(右画像参照)


ci-dex ディレクトリが Re:VIEW Starter から取得したプロジェクトです。ci-dex/contents ディレクトリに本の内容を書いていくわけですが、そこを submodule にしています。


public repository の Re:VIEW Starter プロジェクト以外には、本の中身以外のコンテンツを置いていく予定です。(宣伝用とか)









CI サービスの選択
PDF の出力には Re:VIEW 2.5 の docker image を使うので、だいたいどの CI でも問題なさそうです。
次に出力した PDF を成果物として保存したいですが、これもだいたいどれでも問題ないと思います。
一番問題になってくるのは、private repository のチェックアウトです。

結論としては「GitHub Actions」を選びました。

リポジトリが GitHub なので CI も GitHub Actions にしておけば private の扱いも簡単だろうという安直な理由で選びました。
(実際には、シークレット環境変数があれば別にどれでも問題ないと思いますし、たいして手間は変わらない気もします・・)

というわけで、もしみなさんが CI を回すのであれば以下を満たしていればよく、お好きなサービスを選んでいただければいいと思います。

* Docker 使える
* Artifact ある
* シークレット環境変数使える

GitHub Actions で Re:VIEW Starter の CI
作成したワークフローはこちらになります。
on: [push]

name: GitHub Actions
jobs:
  review:
    runs-on: ubuntu-latest
    # container:
    #   image: docker://kauplan/review2.5
    steps:
      - uses: actions/checkout@v2
      - name: Checkout submodules
        uses: actions/checkout@v2
        with:
          repository: srz-zumix/ci-dex-review-contents
          token: ${{ secrets.GitHub_PAT }}
          path: ci-dex/contents
      - uses: docker://kauplan/review2.5
        with:
          entrypoint: bash
          args: -c "cd ci-dex; rake pdf"
      - uses: actions/upload-artifact@v1
        with:
          name: ci-dex
          path: ci-dex/ci-dex.pdf

ポイントは「Checkout submodules」です。ここで private repository をチェックアウトしてます。
やり方は checkout action のドキュメントのままです。

https://github.com/actions/checkout#checkout-multiple-repos-private
"GitHub_PAT" はパーソナルアクセストークンで、
「Settings」 >「Developer settings」 > 「Personal access tokens」で作成します。
private repository のチェックアウトがしたいので、 「repo」 のスコープにチェックを入れてください。


作成したらトークンをコピーしておきましょう。

つづいて、CI を回したいリポジトリの「Settings」を開きます。
「Secrets」があるので、そこに作成したトークンを追加してください。
名前は "GitHub_PAT" で保存します。(別名にする場合は yaml のところも修正してください。)



これで準備完了です。
ワークフローが実行されると、PDF が出来上がってきます!!



最後に
これが出来上がってきた PDF です。


完全に Markdown 脳になっていました・・ Re:VIEW 記法にも慣れていかないとダメですね。
あと、成果物は今 public access になっていると思うので、保存先を private な場所にする必要もありそうです。

本の中身は空っぽな状態だからまだ見られてしまっても問題ないので、そこは執筆進めつつ対応したいと思います。
では。



0 件のコメント:

コメントを投稿