GitHub Pages で Sphinxしたい
GitHub Actions
Poetry + SphinxでGitHub PagesできるGitHub Actionsです。
# Simple workflow for deploying static content to GitHub Pages
name: Deploy Sphinx Document to Pages
on:
# Runs on pushes targeting the default branch
push:
branches: ["main"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
# Single deploy job since we're just deploying
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Poetry
run: pipx install poetry
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
cache: "poetry"
- name: Check poetry
run: |
poetry --version
poetry config --list
- name: Install dependencies
run: poetry install
- name: Build Sphinx
run: |
cd docs
poetry run make dirhtml
- name: Setup Pages
uses: actions/configure-pages@v3
- name: Upload artifact
uses: actions/upload-pages-artifact@v2
with:
# Upload entire repository
path: './docs/_build/dirhtml/'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2
リポジトリをチェックアウトする
steps:
- name: Checkout
uses: actions/checkout@v4
actions/checkoutを使ってリポジトリをクローンします。
最新のコミットだけがチェックアウトされます。
オプションはとくに必要ありません。
Poetry環境を構築する
steps:
- name: Install Poetry
run: pipx install poetry
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
cache: "poetry"
actions/setup-pythonを使ってPython+Poetryを構築します。
まず、pipx
を使ってpoetryをインストールします。
pipx
はベースにしたubuntu
のイメージにインストールされているっぽいです。
そのあとでsetup-python
のアクションを実行します。
Pythonのバージョンはお好みでよいです。僕は3.11
にしました。
cache: "poetry"
オプションでキャッシュが有効になります。
Poetry環境を構築する方法を調べてみたら、自前のアクションを使っているケースがヒットしたのですが、
このsetup-python
のREADMEにきちんと書いてありました。
依存するアクションは少ない方がいいと思うので、この方法がベストだと思います。
必要なパッケージをインストールする
steps:
- name: Check poetry
run: |
poetry --version
poetry config --list
- name: Install dependencies
run: poetry install
poetry
がインストールできたので、あとはpoetry install
するだけです。
念の為にpoetryのバージョンやパスの設定を確認しています。
ドキュメントをビルドする
steps:
- name: Build Sphinx
run: |
cd docs
poetry run make dirhtml
リポジトリの構造に合わせてSphinxをビルドするためのコマンドを実行します。
今回のリポジトリは(プロジェクトルート)/docs
にドキュメント一式があるため、cd docs
しています。
またdocs/Makefile
があるのでpoetry run make dirhtml
しています。
ドキュメント一式はdocs/_build/dirhtml/
に生成されます。
GitHub Pagesにデプロイする
steps:
- name: Setup Pages
uses: actions/configure-pages@v3
- name: Upload artifact
uses: actions/upload-pages-artifact@v2
with:
# Upload entire repository
path: './docs/_build/dirhtml/'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2
GitHub Pagesにデプロイするための基本アクションです。
actions/starter-workflowsのサンプルすべてで使われていたので、そのままコピペして使っています。
path
は生成されたSphinxドキュメントのディレクトリを設定しています。
まとめ
SphinxでGitHub Pagesを作成するテンプレートはないみたいです。
しかし、他ツールの既存スターターと、Pythonパッケージを公開するためのアクションを眺めて、なんとかできました。
GitHub ActionsはGitLab CIより書きやすいと感じました。
Discussion