以前、blogsync と textlint を使ったブロク投稿について書きました。
そこに登場したのが、GitHub Actions です。
そこでぼくは考えました。おや、エントリを GitHub のリポジトリで管理しておきさえすれば、以下のようなエントリの PUSH による自動投稿が可能になるのでは…と。
- エントリを PUSH
- GitHub Actions を使って:
- textlint で校正
- blogsync で投稿
GitHub Actions
こちらが、PUSH からの自動投稿までをワークフロー化した .github/workflows/blog.yaml
です。
name: kiririmode.hatenablog.jp post entry workflow on: push: paths: - 'kiririmode.hatenablog.jp/entry/**.md' jobs: post: name: post entries runs-on: ubuntu-latest steps: - name: Checkout the commit uses: actions/checkout@v2 - name: Setup Node.js environment uses: actions/setup-node@v1 - name: Install dependencies run: npm install - name: Setup blogsync env: BLOGSYNC_VER: v0.10.2 run: | mkdir bin curl --location --output blogsync.tar.gz --remote-name https://github.com/motemen/blogsync/releases/download/${BLOGSYNC_VER}/blogsync_${BLOGSYNC_VER}_linux_amd64.tar.gz tar zxf blogsync.tar.gz -C bin --strip-component 1 blogsync_${BLOGSYNC_VER}_linux_amd64/blogsync - name: append blogsync path to PATH run: echo "::add-path::./bin" - name: post entries env: TZ: "Asia/Tokyo" run: make post
個々の Step は name
で記載した通りで、複雑なことはしていません。
ハマりポイントは PATH
を操作する方法でした。
PATH を操作する方法
PATH は env
では操作できません(たぶん)。これを実現するためには、 run: echo "::add-path::{path}"
を使用します。
詳細は GitHub Actionsの開発ツール を参照頂ければ良いのですが、GitHub Actions はいくつかのユーティリティコマンドを用意してくれています。
その実行方法がおもしろくて、特定の Format で echo を行うというものです。たとえば、システムパスを追加するためには以下の echo
を実行すれば良いです。
echo "::add-path::/path/to/dir"
上記を実行後、次の Step から path/to/dir
が追加された新しい PATH
が有効になります。
Makefile
関連する Makefile の箇所を抜粋すると以下の通りです。あまり凝ったことは行っていません。
.PHONY: new-entry new-entry: echo | blogsync post --draft ${BLOG} .PHONY: check check: npx textlint --fix ${BLOG}/entry/${DATE}/*.md npx textlint ${BLOG}/entry/${DATE}/*.md .PHONY: post post: check blogsync push ${BLOG}/entry/${DATE}/*.md