BitbucketとCircle CIでLatexする
前回からだいぶ空いてしまったが,小ネタを投下する. 以前に,
Jenkins+Bitbucket(Git)でLaTeX - めもちょー
という記事を書いた. ここでは,CIを用いてlatexdiffによる差分Latexの生成, コンパイル,Downloadsへのアップロード を行うようなものを作ってみた.
Bitbucketは現在,PiplinesというCIのサービスを提供しているが, Circle CIと比較して,一ヶ月あたりの無料枠が小さいため, ここではCircle CIを利用する. なお,Circle CI 2.0を対象とする.
TL;DR
config.yml for Latex on Circle CI 2.0
既存のDockerイメージの利用
Latex環境構築,特に日本語文書を扱う場合,やや手続きが煩雑となるが,
Circle CIでは任意のDockerイメージが利用できる.
ここでは,
paperist/alpine-texlive-ja
[1]
を使わせてもらった.
準備
先のDockerイメージは小さくて良いのだが,いくつかこの後必要となる ものがないので,それらをインストールする.
apk add --update git patch curl apk add --update ca-certificates openssl && update-ca-certificates tlmgr install ulem latexdiff
latexmkを利用するために,.latexmkrc
を置いておく.
あまり良いやり方ではないが,
リポジトリに元となるファイルを含ませておく.
cp .latexmkrc ~/.latexmkrc
Latexファイルのコンパイル
普通にやる.後でartifactsをアップロードするため,
/tmp/artifacts
にまとめておく.
latexmk main.tex; mkdir /tmp/artifacts; cp main.pdf /tmp/artifacts/
diffの作成とコンパイル
これも普通にやる.日本語だと[2] にあるような問題があるため, パッチを当てる必要があったりする. また,BibTeX周りもちゃんとやらなければならないのだが, ここではやらない.
latexdiff-vc -e utf8 --git -r HEAD^ -r HEAD main.tex; latexmk main-diffHEAD^-HEAD.tex; cp main-diffHEAD^-HEAD.pdf /tmp/artifacts/
BitbucketのDownloadsへのアップロード
基本的には[3] の通り行う.Bitbucketで作成したApp Passwordを Circle CI側にEnvironment Variableとして与えてやる. 以下のようにartifactsをcurlを使ってアップロードする.
curl -X POST "https://${BB_AUTH_STRING}@api.bitbucket.org/2.0/repositories/${CIRCLE_PR OJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/downloads" --form files=@"/tmp/artifacts/main.pdf"; curl -X POST "https://${BB_AUTH_STRING}@api.bitbucket.org/2.0/repositories/${CIRCLE_PR OJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/downloads" --form files=@"/tmp/artifacts/main-diffHEAD^-HEAD.pdf";
まとめ
ざっくり説明をしてみた. Circle CI 2.0向けの資料は公式ドキュメントが揃っているとはいえ まだそんなに多くない印象. App Passwordだけは外に漏らさないようにしたい.
[1] http://3846masa.hatenablog.jp/entry/2017/02/08/215920
[2] http://quickhack.net/nom/blog/2013-06-16-latexdiff-for-japanese-documents.html