TeX를 GiitHub Actions로 컴파일하여 PDF를 Releases에 업로드
13213 단어 GitHubGitHub ActionsLaTeXTeXtech
개시하다
GiitHub Action을 통해 TeX 파일을 컴파일하는 작업을 만들었습니다.
tsukuba-mas/platex-action
TeX 파일이 있는 저장소
platex-action
로 지정하면 PDF 파일이 컴파일됩니다.platex-action
platex-action의 제작은 다음과 같은 기술을 사용한다.
Dockerfile
GiitHub Action에서는 Action에서 Docker file을 지정할 수 있습니다.
Docker file을 만들고 지정하면 Action이 실행될 때 Docker file을 구축하고 컨테이너를 실행합니다.
Docker file은 주로
コンテナがシェルスクリプトを実行するための環境構築
를 담당합니다.예를 들어 이번에는
aruneko/texlive:latest
의 인상을 바탕으로 한다.그런 다음 컨테이너를 실행할 때 필요한 파일을 준비하기 위해 COPY 명령을 사용하여 만든 이미지에 배치합니다.(배치된 파일은 이미지에서 컨테이너를 생성할 때 입력점, 즉 셸 스크립트에서 사용됩니다.)
그런 다음 ENTRYPOINT에서 수행하는 하우징 스크립트를 지정합니다.
FROM aruneko/texlive:latest
COPY entrypoint.sh /entrypoint.sh
COPY .latexmkrc /.latexmkrc
RUN ["chmod", "+x", "/entrypoint.sh"]
ENTRYPOINT [ "/entrypoint.sh" ]
GiitHub Actions를 실행할 때 Docker file에서 이미지를 구성하여 컨테이너를 만듭니다.그리고 실행
/entrypoint.sh
.이때
entrypoint.sh
용기의 맨 위에 있는 디렉터리입니다.왜냐면 COPY
/
가 구성했기 때문입니다.그러나 용기의 글자 디렉터리는 현재 디렉터리가 루트 디렉터리가 아닙니다.
예를 들어
actions/checkout@v2
를 실행한 경우 /github/workspace
에서 체크아웃한 파일을 확장합니다.그리고 현재 디렉터리도
/github/workspace
입니다.컨테이너를 실행할 때 현재 디렉토리는 다른 Action 또는
WORKDIR
에 따라 달라집니다.action.yml
action.yml은 GiitHub Action 설정에 필요한 파일입니다.
이번 기술은 아래와 같다.
name: "platex Action"
author: "mas-tsukuba"
description: "Compile tex file with platex"
inputs:
LATEX_FILE_NAME:
description: "Compile Tex File"
required: true
default: "main.tex"
runs:
using: "docker"
image: "Dockerfile"
의 특징은inputs
이다.inputs
는 동작을 사용하고자 하는 측의 창고에서 변수를 자유롭게 설정할 수 있도록 하기 위한 것이다.예를 들어
hoge
와 같은 창고에서 컴파일하고자 하는 TeX 파일은 thesis.pdf
인 경우다.이때
hoge/.github/workflows/main.yml
등은 다음과 같이 설정할 수 있다.이렇게 하면 이용하는 hoge에서 파라미터를 자유롭게 바꿀 수 있다.
- name: Compile Tex File
id: compile_tex_file
uses: tsukuba-mas/platex-action@main
with:
LATEX_FILE_NAME: "thesis.tex"
이렇게 하려면 Action 측에서 이 매개변수를 사용해야 합니다.(물론 고정 문자열을 사용하면 사용자가 매개 변수의 내용을 자유롭게 수정할 수 없습니다.)따라서
inputs
에 매개변수를 설정합니다.이 매개 변수는
Dockerfile
에 지정된 entrypoint.sh
와 같은 셸 스크립트에 $INPUT_LATEX_FILE_NAME
INPUT
를 추가하는 데 사용할 수 있습니다.shell script
케이스 스크립트를 사용하여 용기에서 실행할 명령을 실행합니다.
Docker file로 구성된 환경이므로 수행하려는 명령만 기술합니다.
cp /.latexmkrc .latexmkrc
는 Docker file을 제작할 때 복사됩니다.latexmkrc 파일을 현재 디렉터리로 다시 복사합니다.이미지 제작 시 디렉토리에
.latexmkrc
를 배치하더라도 다른 작업을 먼저 수행하면 현재 디렉토리 자체가 변경되기 때문입니다.checkkout action 등에 디렉토리를 설정할 수 있습니다.
따라서 그림을 만들 때 루트에 있고 스크립트가 실행될 때 현재 디렉터리를 가져옵니다.
.latexmkrc
일부러 가져온 것은 사용자 측의 창고에 .latexmkrc
파일이 준비되어 있지 않았기 때문이다.따라서 사용자 측의 창고가 아니라면 기본
.latexmkrc
으로Action의 창고.latexmkrc
를 제공한다.#!/bin/bash
# . = /github/workspace if actions/checkout
set -eux
if [ ! -f .latexmkrc ]; then
cp /.latexmkrc .latexmkrc
fi
# make pdf
latexmk $INPUT_LATEX_FILE_NAME
는 INPUT_LATEX_FILE_NAME
를 통해 컴파일된 TeX 파일을 제공합니다.PDF 업로드
위
platex-action
를 사용하여 TeX 파일을 PDF 파일로 컴파일할 수 있습니다.하지만 이렇게 번역만 했습니다.
어렵게 만든 PDF 파일도 그대로 용기와 함께 삭제됐다.
따라서
actions/create-release
와actions/upload-release-asset@v1
를 이용한다.create-release는 디렉터리
actions/checkout@v2
의 파일을 Zip 파일로 발표합니다.그리고 upload-release-asset를 사용하면 Release에서만 특정한 파일을 만들 수 있습니다.(위 이미지
/github/workspace
이것들은 PDF가 발표될 때까지 main.pdf
에 yaml 파일을 쓸 수 있다.on:
push:
tags:
- "v*"
jobs:
test_job:
runs-on: ubuntu-latest
name: Example of compiling pdf
steps:
# make pdf
# LATEX_FILE_NAME -> main.pdf generated
- name: Set up Git repository
uses: actions/checkout@v2
- name: Compile Tex File
id: compile_tex_file
uses: tsukuba-mas/platex-action@main
with:
LATEX_FILE_NAME: "main.tex"
# Create Release
- 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 }}
body: |
Compiled PDF ${{github.ref}}
draft: false
prerelease: false
# Upload Asset main.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: application/pdf
your-tex-repository/.github/workflows/tex.yaml
의Create Release
에서 사용자는 라벨명, 발행명, 기사를 발행하는 바디 등을 제공한다.또한
with
에서 upload_url
와 같이 지정하면 steps.create_release.outputs.upload_url
용기의 출력을 재사용할 수 있다.최후
GiitHub Actions를 사용하여 TeX 파일을 컴파일하여 PDF를 만들었습니다.
또한 릴리즈와 UPad 작업을 사용하여 PDF를 업로드했습니다.
공식적인 액션과 조합하면 간단하게 올릴 수 있어서 좋아요.
많이 배웠어요.
GiitHub Action에 더 익숙해지고 싶습니다.
Reference
이 문제에 관하여(TeX를 GiitHub Actions로 컴파일하여 PDF를 Releases에 업로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ganariya/articles/platex-github-action텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)