60 lines
2.1 KiB
YAML
60 lines
2.1 KiB
YAML
name: Build LaTeX PDF
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- '**/*.tex'
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 2 # need previous commit to diff against
|
|
|
|
- name: Find changed .tex root files
|
|
id: changed
|
|
run: |
|
|
apt-get update -qq && apt-get install -y -qq git > /dev/null
|
|
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
|
|
# root files = .tex files that contain \documentclass
|
|
CHANGED=$(git diff --name-only "${{ github.event.before }}" "${{ github.sha }}" -- '*.tex' || true)
|
|
ROOTS=""
|
|
for f in $CHANGED; do
|
|
if [ -f "$f" ] && grep -q '\\documentclass' "$f"; then
|
|
ROOTS="$ROOTS $f"
|
|
fi
|
|
done
|
|
echo "roots=$ROOTS" >> "$GITHUB_OUTPUT"
|
|
echo "Root files to build: $ROOTS"
|
|
|
|
- name: Compile changed root files
|
|
if: steps.changed.outputs.roots != ''
|
|
uses: docker://texlive/texlive:latest-full
|
|
with:
|
|
entrypoint: sh
|
|
args: >-
|
|
-c "mkdir -p pdf aux && for f in ${{ steps.changed.outputs.roots }}; do
|
|
echo Building $f;
|
|
latexmk -pdf -interaction=nonstopmode -halt-on-error -outdir=pdf -auxdir=aux \"$f\" || exit 1;
|
|
done && find pdf -type f ! -name '*.pdf' -delete"
|
|
|
|
- name: Upload built PDFs
|
|
if: steps.changed.outputs.roots != ''
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: pdf-output
|
|
path: pdf/*.pdf
|
|
|
|
- name: Commit PDFs back to repo
|
|
if: steps.changed.outputs.roots != ''
|
|
run: |
|
|
git config user.name "gitea-actions"
|
|
git config user.email "actions@gitea.local"
|
|
git remote set-url origin "https://Domipoke:${{ secrets.GITEA_PUSH_TOKEN }}@gitea.egregge.eg/Domipoke/SharedLaTeX.git"
|
|
git add pdf/*.pdf
|
|
git diff --cached --quiet || git commit -m "CI: rebuild PDF(s) [skip ci]"
|
|
git push origin HEAD:${{ github.ref_name }} |