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だけは外に漏らさないようにしたい.