LoginSignup
2
0

More than 3 years have passed since last update.

GithubActionsを用いて、TeXで作成したpdfドキュメントのバージョン管理をする

Last updated at Posted at 2021-03-21

概要

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-releaseactions/upload-release-asset はもうメンテされていないため gh command (cli/cli: GitHub’s official command line tool) などに移行するのがオススメです。

そのため、workflowのactions/create-releaseactions/upload-release-assetsoftprops/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 さんありがとうございました!

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0