🐷

mkdocsでTechサイトを作ろう(2)

2022/01/10に公開

年末年始に mkdocs のページの構造をリニューアルして、Notebook とサンプルコードを
別リポジトリに分離したので、修正した内容をまとめておこうと思います。

submodule 化

https://fereria.github.io/reincarnation_tech/60_JupyterNotebook/USD/APISchema/USDCollectoinSample/
https://fereria.github.io/reincarnation_tech/65_SampleCode/PySide/pyside_Delegate/

今回やったのは、SampleCode ページの別リポジトリ化。
この2つのページは、指定のフォルダ以下にある Python ファイルや Notebook(ipynb)を自動で Markdown に変換して
ページに載せています。
私はコードをテストするときに JupyterNotebook を多用しているのですが
今までは別のフォルダでテストして、公開してよさそうなものを
Tech ページのリポジトリにコピーしてから Push していました。

なのですが、性質上サンプルコードも Notebook も単独のリポジトリに分離したかったので
この2つをサブモジュールにして
サブモジュール側に Push したら本体の Tech ページもアップデートするようにします。

SampleCode 側は、Sample の中でもものに応じて(Blender とか USD とか)リポジトリを分けておきたかったので

https://github.com/fereria/reincarnation_tech/tree/master/docs/65_SampleCode

SampleCode 以下に、

https://github.com/fereria/blender_samplecode

リポジトリをサブモジュールとして入れておくようにします。

https://github.com/fereria/notebooks

Notebook は、Tech ページのリポジトリ直下に notebooks としてサブモジュールを登録しました。

GithubAction を作る

Submodule 側に Push したら、本体のビルドを実行するようにしたいので
連携するための Action を作成します。

submodule 側

on:
    push:
        branches:
            - master

jobs:
    build:
        runs-on: ubuntu-latest
        steps:
            - name: Create GitHub dispatch event
              run: |
                  curl --request POST 'https://api.github.com/repos/fereria/reincarnation_tech/dispatches' \
                  --header 'Authorization: Bearer ${{secrets.MY_GITHUB_ACCESS_TOKEN}}' \
                  --header 'Content-Type: application/json' \
                  --data-raw '{
                    "event_type": "blender_sample_updated"
                  }'

SampleCode と Notebook のリポジトリに、このような Action を作ります。
--request POST 実行するリポジトリの URL/dispatches event_type はわかりやすいものをつけておきます。

MY_GITHUB_ACCESS_TOKEN は、Settings から

developer settings を開き、

Personal access tokens → Generate new token を押して、

repo を有効にして

作成した Token を、リポジトリの Secrets の Repository secrets に作成した Token を登録します。

Tech ページ側

これで、Submodule 側に Push すると、指定のジョブをキックできるようになりました。
ので、あとはこれを受け取れるようにします。

on:
    push:
        branches:
            - master
    repository_dispatch:
        types:
            - blender_sample_updated

今までは、 on には master ブランチへの Push で実行する指定のみありましたが、
それに repository_dispatch を指定します。
この types が、 submodule 側の data-raw の event_type で指定した文字列になります。

これで、Submodule の Push で、本体のビルドを実行できるようになりました。

ですが、これだけだと Submodule のハッシュが更新されていないので
何度やっても Submodule の内容が更新されません。

ので、Submodule をアップデートするためのコマンドを追加します。

- name: Update Submodule notebooks
  run: cd notebooks && git fetch && git reset --hard origin/master

- name: Update Submodule samplecode
  run: cd docs/65_SampleCode/blender_samplecode && git fetch && git reset --hard origin/master

とりあえずベタ書きで、指定のフォルダ以下で git fetch と git reset を実行します。
これで Submodule が更新されます。

まとめ

以上サンプルコードなどのリポジトリの分離でした。

コードを分離したのは、Techページがどんどん大きくなってきたため
サンプルコードの管理は分離したいという気持ちが以前からあったからなのですが
それ以上に、最近BlenderのPythonコードを勉強しているときに

https://fereria.github.io/reincarnation_tech/10_Blender/10_Scripts/03_vscode_addon_dev/

VSCodeのAddonを使用してテストするのなら、分離して単独にしておくほうが
いろいろと都合がよいというのがありました。

VSCode側のMarkdown記述環境もバージョンアップして、以前よりさらに記事を書くのが
高速化してきたので、引き続きいろんな記事を書いていこうと思います。

GitHubで編集を提案

Discussion