Sphinxで書いたドキュメントをGitHub ActionsでPDFやHTMLに自動ビルド
仕事上のマニュアルをSphinxでまとめたリポジトリがGitHub上にあります。 ちょこちょこアップデートが入るのですが、都度手元でビルドして共有ファイルサーバに上げるのも面倒臭いし、かといって「見たいときにビルドしてね」だと不親切すぎる。
というわけで、タグを打ったらGitHub Actionsが勝手にビルドしてくれるようにしてみました。
実行結果のイメージ
ビルド結果のHTMLとPDFは、以下のような感じでリリースページに保存されるようになっています。
リリース本文(モザイクが掛かっている部分)には、タグに付けたコメントが表示されています。 どこを更新しましたとか、そんな感じの内容を入れておくとノンエンジニアにも変更内容が分かりやすくて便利。
設定ファイル
完成したworkflowは以下のような感じ。
これを、.github/workflows/release-build.yml
とかに置いておくと実行されます。
こうしてみると単純ですが、デバッグに結構苦戦しました…。
name: release build
# vから始まるタグが付いたら実行する(例: v1, v1.2, v1.2.3)
on:
push:
tags: ['v*']
jobs:
release:
name: release build
runs-on: ubuntu-latest
steps:
# 準備
- name: checkout
uses: actions/checkout@v2
- name: pull builder image
run: docker pull macrat/sphinx-pdf
# ビルドする
- name: build
run: docker run --rm --user $UID -v `pwd`:/docs macrat/sphinx-pdf
# HTMLはzipにまとめる
- name: create zip
run: |
mv ./_build/html ./manual
zip -r HTML.zip ./manual
# GitHubにリリースを作る
- name: create release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: ${{ github.ref }}
draft: false
prerelease: false
# PDFファイルをリリースページにアップロード
- name: upload PDF
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./_build/latex/sphinx.pdf
asset_name: manual_PDF.pdf
asset_content_type: application/pdf
# HTMLを固めたzipをリリースページにアップロード
- name: upload HTML
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./HTML.zip
asset_name: manual_HTML.zip
asset_content_type: application/zip
GitHub Actions上でSphinxとかlatexとかをインストールするのが面倒だったので、自作したSphinxをHTMLとPDFにビルドするDockerイメージを使用するようにしています。
リリースの作成には公式で用意されているactions/create-releaseを、ビルド結果のアップロードには同じく公式のactions/upload-release-assetを使用しています。