---
# System prepended metadata

title: GitHub Actions で latexmk を動かして生成された PDF をリリースにぶら下げる
tags: [public-tech]

---

---
breaks: false
tags: public-tech
---
# GitHub Actions で latexmk を動かして生成された PDF をリリースにぶら下げる

GitHub レポジトリに LaTeX コードが `v1` のようなタグでプッシュされたときに、
そのコードを `latexmk` でビルドして PDF を生成し、それを `v1` の名前でリリースに
ぶら下げるための GitHub Actions を書きました。

## 使い方

`.github/workflows/release.yml` に、次のように書いて `push` してください。
`FILENAME: main` のところには LaTeX ファイル名を記入してください。

```yaml=

on:
  push:
    tags:
      - "v*"
env:
  FILENAME: main
jobs:
  release:
    runs-on: ubuntu-latest
    container: aruneko/texlive
    steps:
      - name: Checkout git repo
        uses: actions/checkout@v2
      - name: Build a PDF file by latexmk
        run: latexmk $FILENAME.tex
      - name: Create a release
        uses: softprops/action-gh-release@v1
        with:
          files: ${{ env.FILENAME }}.pdf
```

PDF 生成をしたい場合はまず、`v` から始まるタグをつけて `push` します：
```
$ git tag v1 HEAD
$ git push --tags
```
すると PDF 生成が始まり、成功すれば、新しく生成されたリリースに asset として
ぶら下がります。

![](https://i.imgur.com/xPqPyfE.png)

実際に動いている[この GitHub レポジトリ](https://github.com/ushitora-anqou/test_github_actions_latex)も参考にしてください。

## モチベーション

似たようなものはすでに大量にインターネット
上にありますが、大抵の場合、その著者が作った独自 GitHub レポジトリや独自
Docker イメージに依存しており、メンテナンスが途中で放棄されています。
そこでこの記事では、メンテナンスが継続的に行われている
actions/checkout, [aruneko/texlive](https://github.com/aruneko/texlive), [softprops/action-gh-release](https://github.com/softprops/action-gh-release)
のみに依存して workflow を構築します。

## [2023年1月4日 追記] 何もしていないのにビルドが失敗するようになった場合の対処法

何もしていないのにビルドが失敗するようになった場合、
使っているイメージの最新バージョンが壊れている可能性があります。この場合、動いていた過去のイメージの SHA256 ハッシュを直接指定することで復旧できます。
例えば、この追記を書いている現時点で `aruneko/texlive` に `latexmk` が含まれなくなっており、上の設定ファイルのままではビルドが失敗してしまいます。そこで `container` の部分を以下に差し替えると、正しく動作します。

```
    container: aruneko/texlive@sha256:3e42b87810545a1241f0014277c93d47e1b84c74ccf73e91c031976a8f88673b
```

## 参考

- https://github.com/tsukuba-mas/platex-action
- https://zenn.dev/junkato/articles/github-actions-to-generate-pdfs-for-pages