記事部分をプライベートリポジトリに移した
2025-04-16
#Diaryこれまでは執筆中の記事もGitHub上では公開されている状態だったのですが、万が一ここが大炎上した時のためにいつでも非公開にできるようにしておきます。
以下の2つのレポジトリに分割し、ras0q/blogのposts/
にras0q/blog-postsをGit Submoduleとして配置しました。
昨日書いた GitHub IssueをCMSにした も、現在はras0q/blog-postsの方で動くようになっています。
- ras0q/blog (public): ページの構造やLumeの設定
- ras0q/blog-posts (private): 記事がフラットに置かれる
また、記事が更新されたら自動でSubmoduleの参照を更新して本番環境に反映できるようにしました。
以下の記事を参考に、自分しかアクセスできないGitHub Appを設定して認証を行いました。
子が変更されると親のworkflow_dispatch
イベントを発火させる設定になっています。
Cloudflare Pages (じきにWorkersに移したい) でデプロイしている関係でSubmoduleのRemove URLをSSHにする必要があり、素直にPATを使うことができず鍵生成の必要があったのですが、GitHub Appを使うことでここら辺がクリアに運用出来て良い体験でした。
環境変数やシークレットの設定が面倒ですが、これはどの方法でも少なからず起こるので受け入れました。
追記: BOTのCommitでは以下のWorkflowは発火しないため、(例えばras0q/blogの場合では)記事作成のWorkflowの完了をトリガーにするなどの工夫が必要です。
# [ras0q/blog-posts] .github/workflows/update-parent.yaml
# 子 (ras0q/blog-posts) から親 (ras0q/blog) のWorkflowを発火させる
name: Trigger parent workflow to update submodules
on:
push:
branches:
- main
# 追記: BOTのCommitでは発火してくれないので、記事作成Workflowから発火するようにする
workflow_run:
workflows:
- "Generate post"
types:
- completed
jobs:
update-parent:
if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
steps:
- uses: actions/create-github-app-token@v1
id: app-token
with:
app-id: ${{ vars.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
- name: Dispatch parent workflow
run: gh workflow run --repo ras0q/blog update-submodules.yaml
env:
GH_TOKEN: "${{ steps.app-token.outputs.token }}"
# [ras0q/blog] .github/workflows/update-submodules.yaml
# 手動で発火させることができ、Submodulesを更新する
name: Update submodules
on:
workflow_dispatch:
jobs:
update-submodules:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/create-github-app-token@v1
id: app-token
with:
app-id: ${{ vars.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
- uses: actions/checkout@v4
with:
token: "${{ steps.app-token.outputs.token }}"
submodules: true
- name: Update submodules
run: |
git submodule update --remote --recursive
git config --global user.name "GitHub Actions"
git config --global user.email "[email protected]"
git add .
git commit -m "Update submodules"
git push origin HEAD