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 run: | 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" done # keep pdf/ containing only pdfs 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 }}