GitHubでDoxygenの自動生成とPage公開

概要

ライブラリの動作確認をしているときにソースファイルを直接読むのがつらいのでDoxygenがあると便利なときがあると思います。どうせなら自動で作れるようにすると便利だと思い、連携方法を調べてみました。

テスト用リポジトリ作成

とりあえずあたらしく作って実験してみます。M5Unifiedを自動化したいのでフォークしようと思ったのですがPage公開が禁止設定されていたので、新規で作成して手動でコピーしてきます。

空のリポジトリができました。

M5UnifiedDoxygenTestのクローン

git clone git@github.com:tanakamasayuki/M5UnifiedDoxygenTest.git

自分の環境にGitをクローンします。この段階では何もファイルが入っていません。

M5Unifiedのダウンロード

GitHub - m5stack/M5Unified: Unified library for M5Stack series
Unified library for M5Stack series. Contribute to m5stack/M5Unified development by creating an account on GitHub.

上記からZipで一式ファイルをダウンロードします。このファイルを展開して先程の空のリポジトリクローンにコピーします。この時点ではM5Unifiedとまったく同じファイル構成です。

アクション用ファイル追加

GitHub - DenverCoder1/doxygen-github-pages-action: GitHub Action for deploying Doxygen documentation to a GitHub pages branch
GitHub Action for deploying Doxygen documentation to a GitHub pages branch - DenverCoder1/doxygen-github-pages-action

上記のアクションを利用させてもらいます。GitHub Actionからdoxygenを呼び出して、GitHub Pagesに連携してくれます。

  • .github/workflows/doxygen-gh-pages.yml

上記ファイルを作成して、以下の設定を入れます。

mkdir .github
mkdir .github/workflows/
touch .github/workflows/doxygen-gh-pages.yml

とりあえずコマンドで空ファイルを作って書き換えます。

name: Doxygen GitHub Pages Deploy Action

on:
  push:
    branches:
      - master
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: DenverCoder1/doxygen-github-pages-action@v1.3.0
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          branch: gh-pages
          folder: docs/html
          config_file: Doxyfile

最低限の設定ではなくAdvanced Usageの方を参考にしたほうがよいと思います。branchesがmainになっていますので、メインのブランチ名に変更してください。私はmasterを使っている事が多いです。

アクションのバージョンとかが上がっている可能性がありますので、定期的にバージョンを確認したほうがよいと思います。

あと、実行条件としてon pushでmasterが更新されたら毎回自動生成しています。このプロジェクトだと35秒ぐらいですが、大きなものだと無料枠を超過するので設定を調整したほうがよいと思います。on workflow_dispatchは手動実行の設定です。

Doxygenの設定ファイル作成

手で書くのは大変なので自分のパソコンにDoxygenをいれて、中に入っているウイザードを利用して設定ファイルを作ります。

このページで最低限設定するのはプロジェクト名と、ソースコードを「./」、フォルダのスキャンをチェック、出力先を「docs」にすることです。

とりあえずAll EntitiesにしてIncludeも追加するといろいろ対象ファイルが増えます。とりあえず全部入りにして、プログラム言語をC++にしました。

左パネルがあるナビゲーションに変更して、使わないLaTeXのチェックを外しました。

画像も内蔵のではなくGraphVizを利用して、全部入りで書き出します。

このページまで来たら完成なので、Save asで設定ファイルを書き出して、リポジトリに入れます。

アクションに書き込み権限追加

Setting -> Actions -> General -> Workflow permissionsでデフォルトの読み込みだけの権限から、書き込み権限も与えます。これで作成したDoxygenファイルを「gh-pages」ブランチに書き込むことができます。

ちなみにアクションに失敗して/usr/bin/gitのエラーがでるときには書き込み権限がない場合になります。Saveボタンで変更を保存しないと失敗します!

コミットとプッシュ

git add .
git commit
git push origin master

上記を実行すると自動でアクションが動い、Doxygenのビルドが動くはずです。

成功すると「gh-pages」ブランチができています。このブランチにDoxygenが生成したファイルが入っています。

たくさんのファイルが入っていれば成功です。この状態だとまだPagesに公開されていませんので、公開設定をします。

Pages設定

公開するブランチを「gh-pages」にして/を設定します。Saveすることで設定完了です。ただし、即時反映ではないので数分待ちます。

リロードするとPagesのURLが増えていました。

M5Unified: Main Page

上記になります。

https://tanakamasayuki.github.io/M5UnifiedDoxygenTest/classm5_1_1Power__Class.html

たとえばこんな感じで関数のリファレンスと、その中で呼ばれているクラスなどがわかります。そして直接コードをみるリンクもあるので解析しやすくなります。

見た目の調整

GitHub - jothepro/doxygen-awesome-css: Custom CSS theme for doxygen html-documentation with lots of customization parameters.
Custom CSS theme for doxygen html-documentation with lots of customization parameters. - jothepro/doxygen-awesome-css

最近は上記の設定をいれて、すこしモダンなDoxygenにするのがいいようです。みための問題なので、デフォルトのDoxygenは微妙だなという人は入れてみてください。

まとめ

GitHub Actionsは無料枠がある程度あるので、アカウントの枠に余裕があればドキュメントまで自動生成にしたほうが便利だと思います。ただし、pushをトリガーに自動生成しないで、workflow_dispatchで手動実行だけでも良いのかもしれません。もしくはreleaseとかのアクションかな?

コメント