概要
GitHub ActionsでTeXファイルをコンパイルしてリリースしたいと思って作りました。
これによってTeXファイルだけでなく、pdfドキュメントもバージョン管理できるようになります。
参考までにパブリックレポジトリを作りました。
ファイルツリー
.
├── .github
│ ├── actions
│ │ ├── Dockerfile
│ │ └── entrypoint.sh
│ └── workflows
│ └── build.yaml
├── .latexmkrc
└── main.tex
以下本仕組みに関わるファイルのみ紹介します。
workflow
build.yaml
name: compile LaTeX and release PDF
# トリガーは*.*.*のタグが付いたコミットがpushされた時
on:
push:
tags:
- '*.*.*'
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Set up Git repository
uses: actions/checkout@v2
# TeXをcompile
- name: compile latex document
uses: ./.github/actions
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# リリースを作成
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
# compileしたpdfをアップロード
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./main.pdf
asset_name: main.pdf
asset_content_type: pdf
Dockerfile
DOckerはコンテナ建ててコンパイルしてpdf吐き出すだけ
Dockerfile
FROM ubuntu:latest
RUN apt-get update \
&& apt-get install -y tzdata
RUN apt-get install -y --no-install-recommends \
curl \
python3 \
latexmk \
lmodern \
texlive \
texlive-latex-extra \
texlive-lang-japanese \
&& rm -rf /var/lib/apt/lists/*
RUN mktexlsr && mkdir -p /app
WORKDIR /app
ADD entrypoint.sh /entrypoint.sh
RUN ["chmod", "+x", "/entrypoint.sh"]
ENTRYPOINT ["/entrypoint.sh"]
entrypoint.sh
#!/bin/bash
set -eux
# build pdf
latexmk -pdfdvi main.tex
これで*.*.*
の形式でタグを付けたコミットをpushするとpdfが生成され、releaseされることになります。
追記
@peaceiris さんから下記のアドバイスを頂きました
actions/create-release
とactions/upload-release-asset
はもうメンテされていないためgh command
(cli/cli: GitHub’s official command line tool) などに移行するのがオススメです。
そのため、workflowのactions/create-release
とactions/upload-release-asset
をsoftprops/action-gh-release
に変更し書き直しました。
build.yaml
name: compile LaTeX and release PDF
on:
push:
tags:
- '*.*.*'
jobs:
build:
name: Build
runs-on: ubuntu-20.04
steps:
- name: Set up Git repository
uses: actions/checkout@v2
- name: compile latex document
uses: ./.github/actions
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create Release & upload asset
id: create_release-upload_assets
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
files: ./main.pdf
draft: false
prerelease: false
こっちのほうがスッキリしますね。
そしてactionもこっちのほうが20%ほど速かったです。
@peaceiris さんありがとうございました!