GitHub の markdown を Qiita に投稿する GiutHub Action


GitHub と Qiita とでは記法がほぼ同じなので、薄い変換処理を書くだけで済む。

ちなみに、Medium はだいぶ手間そうだったのでまともに試してない。あと、Zenn は画像やテーブル周りの記法違い吸収が手間そうだった。

GitHub Action

1. Qiita API で投稿するスクリプト用意

シンプルな例として、GitHub の README.md を Qiita に投稿したいとする。

post_qiita.sh
#!/bin/sh

# 行末の空白スペース(GitHub だとそれが改行を意味する)を削除
sed -e 's/[ \t]*$//' README.md > README-qiita.md
# 頭の h1 見出しは Qiita だと冗長なので削る
sed -i '.backup' -e '1d' README-qiita.md

rm README-qiita.md.backup

data=$(cat <<EOS
{
  "body": $(ruby -e 'p ARGF.read.sub(/\A---.*---/m, "")' README-qiita.md),
  "title": "タイトル aaa",
  "tags": [ { "name": "foo" }, { "name": "bar" } ]
}
EOS
)

# See: https://qiita.com/api/v2/docs#%E6%8A%95%E7%A8%BF
# NOTE: QIITA_ACCESS_TOKEN は環境変数でセットしてあるものとする
curl "https://qiita.com/api/v2/items/xxx" \
-v \
-X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${QIITA_ACCESS_TOKEN}" \
-d "${data}"

2. アクセストークンの登録

個人用アクセストークンを発行 して https://github.com/{user_id}/{repository_name}/settings/secrets/actions で登録する。

ここでは、例えば QIITA_ACCESS_TOKEN という名前で設定したとする。

3. workflow 定義

.github/workflows/post_qiita.yaml
on:
  push:
    branches:
      - main
    paths:
      - 'README.md'

jobs:
  post_qiita:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - uses: actions/checkout@v2
      - name: start to post Qiita
        uses: bobheadxi/deployments@master
        id: deployment
        with:
          step: start
          token: ${{ secrets.GITHUB_TOKEN }}
          env: Qiita
      - name: post
        env:
          QIITA_ACCESS_TOKEN: ${{ secrets.QIITA_ACCESS_TOKEN }}
        run: ./scripts/post_qiita.sh
      - name: update deployment status
        uses: bobheadxi/deployments@master
        if: always()
        with:
          step: finish
          token: ${{ secrets.GITHUB_TOKEN }}
          status: ${{ job.status }}
          deployment_id: ${{ steps.deployment.outputs.deployment_id }}
          env_url: https://qiita.com/foo/items/xxx