That Can

雑な感

LaTeXファイルをGithubにpushしたらCircle CIでPDF生成するようにした

1月に入り、卒論を書かざるを得ない時期になってきた。現実逃避のためにGithubにpushしたらPDFがビルドされるようにした。(一度くらいCIツール使ってみたさがあった)

(普通の研究室は12月中に色々やってるみたいだが、弊研究室はふわふわしていてこの時期に卒論を書き始めていたりすることもある。)

同じことをやっている人はたくさん居るだろうけどいろいろつまづいたので備忘録を残しておく。

概要

Githubにpushしたら、CircleCIが動いてPDFを生成してデフォルトブランチとは別なrelease-pdfブランチに生成したPDFをcommitしてpushしてくれる仕組み。 release-pdfブランチを見れば最新のPDFが見られる寸法。

やったこと

主に次の2つのサイトを参考にした。

retrage01.hateblo.jp qiita.com

Githubリポジトリを準備

人様に見せられるものではないので学生の権利を濫用してPrivateでリポジトリ作成。
先輩の作ったテンプレのtexを頂き、とりまコミット。main.tex内で色々includeする形になっているのでmain.texをビルドすればOKな状態。

CircleCIの準備

サイトでポチポチするだけの作業。

参考:GitHubとCircleCIを連携させる - Qiita

.circleci/config.ymlの追加

CircleCIではYAMLファイルを利用して設定する模様。インデントをタブにしてハマったので注意(スペースしか受け付けてくれない)。 あと、2.0で記法が大分変わった模様。

version: 2
jobs:
    build:
        docker:
            - image: paperist/alpine-texlive-ja
        steps:
            - run:
                name: Installing dependancies
                command: |
                    apk add --update git
                    apk add --update openssh
            - run:
                name: Git settings
                command: |
                    git config --global user.email 'XXXX@YYYYY'
                    git config --global user.name 'XXXX'
            - checkout
            - run:
                name: Generating current version
                command: |
                    latexmk main.tex
                    cp .latexmkrc ~/.latexmkrc
            - run:
                name: Commit to repository
                command: |
                    git checkout release-pdf
                    cp main.pdf dst/main.pdf
                    git add dst/main.pdf
                    git commit -m "[CircleCI] Generate PDF @$(date +'%Y/%m/%d %I:%M') [ci skip]"
                    git push origin release-pdf

CircleCIではDockerを利用してテスト環境作る様子(Dockerよく知らない)。 イメージは参考元に倣ってpaperist/alpine-texlive-ja1をお借りした。 (名前がよく見る人だった)

gitとpush用にopensshを追加で導入。.latexmkrcはよく分からないので適当にggってヒットした記事をコピーアンドペーストした。元のtexファイルがupLaTeX前提だったので、upLaTexを利用することにした。

考えるのが面倒なので、作業ブランチは1つだけ2にして、ビルドしたPDFの設置は別ブランチにした。適当にやると差分が出てcheckoutに失敗したりFast-forwardじゃないって言われてpushに失敗したりして面倒だった。[ci skip]って入れないと無限ループするみたいなので注意。(これを入れたコミットはテストが走らない)

CircleCIとGithubSSH用の鍵追加

一番つまづいた。
参考元にあるように、初期設定だと鍵がread-onlyなためpushができない様子。ERROR: The key you are authenticating with has been marked as read only.みたいなこと言われる。 色々調べて両サイトに登録してたのだが一向に反映されずにキレてたが、CircleCIのProject settings > PERMISSIONS > Checkout SSH keysのAdd user keyみたいなところポチったらさっと両方に登録されて上手くいった。
URLでいうと、https://circleci.com/gh/<username>/<repository>/edit#checkout

英語分からず割と適当にやったので合ってるか分からないけど、ちゃんと調べるのは卒論書き終えてからでええなってなっている。(プライベートリポジトリなので権限周りが面倒だった可能性がある)

まとめ

これで単一URLで最新版のPDFが見られるようになったので便利。あとは、句読点面倒で設定していないので自動で置換するようにしてもいいかなと思ってる。config.yml弄ればできそうだし。 特に通知考えてなかったので、Slackに流したりしてない。気が向いたらやる。

ただ、結論としてこんなことより卒論を書く方に注力すべき。  

 

 

 

 


  1. 3846masa.hatenablog.jp

  2. クソどうでもいいけどmasterではないので、bachelorって名前に変えた。