目標達成#
- Notion の記事を Markdown 形式に変換
- Notion でブログを書く
- Notion の記事を Hexo に公開
プロジェクトの起源#
- 初代:プロジェクトは@Mo Huishouによって最初に作成されましたが、阿里云の画像ホスティングのみをサポートし、記事の修正はサポートしていませんでした。
- 現在:@Doradxによって改造され、複数の画像ホスティングをサポートし、記事の修正も可能になりました。
プロジェクトチュートリアル#
私の個人的なプロセス#
上記のチュートリアルは十分に完璧ですが、このプロセスでの自分の操作ミスを書きたいので、選択的に閲覧できます。
- 下記のリンクを開いて Notion ボットを作成し、
Secrets
を取得します。
- テンプレートblog-templateをコピーします。
- データベースを認証し、コピーしたテンプレートを開き、右上の 3 つの点をクリックし、下の「connection を追加」をクリックして、先ほどのボットを追加します。
- ブログリポジトリの
settings/secrets/actions
に環境変数を追加します。NOTION_DATABASE_ID
、NOTION_TOKEN
、PICBED_CONFIG
の 3 つです。以下は大物の原文です:
- ブログのディレクトリ
.github/workflows
にdeploy.yml
とnotion_sync.yml
を新規作成します。私のコードは以下の通りです:
name: Automatic deployment
on:
push:
branches: master
paths:
- "source/**"
- "**.yml"
workflow_dispatch:
workflow_call:
env:
GIT_USER: wangyunzi
GIT_EMAIL: xueq695@gmail.com
jobs:
build:
name: Ubuntu and node ${{ matrix.node_version }} and ${{ matrix.os }}
runs-on: ubuntu-latest
strategy:
matrix:
os: [ubuntu-latest]
node_version: [16.19.1]
steps:
- name: Checkout blog and theme
uses: actions/checkout@v3
with:
submodules: "recursive"
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node_version }}
- name: Install dependencies
run: |
git pull
- name: Depoly
run: |
git ls-files -z | while read -d '' path; do touch -d "$(git log -1 --format="@%ct" "$path")" "$path"; done
npm install
npx hexo clean
npx hexo douban
npx hexo g
- name: Commit & Push
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Automatic deployment.
name: Automatic sync pages from notion
on:
# push:
# branches: master
workflow_dispatch:
schedule:
- cron: "5 */1 * * *"
jobs:
notionSyncTask:
name: Ubuntu and node ${{ matrix.node_version }} and ${{ matrix.os }}
runs-on: ubuntu-latest
strategy:
matrix:
os: [ubuntu-latest]
node_version: [16.x]
outputs:
HAS_CHANGES: ${{ steps.checkStep.outputs.HAS_CHANGES }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node_version }}
- name: Convert notion to markdown
uses: Doradx/notion2markdown-action@latest
with:
notion_secret: ${{ secrets.NOTION_TOKEN }} # NOTION認証コード
database_id: ${{ secrets.NOTION_DATABASE_ID }} # データセットID
migrate_image: true
picBedConfig: ${{ secrets.PICBED_CONFIG}} # picBedの設定、JSON形式、minify JSONを推奨、さもなければエラーが発生する可能性があります。異なる画像ホスティングの設定は、https://picgo.github.io/PicGo-Core-Doc/zh/guide/config.html#picbedを参照してください。
page_output_dir: "source" # pageタイプの記事の出力ディレクトリ、例えばabout。
post_output_dir: "source/_posts/notion" # postの出力ディレクトリ、clean_unpublished_postがtrueの時は、'source/_posts'に設定しないでください。元のディレクトリの記事が削除される可能性があります!!!
clean_unpublished_post: true # 未発表の記事を削除するかどうか、例えば以前発表した記事をNotionで下書きに移動した場合。
- name: Check if there is anything changed
id: checkStep
run: |
if [[ -n "$(git status --porcelain)" ]]; then
echo "HAS_CHANGES=true" >> $GITHUB_OUTPUT;
echo "更新があります & 再デプロイが必要です。"
else
echo "HAS_CHANGES=false" >> $GITHUB_OUTPUT;
echo "コミット & デプロイするものはありません。"
fi
- name: Commit & Push
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Notionからの自動同期。
callDepolyTask:
name: デプロイワークフローを呼び出す
needs: notionSyncTask
if: ${{ needs.notionSyncTask.outputs.HAS_CHANGES=='true' }}
uses: wangyunzi/Annie/.github/workflows/hexo_deploy.yml@master # 自身のGithubアドレスに応じて変更してください
- 上記の 2 つのコードの
node
バージョンを確認し、自分と同じに変更します。(ps: 変更しないと小さな問題が発生することがあります、例えば私のように) - 発表する必要のある記事は、待機中のセクションに置いておきます。効果をすぐに確認したい場合は、手動でアクションを実行します。ソースコードはデフォルトで 1 時間ごとに記事の発表が必要かどうかを確認します。
今回の完璧な達成は完全に@Doradx大物の情熱的な助けによるもので、この文章を書くことは、彼がこの便利なプロジェクトを改造してくれたことへの感謝だけでなく、大物が私にこれらの設定を完成させるために何度も指導してくれたことへの感謝でもあります。