DockerとGitHub Actionsを使って自動でtexのコンパイル出来るようにする

2019年11月18日

優秀な皆さんはもう不要かと思うのですが、僕のように怠惰な人間はまだ卒論が書き終わっておらずいよいよ書き始めなければ厳しくなってくる頃合いとなりました。

加えて進捗を担当教授に見てもらう際に常に最新版のpdfをどこかにアップロードしておけば良いんですが、これがまためんどくさかったり、しょっちゅう忘れたりします。

なので、githubにpushする度に自動でpdfを生成して欲しくなりました。

今回の全てが詰まっているリポジトリはこれです
https://github.com/Im-neko/RG-Thesis-Template
中身は研究室の先輩が弊研究室の卒論用テンプレートを作っていたのでそれをフォークして使っています。

workflowsを書く

自動でコンパイルしたいリポジトリに.github/workflows/main.yml を作る
.github/workflows/main.yml

name: main

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/[email protected]
    - name: test
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: sh ./paper/repush.sh

texファイル諸々を保存するフォルダを作る

今回はpaperという名前でリポジトリの直下に作っています。
ここにrepush.shというpushされた時に走る「pdfを生成してpushする」shellscriptをおいておきます

paper/repush.sh

#!/bin/bash
cd `dirname $0`
echo `dirname $0`
pwd
ls
git config --global user.name "im-neko"
git config --global user.email "[email protected]"

git remote set-url origin https://im-neko:${GITHUB_TOKEN}@github.com/Im-neko/RG-Thesis-Template.git

git checkout -b master
git pull origin master
git branch -a

git log -1

last_commit_message="$(git log -1 | tail -1)"
echo $last_commit_message
echo $PWD

docker run --rm -v $PWD:/workdir paperist/alpine-texlive-ja:latest platex thesis.tex
docker run --rm -v $PWD:/workdir paperist/alpine-texlive-ja:latest platex thesis.tex
docker run --rm -v $PWD:/workdir paperist/alpine-texlive-ja:latest dvipdfmx thesis.dvi

git add thesis.pdf
git commit -m '[updater] update pdf'
git push origin HEAD

これでpushする度にpdfを生成してpushしてくれるリポジトリの完成です。
texのdockerでのコンパイルやら諸々の仕方については需要がありそうであればまた書きます。