Github Actionsで卒論CIを作る.

皆さん, 卒論の時期ですね. 僕は卒論の時期です.

LaTeXで文章を書いていて困ることgitでバージョン管理しているはずなのにいろんなバージョンのPDFがパソコンに散らばってしまうことですよね. 私はよくやります.間違えて古いPDFを添削してくれる人に送ってしまったこともあります.

そんなときはGithub Actionを使ってpushするたびにコンパイルをしてgithub pagesにアップロードしてもらいましょう. urlが毎回同じなので添削者にurlを渡しておけばいつでも最新版のPDFを確認してもらえます.

これを読んでやろうとしたら仕様が変わったのかうまく動かなかったのでメモとして書きます. qiita.com

github actions

github actionsの利用申請をするとできます.

リポジトリ

卒論のテンプレートがあるのでforkなりcloneなりします. github.com

gh-pagesというブランチをはやしましょう.

Github ActionsのCIでlatexmkを使ってコンパイルするのでMakefileを書き換えます

#!/usr/bin/env perl
@default_files    = ('thesis.tex');
$latex            = 'platex -synctex=1 -halt-on-error';
$latex_silent     = 'platex -synctex=1 -halt-on-error -interaction=batchmode';
$bibtex           = 'pbibtex';
$biber            = 'biber --bblencoding=utf8 -u -U --output_safechars';
$dvipdf           = 'dvipdfmx %O -o %D %S';
$makeindex        = 'mendex %O -o %D %S';
$max_repeat       = 5;
$pdf_mode         = 3;
$pvc_view_file_via_temporary = 0;

これでだいたい同じように動くはずです.

続いて,

workflow

GithubのrepositoryのActionsにページに行くとNew workflowを押すと .github/workflows/以下にymlファイルが生まれます. これをよしなに名前を変更して,

name: CI

on: 
  push:
    branches:
      - master

jobs:
  latex:
    runs-on: ubuntu-latest
    steps:
    - name: Set up Git repository
      uses: actions/checkout@v1
    - name: Compile and Deploy LaTeX to PDF
      uses: raven38/uberblatt-action@v11
    - name: GitHub Pages Deploy
      uses: maxheld83/ghpages@v0.2.1
      env:
        BUILD_DIR: "build/"
        GH_PAT: ${{ secrets.GH_PAT }}

とします.

raven38/uberblatt-action@v11はDockerfile上にLaTeXの環境を作りbuildディレクトリ以下にgh-pages用にthesis.pdfthesis.pdfへのリンクがはられたindex.htmlを配置します.

maxheld83/ghpages@v0.2.1ではBUILD_DIRを指定してそのディレクトリ(ここではbuild)以下のファイルをgh-pagesにコミットします. GH_PATはgithub actionsがリポジトリへのアクセスのためのトークンで, Githubの右上のユーザアイコンからSettings-Developer Settings-Personal access tokensへと移動し, Generate new tokenを押下します. tokenの名前をよしなに設定しrepoパーミッションにチェックを入れてtokenを生成します.

tokenをコピーし, 次はリポジトリSettings-Secretsへ移動します. Add a new secretsを押下し, 名前にGH_PATmaxheld83/ghpages@v0.2.1に与えた変数名), Valueにコピーしたtokenを貼り付けます.

以上を終えたあと これでGithubにPushをするたびにCIが走り, https://username.github.io/repository_name以下にthesis.pdfへのリンクがはられたindex.htmlが配置され, インターネットに公開されます.

やったね.

もしうまく行かなかった ここのコメント欄か twitter.com までお知らせを