サイトのプログラムと記事データを分離して管理可能に変更しました。
もともとはルートディレクトリ配下に _posts ディレクトリを配置して、
その中に各記事ファイル(.md)を格納しています。
この _posts は別のリポジトリで管理を行い、pushされたタイミングで自動的に吸い上げるように、変更をおこないました。
編集したファイル
今回はプログラムではなく GitHub Actions を利用して実行しています。
- はじめに
postsレポジトリを作成し、そこに今までの記事を移動する。 - 次に以下の
workflowをpostsレポジトリに設定する。
これはpostsレポジトリが変更された場合は、
actionを実行して、blogリポジトリに通知するようになっています。
blogリポジトリはこの通知をもとにactionを実行するになります。
main.yaml
--- 2023-03-19 記事のフォルダ構成を変更し、zenn-cliを利用可能な構成に変更
name: dispatch target file updated
on:
push:
branches:
- main
+ paths:
+ - 'articles/*'
jobs:
dispatch-target-updated:
name: dispatch-target-updated
runs-on: ubuntu-latest
steps:
- name: dispatch target-updated
uses: peter-evans/repository-dispatch@v1
with:
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
repository: 'mook-jp/blog'
event-type: target-updated
- 次に
blogリポジトリにworkflowを設定する。
これは2で作成したworkflowが実行されたことを検知して、
actionが実行され、blogリポジトリに記事をコピーしてcommitします。
main.yaml
--- 2023-03-19 記事のフォルダ構成を変更し、zenn-cliを利用可能な構成に変更
name: copy target.yml from repository1
on:
repository_dispatch:
types: [target-updated]
jobs:
copy-target:
name: copy target.yml
permissions:
actions: write
checks: write
contents: write
deployments: write
issues: write
packages: write
pull-requests: write
repository-projects: write
security-events: write
statuses: write
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: clone posts
uses: actions/checkout@v2
with:
repository: mook-jp/posts
path: posts_dir
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: make _posts
run: rm -rf ./_posts && mkdir -p ./_posts
- name: copy md
- run: cp posts_dir/*.md ./_posts/
+ run: cp posts_dir/articles/*.md ./_posts/
- name: clean posts
run: rm -rf posts_dir
- name: commit
run: |
git config user.name mook-jp
git config user.email mook24.jp@gmail.com
git add .
git commit -m "Update post"
git push
これで posts リポジトリが更新された場合は、
自動的に blog にコピーして commit が行われます。
最終的には blog のコミットを検知して、
cloudflare pages に deploy されることになります。
tokenの期限切れ対応
期限切れが発生したときは下記の対応が必要になる。
1.生成済みのTokenの再生成を行う
- githubを開く(https://github.com/settings/tokens?type=beta)
- 生成済みのTokenをクリック
Regenerate tokenをクリック- 生成されたTokenをコピーする
2.actionsを登録したrepositoryのsettingsを開く
3.Secrets and variablesのActionsを開く
4.登録済みのSecretsの編集ファイルに1でコピーしたテキストを張り付ける
この対応にてActionsが正常に動作するようになる。
エラーが発生した時はActionsのエラーでError: Bad credentialsとなる。
