GitHub Actionを使ってMarkdownで書いた文書をAsciidocを介したHTMLに変換する
概要
-
Markdownで書いた文書をGitHubのリモートリポジトリにPushしてHTML文書を作る
- GitHub Actions上のPandocでMarkdown → Asciidoc変換
- GitHub Actions上のAsciidoctorで Asciidoc → HTML変換
- ついでにホスティングしてもらってすぐに結果を見れるようにする
- GitHub Actions上のPandocでMarkdown → Asciidoc変換
- GitHub Actions上のAsciidoctorで Asciidoc → HTML変換
- ついでにホスティングしてもらってすぐに結果を見れるようにする
こんな文章の見た目になります。
背景
AsciidocはMarkdownのような書きやすさとLatexのような描写力をちょうどいいとこ取りしたようなマークアップ言語です。
Asciidocで生成されるHTML書類にはPlantUMLが載せられたり,レイアウトを細かにいじったりできるので仕様書などの生成に比較的向いているのですが,
如何せんMarkdownと文法がごっちゃになったりして覚えるのがいろいろ面倒臭いという問題があります。
そこで,ローカルでMarkdownで書いてしまってその後GitHub Actionsでリモートホストに変換からホスティングまでよろしくやってもらうことにしました。
先行研究
以前MarkdownからAsciidocに変換してHTMLにするのをローカルの環境でやっており,ある程度個人のブログにまとめています。
変換結果の確認などは下記のリポジトリで行っているところです。
一方,それでもDockerの環境やらなにやらを用意して毎回長ったらしいコマンドを打つのが面倒なので今回の記事に至ります。
GitHub Actionsの設定
GitHub Actionsを使うのは初めてなので最適解かどうかはわかりませんが,ひとまず動くリポジトリを下記に残しておきます。
ざっくりとした動作原理
きちんと語れるほど詳しくないですが.github/workflows/hoge.yml
というファイルを設定することでActionsを設定出来ます。
今回は変更がPushされたときに起動するアクションを設定しました。
流れとしては,下記のようになっています。
- Github Workspaceにリポジトリのファイルをチェックアウト
- markdown -> asciidoc 変換 by Pandoc on Docker
- asciidoc -> html 変換 by asciidoctor Action
- 生成物をbuildフォルダに移動
- build folderの中身をgh-pagesブランチにPush ( 参考)
そして実際のコードは以下のようになっています。
# This is a basic workflow to help you get started with Actions
name: CI
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# asciidoc to html
asciidoctor_job:
# The type of runner that the job will run on
runs-on: ubuntu-latest
name: Build AsciiDoctor
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- name: Check out code
uses: actions/checkout@v2
- name: Markdown To Asciidoc
uses: docker://pandoc/core:2.9
with:
args: sample.md --to asciidoctor -o sample.adoc
# Output command using asciidoctor-action
- name: Build AsciiDoc step
id: documents
uses: Analog-inc/asciidoctor-action@master
with:
shellcommand: "asciidoctor sample.adoc -r asciidoctor-diagram -a allow-uri-read -a data-uri -a toc=left"
# Use the output from the documents step
- name: move deploy files
run: |
mkdir build/
mv sample* build/
ls build
- name: deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./build
publish_branch: gh-pages
詳細:Markdown から Asciidoc変換
Kramdocを使ってもいいですが,PandocのActionがあったのでPandocを用いました。
本来のコードはだいたい以下の通りになります。
pandoc sample.md --to asciidoctor -o sample.adoc
スペース1つでも改行がされてしまうなどの不具合?がありますが概ね意図通りの変換担っている気がします。
詳細:AsciidocからHTML変換
こちらはasciidoctorコマンドを用いて変換しています。
asciidoctor sample.adoc -r asciidoctor-diagram -a allow-uri-read -a data-uri -a toc=left
それぞれのオプションの意味は下記のとおりです。こちらはほぼいじる必要はないかと思います。
-
-r asciidoctor-diagram
:PlantUMLなどの図を貼れるようにする -
-a allow-uri-read
:ページ外からのコンテンツ有効化 -
-a data-uri
:画像などのデータのhtmlへの埋め込み -
-a toc=left
:左に目次をつける
TODO
他にもこういうことができるべきなどあればコメント・意見くださると喜びます。
- 数式やPlantUMLなどが正しくはれるかチェック
- Pandocの変換部分のチェック
- ブランチごとに別のhtmlファイルをホスティングできると嬉しい(文章でブランチを着る時用)
参考
Author And Source
この問題について(GitHub Actionを使ってMarkdownで書いた文書をAsciidocを介したHTMLに変換する), 我々は、より多くの情報をここで見つけました https://qiita.com/ossyaritoori/items/5af55fa88f19de90db1e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .