🏝

GitHub Pages で Sphinxしたい

2023/09/14に公開

GitHub Actions

Poetry + SphinxでGitHub PagesできるGitHub Actionsです。

.github/workflows/static.yml
# 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