LaTeX ファイルを git push したら PDF をビルドしてアップロードするようにした

概要

bitbucket pipelines を少しさわりました.

背景

論文の共有とかに何を使っていますか?私は git を使っています. Overleaf とか使えばいいんですが,なんだかんだローカル環境のほうがエディタの好みとか合わせて色々やりやすく,指導教員と二人だけのときは git を使っています.

それで,bitbucket 上で D論とか管理して,指導教員と共有していました.

ただ,ちょっと進捗を覗いてもらうには,毎回 pull してビルドしてもらうってのもハードル高いかなと思い,PDFを自動生成してアップロードすると良さそうだと思いました.

という建前と,D論の気分転換ですね.

方法

LaTeX に関することは一切説明しません. yaml についてちょっと知識があるとわかりやすいかもしれないですがどっちでもよいです.

Bitbucket pipeline という自動化ツールを使います.

たぶん github とかでも同じことできるはず(調べてない)

コミット後に latexmk を実行し,できたファイルをアップロードさせれば良いだけです.

具体的には次の3ステップでできます.

  1. bitbucket-pipelines.yml というファイルを作って以下を書き込みます.
  2. アプリパスワードを生成します.
  3. アプリパスワードとそれを生成したアカウント名を環境変数に入れます.
image: ghcr.io/being24/latex-docker:3.2.8

pipelines:
  default:
    - step:
        name: Build the pdf
        script:
        - latexmk main.tex --jobname=<NAME>
        artifacts:
        - <NAME>.pdf
    - step:
        name: Upload
        script:
          - pipe: atlassian/bitbucket-upload-file:0.1.2
            variables:
              BITBUCKET_USERNAME: $BITBUCKET_USERNAME
              BITBUCKET_APP_PASSWORD: $BITBUCKET_APP_PASSWORD
              FILENAME: '<NAME>.pdf'

コミットすると自動的に動いて,bitbucket.org/USERNAME/REPONAME/downloads/ に PDF がアップロードされます.

実行例
donwload
以下,それぞれ分かった範囲で説明します.(ほぼ自分用メモ)

bitbucket-pipelines.yml

このファイルは,コミットとかが起こった後に何をするかを記述するファイルと言う感じっぽいです.

image: ghcr.io/being24/latex-docker:3.2.8

 \LaTeX 環境が入った docker image をロードする感じです.ググって出てきたイメージを適当に使いました.

pipelines:
  default:

しらべてない,おまじない

    - step:
        name: Build the pdf
        script:
        - latexmk main.tex --jobname=<NAME>
        artifacts:
        - <NAME>.pdf

step はコンパイルとかの1単位という感じ?

name は好きなものを設定してください.後で今どこまで終わったかの確認くらいしか使わないです.

script 以降にコンパイル方法を指定すればよいです.私の環境だと latexmkrc にすべて書いているので,これだけで良いです. platex とかでコンパイルしているなら,

script:
- platex main.tex 
- pbibtex main.aux
- platex main.tex
- platex main.tex
- dvipdfmx main.dvi

とかで行けるんじゃないんですかね(てきとう)

artifacts:
- <NAME>.pdf

生成されるpdf ファイルの名前を入れておくとよいです,あとのアップロードのために宣言してるっぽい?おまじない.

    - step:
        name: Upload
        script:
          - pipe: atlassian/bitbucket-upload-file:0.1.2
            variables:
              BITBUCKET_USERNAME: $BITBUCKET_USERNAME
              BITBUCKET_APP_PASSWORD: $BITBUCKET_APP_PASSWORD
              FILENAME: '<NAME>.pdf'

↓参照.<NAME>.pdf をアップロードしてくれます. support.atlassian.com

ところで,ここで - $BITBUCKET_USERNAME - $BITBUCKET_APP_PASSWORD という項目が出てきました.これはアップロードに必要な認証用のユーザ名,パスです.以下でこれを設定法を書きます.

これらは,リポジトリの設定画面から,環境変数のところに飛ぶと設定できます.

環境変数設定画面

BITBUCKET_APP_PASSWORD

個人設定画面からアプリパスワードを生成します. そこで出てきたパスキーをコピーして貼っ付ければよいです.

アプリパスワード設定画面

BITBUCKET_USERNAME

ユーザー名を入れてください.個人設定からも見れるはず.

future work

Slack にできた pdf 自動アップロードとかしたら面白そうだけど,単なる通知以上はめんどそうなのであきらめた

てかわたしの個人ページでこれをやりましょう

あとがき

久々にこういうのさわったけど,ちょっとおもしろいね