デプロイはどうする?
技術的にはCloudflareにつなぐだけで良いのでまずはデプロイしてみる。 公式 の手順をどおりですぐにデプロイは終了。
ここで課題がみつかる
symlinkを使ってたからcontent空っぽじゃん…
方針
- blogを書くときだけcontentをVaultとして開けばいいが、開き直すのめんどくさいのでやりたくない。
- いつものVaultのblogsディレクトリだけquartzに移動して公開できる仕組みにしたい。
- GitHub Actions でなんとかできないか?
手元で毎回Copyコマンド叩いてPushするようにする?
なんとかCIで自動化してデプロイは意識せずに運用したい。・・・
ぐぐるとsubmoduleの方法を試している人がいた。
https://zenn.dev/ganariya/articles/deploy-quartz4-with-submodule
なるほど〜 この方法は良いヒントになる。
ただ懸念点もある。
- 特定のディレクトリのみ公開したいためVault全体はSubmoduleにしたくない。
- dispatchの作成とかも複雑になるしあまりやりたくない。
GPTと相談して以下のシーケンスにしてみた。 PATを登録すると vaultのレポからquartzのレポにPushできるらしいのでそれがシンプルにできそう。
sequenceDiagram participant ov as Obsidian Vault participant ga as GitHub Actions participant qa as Quartz participant cf as Cloudflare Pages ov->>ga: 記事を更新 git push ga->>qa: blogディレクトリを push qa-->>cf: Webhook通知 (push event) cf->>cf: Build cf->>cf: Deploy
GitHub Actions の設定
privateレポジトリにPushするのでPATの発行と設定が必要。 withを使用すると仮想環境が obsidian-blog ディレクトリにquartz相当のrepoを配置してくれる。rsyncでそこに copy して差分Pushする仕組み。
name: Sync Quartz4
on:
push:
branches:
- master
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout Quartz repo
uses: actions/checkout@v3
- name: Checkout Blog repo
uses: actions/checkout@v3
with:
repository: 0123takaokeita/obsidian-blog
token: ${{ secrets.QUARTZ_BLOG_PAT }}
path: obsidian-blog
- name: Sync blog content
run: |
cd obsidian-blog
rsync -av --delete ../blogs/ ./content/
git config user.name "github-actions"
git config user.email "actions@github.com"
git add .
git commit -m "Sync blog content from Quartz" || echo "No changes"
git push origin main