はじめに
-
Asciidoc
で書いたドキュメントを提供する方法としてGitHubActions
を使ってPDF化して提供することを業務で行った -
GitHubActions
は他のチームが書いたものを模倣して作成したため、理解できていない。次に前にやったことありますよね?と言われてもきっとできない。
と思ったので、整理しておこうと思う。
やったことのサマリ
-
GitHub
のリポジトリからフォルダ/.github/workflows
を作成して、そこにYamlファイルを作成した - Yamlファイルには、PDF出力するためのフローの定義を書いた
- リポジトリ内に
scripts
フォルダを作成して、フローから呼び出しを行い実行するためのgen.sh
を作成した-
gen.sh
でなくても、直接フローに書いても良いみたいだったが、inputファイルとするAsccidocファイルと出力するPDFファイル名をパラメータにして'asciidoctor-pdf'を実行した
-
- フローを定義する中でGemfileを使ったパッケージのインストールがあるため、リポジトリの直下に
Gemfile
を作成してasciidoctor
、asciidoctor-pdf
、asciidoctor-pdf-cjk
を定義- これはGemfile を使用したパッケージのインストールを参考に作成しました。
-
GitHub Actions
からJob
を実行して、エラーになったりした内容を確認して、修正しては実行して、PDF出力できた。
実際にやった内容は以下(困ったことと対応したことも)
-
GitHub Action
では、リポジトリの配下にフォルダ作成して、Yamlファイルを配置する。 -
作成したYamlファイルにPDF出力するためのフロー定義を記述する
PdfOutput.yml(最初に登録した内容)
# ワークフロー名を設定する
name: Generate PDF
# ワークフローのトリガー設定
on:
workflow_dispatch:
# ワークフローの実行内容の定義
jobs:
CreatePDF: # Jobの名前
# 実行する場所の指定
runs-on: ubuntu-latest
# ワークフローで実施するフローの流れ
steps:
# チェックアウト
- name: Checkout
uses: actions/checkout@v2
# 環境を整える、AsciiDoctorとBundlerをインストール
- name: Install asciidoctor # 実行時に出てくる処理の名前
run: |
apt-get update
apt-get install asciidoctor -y
gem install bundler -N
bundle install
- name: Generate PDF # 実行時に出てくる処理の名前
run: |
chmod +x scripts/gen.sh
scripts/gen.sh
- name: Archive files # 実行時に出てくる処理の名前
uses: actions/upload-artifact@v2 # 圧縮する
with:
name: MAP_PDF
path: |
build
retention-days: 30 # 保存期間 : 30日間
困ったこと1
”#” でコメントを書くことができるのですが、♯(環境依存文字?)への変換がされていたりして、コンパイルが通らず、苦戦した
できるだけ、コピペとかはせずに、入力することで回避したけど、何かうまい方法があれば知りたい。。。💦
困ったこと2
Install asciidoctor
を実行したらopen (13: Permission denied)
とエラーになり権限がないとのこと
コマンド実行する前に、sudo
を付けて実行するように修正しました
PdfOutput.yml(最終的に動作確認できた内容)
# ワークフロー名を設定する
name: Generate PDF
# ワークフローのトリガー設定
on:
workflow_dispatch:
# ワークフローの実行内容の定義
jobs:
CreatePDF: # Jobの名前
# 実行する場所の指定
runs-on: ubuntu-latest
# ワークフローで実施するフローの流れ
steps:
# チェックアウト
- name: Checkout
uses: actions/checkout@v2
# 環境を整える、AsciiDoctorとBundlerをインストール
- name: Install asciidoctor # 実行時に出てくる処理の名前
run: |
sudo apt-get update
sudo apt-get install asciidoctor -y
sudo gem install bundler -N
sudo bundle install
- name: Generate PDF # 実行時に出てくる処理の名前
run: |
chmod +x scripts/gen.sh
scripts/gen.sh
- name: Archive files # 実行時に出てくる処理の名前
uses: actions/upload-artifact@v2 # 圧縮する
with:
name: MAP_PDF
path: |
build
retention-days: 30 # 保存期間 : 30日間
#!/bin/sh
# PDF
bundle exec asciidoctor-pdf -a scripts=cjk -a pdf-theme=default-with-fallback-font docs/JapaneseMap.adoc -o build/Japnese-Map.pdf
困ったこと3
GitHubActions
はLinux上で動いているんですね…💦
大文字、小文字を明確に判別しているので、docs/JapaneseMap.adoc
ファイルが存在しないと怒られ、エラーになった。
よくよく見たら、Docs/JapaneseMap.adoc
だったので、以下のように修正しました。
#!/bin/sh
# PDF
bundle exec asciidoctor-pdf -a scripts=cjk -a pdf-theme=default-with-fallback-font Docs/JapaneseMap.adoc -o build/Japnese-Map.pdf
- リポジトリの直下に
Gemfile
ファイルを作成して以下の3つのパッケージをインストールできるようにします。asciidoctor
asciidoctor-pdf
asciidoctor-pdf-cjk
実際に書いた内容は以下
# frozen_string_literal: true
source 'https://rubygems.org'
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
gem "asciidoctor"
gem "asciidoctor-pdf"
gem "asciidoctor-pdf-cjk"
-
Run workflow
のプルダウンを選択すると、実行ボタンRun workflow
が出てくるので、クリックして実行します。
-
実行がうまくいくと、以下のような感じでPDFをarchiveしたファイル
MAP_PDF
が出来上がるので、DLとするとPDFファイルを見ることができるようになります。
まとめ
- GitHubはLinuxで動いているので、フォルダやファイルの名前、バッチ名など、大文字小文字をしっかり判別するので、作成するときには、しっかりと意識して作成しないとダメなんですね。
- Yamlファイルで使えるコメント行を意味する"#"は、環境依存文字とかにならないようにしっかり半角"#"を選択しないと実行業と判断されて処理がエラーになってしまうので、慎重にコーディングしないとダメなんですね。
- Yamlファイルを書く際、実行環境を整えるために
apt-get
などの実行をする必要があり、『これはおまじないです』って聞いていたが実際には権限が無くて、エラーになったw-
sudo
コマンドで権限付与して難を乗り越えたが、一般ユーザーにインストール権限がないことを意識して、環境として設定しておくのか、WorkFlowを定義する都度、コマンドとして書くかは考えないとですね。- 個人で使っている分には、
sudo
でいい気がする
- 個人で使っている分には、
-
-
Github Actions
での実行とは少し異なるが、一つ目の内容と同じことはasciidoc
を書く際にも同じことが言える- PDF化するにあたって、表紙となる
adoc
ファイルを準備して、複数のadoc
ファイルを連結するためインポートを行ったり、 - また、各
adoc
ファイルの中で、画像ファイルなど読み込んでいる。 -
Visual Studio Code
(Windows環境)でドキュメントを書いているときには気にならなかったが、やはり、ファイル連結するためにShellから起動しているので、大文字小文字はしっかり判別されるので、注意が必要!
- PDF化するにあたって、表紙となる